Питання: Чи можуть окремі штифти різних портів мікроконтролера відображатись у регістр та змінювати їх значення при зміні значення регістру?
Сценарій: Я використав кілька штифтів від кожного порту (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 штифтів, який я можу з'єднати з цим пристроєм, скоріше у мене є кілька шпильок від portx, деякі з porty та деякі шпильки від portz. Новий сценарій підключення такий (підключення від мікроконтролера до пристрою відповідно)
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 );
Тепер, підходячи до головного питання, щоб уникнути цих індивідуальних обчислень на кожен біт на різних портах, чи можна окремі шпильки різних портів мікроконтролера відобразити в регістр і змінити їх значення при зміні значення регістру?