Q: Les broches individuelles de différents ports d'un microcontrôleur peuvent-elles être mappées à un registre et leurs valeurs peuvent-elles être modifiées lors du changement de la valeur du registre?
Scénario: j'ai utilisé des broches de chaque port (8 bits) du micro-contrôleur. Maintenant, je veux interfacer un périphérique qui a besoin d'un bus 8 bits (supposons D0 à D7 EN SÉQUENCE), c'est-à-dire que j'ai besoin de 8 broches du contrôleur pour pouvoir les connecter de manière un à un
portx0 -> D0 // x is the name of port followed by bit location on that port
portx1 -> D1
...
portx7 -> D7
mais je n'ai pas un port entier de 8 broches que je peux connecter avec cet appareil, j'ai plutôt quelques broches de portx, certaines de porty et quelques broches de portz. Le nouveau scénario de connexion est comme (connexion du micro-contrôleur à l'appareil respectivement)
portx0 -> D0
portx1 -> D1
portx2 -> D2
porty4 -> D3
porty5 -> D4
porty6 -> D5
porty7 -> D6
portz1 -> D7
Dans cet état, si je veux envoyer une valeur, dites
unsigned char dataReg = 0xFA;
à mon appareil depuis le contrôleur, je dois effectuer des opérations au niveau du bit sur la valeur à envoyer et définir chaque broche en fonction de la valeur dans le registre individuellement. Par exemple
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 );
Maintenant, pour en venir à la question principale, afin d'éviter ces calculs individuels sur chaque bit sur différents ports, les broches individuelles de différents ports d'un microcontrôleur peuvent-elles être mappées sur un registre et leurs valeurs peuvent-elles être modifiées lors du changement de la valeur du registre?