Sistemi integrati - Programmazione I / O

Nell'8051, le operazioni di I / O vengono eseguite utilizzando quattro porte e 40 pin. Il seguente diagramma dei pin mostra i dettagli dei 40 pin. La porta operativa I / O riserva 32 pin dove ogni porta ha 8 pin. Gli altri 8 pin sono designati come V cc , GND, XTAL1, XTAL2, RST, EA (bar), ALE / PROG (bar) e PSEN (bar).

È un PDIP a 40 pin (Plastic Dual Inline Package)

Note- In un pacchetto DIP, puoi riconoscere il primo pin e l'ultimo pin dal taglio al centro dell'IC. Il primo perno è a sinistra di questo segno di taglio e l'ultimo perno (cioè il 40esimo perno in questo caso) è a destra del segno di taglio.

Porte I / O e loro funzioni

Le quattro porte P0, P1, P2 e P3, ciascuna utilizza 8 pin, rendendole porte a 8 bit. Al RESET, tutte le porte vengono configurate come ingressi, pronte per essere utilizzate come porte di ingresso. Quando il primo 0 viene scritto su una porta, diventa un output. Per riconfigurarlo come ingresso, è necessario inviare un 1 a una porta.

Porta 0 (Pin n. 32 - Pin n. 39)

Dispone di 8 pin (da 32 a 39). Può essere utilizzato per input o output. A differenza delle porte P1, P2 e P3, normalmente colleghiamo P0 a resistori pull-up da 10K-ohm per usarlo come porta di ingresso o uscita essendo uno scarico aperto.

È anche designato come AD0-AD7, consentendo di utilizzarlo sia come indirizzo che come dati. Nel caso di 8031 ​​(cioè ROMless Chip), quando abbiamo bisogno di accedere alla ROM esterna, allora P0 sarà usato sia per Address che per Data Bus. ALE (Pin no 31) indica se P0 ha indirizzo o dati. Quando ALE = 0, fornisce i dati D0-D7, ma quando ALE = 1 ha indirizzo A0-A7. Nel caso in cui non sia disponibile alcuna connessione di memoria esterna, P0 deve essere collegato esternamente a una resistenza di pull-up da 10K-ohm.

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)

Porta 1 (pin da 1 a 8)

È una porta a 8 bit (pin da 1 a 8) e può essere utilizzata sia come input che come output. Non necessita di resistenze pull-up perché sono già collegate internamente. Al ripristino, la porta 1 è configurata come porta di ingresso. Il codice seguente può essere utilizzato per inviare valori alternati di 55H e AAH alla porta 1.

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

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

Se la porta 1 è configurata per essere utilizzata come porta di uscita, quindi per utilizzarla di nuovo come porta di ingresso, programmarla scrivendo 1 su tutti i suoi bit come nel codice seguente.

;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

Porta 2 (pin da 21 a 28)

La porta 2 occupa un totale di 8 pin (pin da 21 a 28) e può essere utilizzata sia per le operazioni di input che di output. Proprio come P1 (Porta 1), anche P2 non richiede resistenze di pull-up esterne perché sono già collegate internamente. Deve essere utilizzato insieme a P0 per fornire l'indirizzo a 16 bit per la memoria esterna. Quindi è anche designato come (A0 – A7), come mostrato nel diagramma dei pin. Quando l'8051 è collegato a una memoria esterna, fornisce il percorso per gli 8 bit superiori dell'indirizzo a 16 bit e non può essere utilizzato come I / O. Al ripristino, la porta 2 è configurata come porta di ingresso. Il codice seguente può essere utilizzato per inviare valori alternati di 55H e AAH alla porta 2.

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

Se la porta 2 è configurata per essere utilizzata come porta di uscita, quindi per utilizzarla di nuovo come porta di ingresso, programmarla scrivendo 1 su tutti i suoi bit come nel codice seguente.

;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

Porta 3 (pin da 10 a 17)

È anche di 8 bit e può essere utilizzato come ingresso / uscita. Questa porta fornisce alcuni segnali estremamente importanti. P3.0 e P3.1 sono rispettivamente RxD (ricevitore) e TxD (trasmettitore) e vengono utilizzati collettivamente per la comunicazione seriale. I pin P3.2 e P3.3 vengono utilizzati per gli interrupt esterni. P3.4 e P3.5 vengono utilizzati rispettivamente per i timer T0 e T1. P3.6 e P3.7 sono pin di scrittura (WR) e di lettura (RD). Questi sono pin bassi attivi, significa che saranno attivi quando viene assegnato loro 0 e questi sono usati per fornire operazioni di lettura e scrittura alla ROM esterna nei sistemi basati su 8031.

P3 Bit Funzione Pin
P3.0 RxD 10
P3.1 < TxD 11
P3.2 < Complemento di INT0 12
P3.3 < INT1 13
P3.4 < T0 14
P3.5 < T1 15
P3.6 < WR 16
P3.7 < Complemento di RD 17

Doppio ruolo della porta 0 e della porta 2

  • Dual role of Port 0- La porta 0 è anche designata come AD0-AD7, poiché può essere utilizzata sia per i dati che per la gestione degli indirizzi. Durante il collegamento di un 8051 alla memoria esterna, la porta 0 può fornire sia l'indirizzo che i dati. Il microcontrollore 8051 quindi multiplexa l'ingresso come indirizzo o dati per salvare i pin.

  • Dual role of Port 2- Oltre a funzionare come I / O, la porta P2 viene utilizzata anche per fornire un bus di indirizzi a 16 bit per la memoria esterna insieme alla porta 0. La porta P2 è anche designata come (A8– A15), mentre la porta 0 fornisce gli 8 bit inferiori tramite A0-A7. In altre parole, possiamo dire che quando un 8051 è collegato a una memoria esterna (ROM) che può essere al massimo fino a 64 KB e questo è possibile tramite bus di indirizzi a 16 bit perché sappiamo 216 = 64 KB. Port2 viene utilizzata per gli 8 bit superiori dell'indirizzo a 16 bit e non può essere utilizzata per I / O e questo è il modo in cui viene indirizzato qualsiasi codice di programma della ROM esterna.

Collegamento hardware dei pin

  • Vcc - Il pin 40 fornisce l'alimentazione al chip ed è +5 V.

  • Gnd - Il pin 20 fornisce la massa per il riferimento.

  • XTAL1, XTAL2 (Pin no 18 & Pin no 19)- 8051 ha un oscillatore su chip ma richiede un clock esterno per eseguirlo. Un cristallo di quarzo è collegato tra i pin XTAL1 e XTAL2 del chip. Questo cristallo necessita anche di due condensatori da 30pF per generare un segnale della frequenza desiderata. Un lato di ogni condensatore è collegato a terra. 8051 IC è disponibile in varie velocità e tutto dipende da questo cristallo di quarzo, ad esempio un microcontrollore da 20 MHz richiede un cristallo con una frequenza non superiore a 20 MHz.

  • RST (Pin No. 9)- È un pin di ingresso e un pin alto attivo. Dopo aver applicato un impulso alto su questo pin, ovvero 1, il microcontrollore si resetterà e terminerà tutte le attività. Questo processo è noto comePower-On Reset. L'attivazione di un reset all'accensione causerà la perdita di tutti i valori nel registro. Imposterà un contatore del programma su tutti gli 0. Per garantire un ingresso valido di Reset, l'impulso alto deve essere alto per un minimo di due cicli macchina prima che possa andare basso, che dipende dal valore del condensatore e dalla velocità con cui si carica. (Machine Cycle è la quantità minima di frequenza che una singola istruzione richiede in esecuzione).

  • EA or External Access (Pin No. 31)- È un pin di input. Questo pin è un pin basso attivo; dopo aver applicato un impulso basso, viene attivato. In caso di microcontrollore (8051/52) con ROM su chip, il pin EA (bar) è collegato a V cc . Ma in un microcontrollore 8031 ​​che non dispone di una ROM su chip, il codice viene memorizzato in una ROM esterna e quindi recuperato dal microcontrollore. In questo caso, dobbiamo collegare il (pin no 31) EA a Gnd per indicare che il codice del programma è memorizzato esternamente.

  • PSEN or Program store Enable (Pin No 29)- Questo è anche un pin basso attivo, cioè viene attivato dopo aver applicato un impulso basso. È un pin di uscita e viene utilizzato insieme al pin EA nei sistemi basati su 8031 ​​(cioè ROMLESS) per consentire l'archiviazione del codice del programma nella ROM esterna.

  • ALE or (Address Latch Enable)- Questo è un pin di uscita ed è attivo alto. Viene utilizzato soprattutto per 8031 ​​IC per collegarlo alla memoria esterna. Può essere utilizzato per decidere se i pin P0 verranno utilizzati come bus indirizzo o bus dati. Quando ALE = 1, i pin P0 funzionano come bus dati e quando ALE = 0, i pin P0 agiscono come bus indirizzo.

Porte I / O e indirizzabilità dei bit

È una funzionalità più utilizzata dell'8051 durante la scrittura del codice per l'8051. A volte è necessario accedere solo a 1 o 2 bit della porta invece che all'intero 8 bit. 8051 fornisce la capacità di accedere ai singoli bit delle porte.

Durante l'accesso a una porta in modo bit singolo, utilizziamo la sintassi "SETB X. Y" dove X è il numero di porta (da 0 a 3) e Y è un numero di bit (da 0 a 7) per i bit di dati D0-D7 dove D0 è l'LSB e D7 è l'MSB. Ad esempio, "SETB P1.5" imposta il bit alto 5 della porta 1.

Il codice seguente mostra come cambiare continuamente il bit P1.2.

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

Istruzioni a bit singolo

Istruzioni Funzione
Bit SETB Imposta il bit (bit = 1)
Bit di CLR azzera il bit (bit = 0)
Bit CPL completare il bit (bit = NOT bit)
Bit JB, bersaglio salta al target se bit = 1 (salta se bit)
Bit JNB, destinazione salta al target se bit = 0 (salta se nessun bit)
Bit JBC, destinazione salta alla destinazione se bit = 1, cancella bit (salta se bit, quindi cancella)