प्रश्न: क्या माइक्रो-कंट्रोलर के विभिन्न पोर्ट के अलग-अलग पिनों को रजिस्टर में मैप किया जा सकता है और रजिस्टर वैल्यू को बदलते समय उनके मूल्यों को बदला जा सकता है?
परिदृश्य: मैंने माइक्रो-कंट्रोलर के प्रत्येक पोर्ट (8-बिट्स) से कुछ पिनों का उपयोग किया है। अब मैं एक ऐसे डिवाइस को इंटरफेस करना चाहता हूं, जिसमें 8-बिट बस की जरूरत हो (मान लीजिए कि D0 से D7 IN SEQUENCE) यह कहना है कि मुझे कंट्रोलर से 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 );
अब, मुख्य प्रश्न पर आते हैं, अलग-अलग बंदरगाहों पर प्रत्येक बिट पर इन व्यक्तिगत गणनाओं से बचने के लिए, क्या एक माइक्रो-कंट्रोलर के अलग-अलग पोर्ट के अलग-अलग पिनों को रजिस्टर में मैप किया जा सकता है और रजिस्टर वैल्यू बदलते समय उनके मूल्यों को बदला जा सकता है?