Pag. 14
Struttura delle porte I/O dell' 8051
La porta P0 può funzionare in tre modi diversi :
- Modo porta I/0. In questo caso il segnale control
non è attivo quindi il MUX collega il gate del
mosfet all'uscita #Q del latch. Si può notare inoltre
che il gate mosfet superiore essendo control =0 non sarà
mai polarizzato, quindi per ottenere un livello 1 in
uscita occorre un pull-up esterno.
L'uscita della porta dipende dallo stato del latch che
viene pilotato dalla CPU tramite Int.Bus (Bit
D0..D7 del bus dati della CPU) e Write to Latch
(segnale di controllo che diventa attivo quando la CPU
esegue un operazione di scrittura su P0).
La Cpu può effettuare due di tipi di lettura diversi
dello stato della porta : stato dell'uscita del
latch (abilitando Read Latch) e stato del piedino
(abilitando Read Pin). I due tipi di lettura
dipendono dal tipo di istruzione che si utilizza per
leggere P0 (Vedi Nota 1).
Se si intende far funzionare la porta come input occorre
settare il latch in modo da portare in interdizione il
Mosfet e quindi liberare l'escursione 0..1 del Pin.
- Modo bus indirizzi. Durante la accesso alla
memoria esterna emette la parte bassa dell'indirizzo di
memoria. Il segnale control risulta uguale a 1 e
in ADDR/Data è presente il bit di indirizzo (A0..A7), se
ADDR=1 il Mos superiore commuta allo stato ON mentre
quello inferiore passa allo stato OFF
- Modo bus dati . Nel caso la CPU debba emettere il
dato in uscita vale stessa configuazione del Modo bus
indirizzi eccetto che ADDR/Data ci sarà il bit
relativo al bus dati.
Nel caso invece che la CPU debba ricevere un dato dalla
memoria control va a 0 e si attiva il Read Pin.
P1 è l'unica porta che svolge solo la funzione I/O .
L'uscita della porta dipende dallo stato del latch che viene
pilotato dalla CPU tramite Int.Bus (Bit D0..D7 del bus
dati della CPU) e Write to Latch (segnale di controllo che
diventa attivo quando la CPU esegue un operazione di scrittura su
P1).
La Cpu può effettuare due di tipi di lettura diversi dello stato
della porta : stato dell'uscita del latch (abilitando Read
Latch) e stato del piedino (abilitando Read Pin). I
due tipi di lettura dipendono dal tipo di istruzione che si
utilizza per leggere P1 (Vedi Nota 1).
Se si intende far funzionare la porta come input occorre settare
il latch in modo da portare in interdizione il Mosfet e quindi
liberare l'escursione 0..1 del Pin.
Pag. 15
La porta P2 può funzionare in due modi diversi :
- Modo porta I/0. In questo caso il segnale control
non è attivo quindi il MUX collega l'ingresso del
not che pilota il mosfet all'uscita Q del latch. L' Internal
Pullup, pilotato dall' AND che ha come uno dei due
ingressi il segnale Control, avrà come ingresso
uno 0 ciò, secondo il data-sheet, comporta la selezione
di un pull-up interno di tipo "normal" (64uA
alla tensione di 2.4V).
L'uscita della porta dipende dallo stato del latch che
viene pilotato dalla CPU tramite Int.Bus (Bit
D0..D7 del bus dati della CPU) e Write to Latch
(segnale di controllo che diventa attivo quando la CPU
esegue un operazione di scrittura su P2).
La Cpu può effettuare due di tipi di lettura diversi
dello stato della porta : stato dell'uscita del
latch (abilitando Read Latch) e stato del piedino
(abilitando Read Pin). I due tipi di lettura
dipendono dal tipo di istruzione che si utilizza per
leggere P2 (Vedi Nota 1).
Se si intende far funzionare la porta come input occorre
settare il latch in modo da portare in interdizione il
Mosfet e quindi liberare l'escursione 0..1 del Pin.
- Modo bus indirizzi. Durante l' accesso alla
memoria esterna emette la parte alta dell'indirizzo di
memoria. Il segnale control risulta uguale a 1 e
in ADDR è presente il bit di indirizzo (A8..A15), se
ADDR=1 viene abilitato lo "strong pull-up" (800
uA alla tensione di 2.4V) per pilotare con più sicurezza
il bus indirizzi della memoria.
La porta P3 può funzionare in due modi diversi :
- Modo porta I/0. In questo caso il bit Alternate
Output Function è a 1 quindi il mosfet è pilotato
dall'uscita Q del latch.
L'uscita della porta dipende dallo stato del latch che
viene pilotato dalla CPU tramite Int.Bus (Bit
D0..D7 del bus dati della CPU) e Write to Latch
(segnale di controllo che diventa attivo quando la CPU
esegue un operazione di scrittura su P3).
La Cpu può effettuare due di tipi di lettura diversi
dello stato della porta : stato dell'uscita del
latch (abilitando Read Latch) e stato del piedino
(abilitando Read Pin). I due tipi di lettura
dipendono dal tipo di istruzione che si utilizza per
leggere P3 (Vedi Nota 1).
Se si intende far funzionare la porta come input occorre
settare il latch in modo da portare in interdizione il
Mosfet e quindi liberare l'escursione 0..1 del Pin.
- Modo funzioni speciali. I piedini della porta
vengono utilizzati, come ingresso o come uscita a seconda
della funzione, dai segnali di controllo della CPU e
delle periferiche presenti nel Chip (Porta seriale,
Contatori/Timers e Gestore degli interrupt).
Le uscite del latch devono essere tutte a 1.
Nota 1:
Diverse istruzioni che sfruttano come operandi il contenuto
delle porte I/O effettuano la lettura dello stato del latch
anziché quello del Pin
La ragione di questa scelta si può spiegare con un esempio:
Supponendo di aver collegato un transistor con l'emettitore a
massa e la base al Pin della porta e che stato dell'uscita sia 1,
un istruzione che legga direttamente lo stato del pin della porta
confonderebbe stato 1 dell'uscita con uno 0 (Vbe =0.7), mentre le
istruzioni che leggono lo stato del latch annullano la
possibilità di questo errore.
Pag. 16
Tabella delle istruzioni che leggono stato del latch:
| Istruzione |
Funzione |
Esempio |
| ANL |
AND logico |
ANL P1,A |
| ORL |
OR logico |
ORL P2,A |
| XRL |
EX-OR logico |
XRL P3,A |
| JBC |
Salto se il bit = 1 e cancella il bit |
JBC P1.1,LABEL |
| CPL |
complementa il bit |
CPL P3.0 |
| INC |
incrementa |
INC P2 |
| DEC |
decrementa |
DEC P2 |
| DJNZ |
decrementa e salta finché non è zero |
DJNZ P3,LABEL |
| MOV PX.Y,C |
mette il carry nel bit Y della porta X |
|
| CLR PX.Y |
azzera il bit Y della Porta X |
|
| SET PX.Y |
setta il bit Y della Porta X |
|
Le istruzione elencate sono classificate come "Read-Modify-Write" : Leggi-Modifica-Scrivi.
Leggono il contenuto della porta, eseguono le operazioni, e
scrivono il risultato sulla porta.