В: Можно ли привязать отдельные контакты другого порта микроконтроллера к регистру и изменить их значения при изменении значения регистра?
Сценарий: я использовал несколько выводов от каждого порта (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 );
Теперь, перейдя к основному вопросу, чтобы избежать этих индивидуальных вычислений для каждого бита на разных портах, можно ли сопоставить отдельные выводы разных портов микроконтроллера с регистром и изменить их значения при изменении значения регистра?