Systèmes embarqués - Programmation d'E / S

En 8051, les opérations d'E / S sont effectuées en utilisant quatre ports et 40 broches. Le diagramme de broches suivant montre les détails des 40 broches. Le port d'opération d'E / S réserve 32 broches où chaque port a 8 broches. Les 8 autres broches sont désignées par V cc , GND, XTAL1, XTAL2, RST, EA (bar), ALE / PROG (bar) et PSEN (bar).

Il s'agit d'un PDIP à 40 broches (emballage double en ligne en plastique)

Note- Dans un emballage DIP, vous pouvez reconnaître la première broche et la dernière broche par la coupure au milieu de l'IC. La première broche se trouve à gauche de cette marque de coupe et la dernière broche (c'est-à-dire la 40 e broche dans ce cas) est à droite de la marque de coupe.

Ports d'E / S et leurs fonctions

Les quatre ports P0, P1, P2 et P3 utilisent chacun 8 broches, ce qui en fait des ports 8 bits. Lors de la réinitialisation, tous les ports sont configurés comme entrées, prêts à être utilisés comme ports d'entrée. Lorsque le premier 0 est écrit sur un port, il devient une sortie. Pour le reconfigurer en tant qu'entrée, un 1 doit être envoyé à un port.

Port 0 (broche n ° 32 - broche n ° 39)

Il possède 8 broches (32 à 39). Il peut être utilisé pour l'entrée ou la sortie. Contrairement aux ports P1, P2 et P3, nous connectons normalement des résistances de rappel P0 à 10K ohms pour l'utiliser comme port d'entrée ou de sortie étant un drain ouvert.

Il est également désigné comme AD0-AD7, ce qui lui permet d'être utilisé à la fois comme adresse et comme données. Dans le cas de 8031 ​​(c'est-à-dire puce sans ROM), lorsque nous avons besoin d'accéder à la ROM externe, alors P0 sera utilisé à la fois pour l'adresse et le bus de données. ALE (broche n ° 31) indique si P0 a une adresse ou des données. Lorsque ALE = 0, il fournit les données D0-D7, mais lorsque ALE = 1, il a l'adresse A0-A7. Dans le cas où aucune connexion de mémoire externe n'est disponible, P0 doit être connecté en externe à une résistance pull-up de 10 K ohms.

MOV A,#0FFH  ;(comments: A=FFH(Hexadecimal  i.e. A=1111 1111)  

MOV P0,A     ;(Port0 have 1's on every pin so that it works as Input)

Port 1 (broches 1 à 8)

Il s'agit d'un port 8 bits (broches 1 à 8) et peut être utilisé en entrée ou en sortie. Il ne nécessite pas de résistances de rappel car elles sont déjà connectées en interne. Lors de la réinitialisation, le port 1 est configuré comme port d'entrée. Le code suivant peut être utilisé pour envoyer des valeurs alternées de 55H et AAH au port 1.

;Toggle all bits of continuously 
MOV     A,#55 
BACK:    

MOV     P2,A 
ACALL   DELAY 
CPL     A      ;complement(invert) reg. A 
SJMP    BACK

Si le port 1 est configuré pour être utilisé comme port de sortie, pour l'utiliser à nouveau comme port d'entrée, programmez-le en écrivant 1 sur tous ses bits comme dans le code suivant.

;Toggle all bits of continuously 

MOV     A ,#0FFH    ;A = FF hex 
MOV     P1,A        ;Make P1 an input port                     
MOV     A,P1        ;get data from P1 
MOV     R7,A        ;save it in Reg R7 
ACALL   DELAY       ;wait 

MOV     A,P1        ;get another data from P1 
MOV     R6,A        ;save it in R6 
ACALL   DELAY       ;wait 

MOV     A,P1        ;get another data from P1 
MOV     R5,A        ;save it in R5

Port 2 (broches 21 à 28)

Le port 2 occupe un total de 8 broches (broches 21 à 28) et peut être utilisé pour les opérations d'entrée et de sortie. Tout comme P1 (Port 1), P2 ne nécessite pas non plus de résistances Pull-up externes car elles sont déjà connectées en interne. Il doit être utilisé avec P0 pour fournir l'adresse 16 bits de la mémoire externe. Il est donc également désigné par (A0 – A7), comme indiqué dans le diagramme des broches. Lorsque le 8051 est connecté à une mémoire externe, il fournit un chemin pour les 8 bits supérieurs de l'adresse 16 bits, et il ne peut pas être utilisé comme E / S. Lors de la réinitialisation, le port 2 est configuré comme port d'entrée. Le code suivant peut être utilisé pour envoyer des valeurs alternées de 55H et AAH au port 2.

;Toggle all bits of continuously 
MOV     A,#55 
BACK: 
MOV     P2,A 
ACALL   DELAY 
CPL     A         ; complement(invert) reg. A 
SJMP    BACK

Si le port 2 est configuré pour être utilisé comme port de sortie, pour l'utiliser à nouveau comme port d'entrée, programmez-le en écrivant 1 sur tous ses bits comme dans le code suivant.

;Get a byte from P2 and send it to P1 
MOV    A,#0FFH    ;A = FF hex 
MOV    P2,A       ;make P2 an input port 
BACK: 
MOV    A,P2       ;get data from P2 
MOV    P1,A       ;send it to Port 1
SJMP   BACK       ;keep doing that

Port 3 (broches 10 à 17)

Il est également de 8 bits et peut être utilisé comme entrée / sortie. Ce port fournit des signaux extrêmement importants. P3.0 et P3.1 sont respectivement RxD (récepteur) et TxD (émetteur) et sont collectivement utilisés pour la communication série. Les broches P3.2 et P3.3 sont utilisées pour les interruptions externes. P3.4 et P3.5 sont utilisés respectivement pour les temporisateurs T0 et T1. P3.6 et P3.7 sont des broches d'écriture (WR) et de lecture (RD). Ce sont des broches basses actives, ce qui signifie qu'elles seront actives lorsque 0 leur est donné et qu'elles sont utilisées pour fournir des opérations de lecture et d'écriture à la ROM externe dans les systèmes basés sur 8031.

Bit P3 Fonction Épingle
P3.0 RxD dix
P3.1 < TxD 11
P3.2 < Complément de INT0 12
P3.3 < INT1 13
P3.4 < T0 14
P3.5 < T1 15
P3.6 < WR 16
P3.7 < Complément de RD 17

Double rôle du port 0 et du port 2

  • Dual role of Port 0- Le port 0 est également désigné par AD0 – AD7, car il peut être utilisé à la fois pour la gestion des données et des adresses. Lors de la connexion d'un 8051 à la mémoire externe, le port 0 peut fournir à la fois une adresse et des données. Le microcontrôleur 8051 multiplexe alors l'entrée sous forme d'adresse ou de données afin de sauvegarder les broches.

  • Dual role of Port 2- En plus de fonctionner comme E / S, le port P2 est également utilisé pour fournir un bus d'adresse 16 bits pour la mémoire externe avec le port 0. Le port P2 est également désigné comme (A8– A15), tandis que le port 0 fournit les 8 bits inférieurs via A0 à A7. En d'autres termes, on peut dire que lorsqu'un 8051 est connecté à une mémoire externe (ROM) qui peut être au maximum jusqu'à 64 Ko et cela est possible par bus d'adresse 16 bits car on sait 216 = 64 Ko. Port2 est utilisé pour les 8 bits supérieurs de l'adresse 16 bits, et il ne peut pas être utilisé pour les E / S et c'est ainsi que tout code de programme de la ROM externe est adressé.

Connexion matérielle des broches

  • Vcc - La broche 40 alimente la puce et elle est de +5 V.

  • Gnd - La broche 20 fournit la masse pour la référence.

  • XTAL1, XTAL2 (Pin no 18 & Pin no 19)- 8051 a un oscillateur sur puce mais nécessite une horloge externe pour l'exécuter. Un cristal de quartz est connecté entre les broches XTAL1 et XTAL2 de la puce. Ce cristal a également besoin de deux condensateurs de 30pF pour générer un signal de fréquence souhaitée. Un côté de chaque condensateur est connecté à la terre. 8051 IC est disponible en différentes vitesses et tout dépend de ce cristal de quartz, par exemple, un microcontrôleur de 20 MHz nécessite un cristal avec une fréquence ne dépassant pas 20 MHz.

  • RST (Pin No. 9)- C'est une broche d'entrée et une broche haute active. Lors de l'application d'une impulsion haute sur cette broche, c'est-à-dire 1, le microcontrôleur se réinitialise et met fin à toutes les activités. Ce processus est connu sous le nom dePower-On Reset. L'activation d'une réinitialisation à la mise sous tension entraînera la perte de toutes les valeurs du registre. Il définira un compteur de programme sur tous les 0. Pour garantir une entrée valide de réinitialisation, l'impulsion haute doit être élevée pendant au moins deux cycles machine avant de pouvoir descendre, ce qui dépend de la valeur du condensateur et de la vitesse à laquelle elle se charge. (Machine Cycle est la fréquence minimale requise par une seule instruction lors de l'exécution).

  • EA or External Access (Pin No. 31)- C'est une broche d'entrée. Cette broche est une broche basse active; lors de l'application d'une impulsion faible, il est activé. Dans le cas d'un microcontrôleur (8051/52) ayant une ROM sur puce, la broche EA (barre) est connectée à V cc . Mais dans un microcontrôleur 8031 ​​qui n'a pas de ROM sur puce, le code est stocké dans une ROM externe puis récupéré par le microcontrôleur. Dans ce cas, nous devons connecter la (broche n ° 31) EA à Gnd pour indiquer que le code de programme est stocké en externe.

  • PSEN or Program store Enable (Pin No 29)- Il s'agit également d'une broche basse active, c'est-à-dire qu'elle s'active après l'application d'une impulsion basse. Il s'agit d'une broche de sortie utilisée avec la broche EA dans les systèmes basés sur 8031 ​​(c'est-à-dire sans ROM) pour permettre le stockage du code de programme dans une ROM externe.

  • ALE or (Address Latch Enable)- Ceci est une broche de sortie et est actif haut. Il est particulièrement utilisé pour 8031 ​​IC pour le connecter à la mémoire externe. Il peut être utilisé pour décider si les broches P0 seront utilisées comme bus d'adresse ou bus de données. Lorsque ALE = 1, les broches P0 fonctionnent comme un bus de données et lorsque ALE = 0, les broches P0 agissent comme un bus d'adresse.

Ports d'E / S et adressabilité des bits

C'est une fonctionnalité la plus largement utilisée de 8051 lors de l'écriture de code pour 8051. Parfois, nous devons accéder à seulement 1 ou 2 bits du port au lieu des 8 bits entiers. 8051 offre la possibilité d'accéder à des bits individuels des ports.

Lors de l'accès à un port de manière à un seul bit, nous utilisons la syntaxe "SETB X. Y" où X est le numéro de port (0 à 3) et Y est un numéro de bit (0 à 7) pour les bits de données D0-D7 où D0 est le LSB et D7 est le MSB. Par exemple, "SETB P1.5" définit le bit 5 haut du port 1.

Le code suivant montre comment nous pouvons basculer le bit P1.2 en continu.

AGAIN: 
SETB    P1.2
ACALL   DELAY    
CLR     P1.2      
ACALL   DELAY 
SJMP    AGAIN

Instructions sur un seul bit

Instructions Fonction
Bit SETB Réglez le bit (bit = 1)
Bit CLR effacer le bit (bit = 0)
Bit CPL compléter le bit (bit = PAS bit)
Bit JB, cible sauter à la cible si bit = 1 (sauter si bit)
Bit JNB, cible sauter à la cible si bit = 0 (sauter si aucun bit)
Bit JBC, cible sauter à la cible si bit = 1, effacer le bit (sauter si bit, puis effacer)