প্রশ্ন: কোনও মাইক্রো-কন্ট্রোলারের পৃথক পোর্টের পৃথক পিনগুলি কোনও নিবন্ধকে ম্যাপ করা যায় এবং নিবন্ধের মান পরিবর্তন করার সময় তাদের মানগুলি পরিবর্তন করা যেতে পারে?
পরিস্থিতি: আমি মাইক্রো-কন্ট্রোলারের প্রতিটি বন্দর (8-বিট) থেকে কিছু পিন ব্যবহার করেছি। এখন আমি এমন একটি ডিভাইসটি ইন্টারফেস করতে চাই যার জন্য একটি 8-বিট বাসের প্রয়োজন (ধরুন D0 থেকে D7 সিকোয়েন্সে) বলতে হবে যে কন্ট্রোলারের কাছ থেকে আমার 8 টি পিন প্রয়োজন যাতে আমি এগুলিকে এক থেকে এক ফ্যাশনে সংযুক্ত করতে পারি
portx0 -> D0 // x is the name of port followed by bit location on that port
portx1 -> D1
...
portx7 -> D7
তবে আমার কাছে 8 টি পিনের পুরো বন্দর নেই যা আমি এই ডিভাইসের সাথে সংযোগ করতে পারি, বরং আমার কাছে পোর্টেক্স থেকে কিছু পিন রয়েছে, কিছু পোর্টি থেকে এবং কিছু পোর্ট পোর্টজ থেকে। নতুন সংযোগের দৃশ্যটি হ'ল (যথাক্রমে মাইক্রো-কন্ট্রোলার থেকে ডিভাইসে সংযোগ)
portx0 -> D0
portx1 -> D1
portx2 -> D2
porty4 -> D3
porty5 -> D4
porty6 -> D5
porty7 -> D6
portz1 -> D7
এই অবস্থায় আমি যদি একটি মান বলতে পাঠাতে চাই
unsigned char dataReg = 0xFA;
নিয়ন্ত্রক থেকে আমার ডিভাইসে আমাকে পাঠাতে হবে এমন মান সম্পর্কে কিছুটা বুদ্ধিমান ক্রিয়াকলাপ করতে হবে এবং প্রতিটি পিন পৃথকভাবে রেজিস্ট্রারে মূল্য অনুসারে সেট করতে হবে। উদাহরণ স্বরূপ
portx0 = ((dataReg & 0x01) >> 0 ); // Masking and shifting as bit position
portx1 = ((dataReg & 0x02) >> 1 );
portx2 = ((dataReg & 0x04) >> 2 );
porty4 = ((dataReg & 0x08) >> 3 );
porty5 = ((dataReg & 0x10) >> 4 );
porty6 = ((dataReg & 0x20) >> 5 );
porty7 = ((dataReg & 0x40) >> 6 );
portz1 = ((dataReg & 0x80) >> 7 );
এখন, মূল প্রশ্নে, প্রতিটি বন্দরে পৃথক পৃথক পৃথক গণনাগুলি এড়াতে, কোনও মাইক্রো-কন্ট্রোলারের পৃথক পোর্টের পৃথক পিনগুলি কোনও রেজিস্টারে ম্যাপ করা যায় এবং নিবন্ধের মান পরিবর্তনের সময় তাদের মানগুলি পরিবর্তন করা যায়?