La porta seriale del1'8051 permette di effettuare comunicazioni full duplex .
La parte di ricezione contiene un buffer che permette di ricevere un secondo byte mentre il primo non è stato ancora letto. I registri di ricezione e trasmissione sono entrambi mappati all'indirizzo 98H (registro SBUF). Una scrittura in SBUF carica il registro di trasmissione, mentre una lettura in SBUF accede al registro di ricezione.
SCON è il registro di controllo
della porta seriale:
| SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI |
| SM0 | SM1 | Modo |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 2 |
| 1 | 1 | 3 |
La porta seriale può operare in quattro modi distinti:
![]() |
Dettagli |
![]() |
Dettagli |
![]() |
|
![]() |
|
II rnodo 2 e il modo 3 hanno la particolarità di
poter gestire un sistema di comunicazione multiprocessore.
La porta può essere programmata in modo tale che, quando viene
ricevuto un bit di stop, I'interrupt della porta seriale venga
attivato solo quando RB8 = 1.
Questo modo di funzionamento viene abilitato impostando ad 1 il
bit SM2 del registro SCON.
| Modo | 0 | 1 | 2 | 3 |
| SM2 | Non ha nessuna funzione e deve essere 0 | SM2=1: controlla il bit di stop in ricezione, se
Bit-stop <>1 non attiva RI. SM2=0: alla fine della ricezione del dato, RI viene in ogni caso attivato. |
SM2=1 controlla il 9° bit in ricezione se =0 non
attiva RI. SM2=0: alla fine della ricezione del dato, RI viene in ogni caso attivato |
SM2=1 controlla il 9° bit in ricezione se =0 non
attiva RI. SM2=0: alla fine della ricezione del dato, RI viene in ogni caso attivato |
| REN | 1: abilita la ricezione 0: disabilita la ricezione |
1: abilita la ricezione 0: disabilita la ricezione |
1: abilita la ricezione 0: disabilita la ricezione |
1: abilita la ricezione 0: disabilita la ricezione |
| TB8 | nulla | nulla | contiene il 9° bit da trasmettere | contiene il 9° bit da trasmettere |
| RB8 | nulla | contiene il bit di stop | contiene il 9° bit ricevuto | contiene il 9° bit ricevuto |
| TI | settato alla fine del trasferimento dell'ottavo bit. Prima di trasmettere il nuovo dato deve essere resettato via SW. |
attivato all'inizio della trasmissione del bit di
stop. Prima di trasmettere il nuovo dato deve essere resettato via SW. |
attivato all'inizio della trasmissione del bit di
stop. Prima di trasmettere il nuovo dato deve essere resettato via SW. |
attivato all'inizio della trasmissione del bit di
stop. Prima di trasmettere il nuovo dato deve essere resettato via SW. |
| RI | mettendolo a 0 si abilita la ricezione del dato. Dopo aver ricevuto l'ottavo bit torna a 1 |
attivato circa a metà della ricezione del bit di
stop. Per ricevere il prossimo dato occorre rimetterlo a 0 via SW |
attivato circa a metà della ricezione del bit di
stop. Per ricevere il prossimo dato occorre rimetterlo a 0 via SW |
attivato circa a metà della ricezione del bit di
stop. Per ricevere il prossimo dato occorre rimetterlo a 0 via SW |
| Velocità di trasferimento in Baud | 1/12 FClock | 2*SMOD/32*FClock/(12*(256-TH1)) | 2*SMOD/32*FClock | 2*SMOD/32*FClock/(12*(256-TH1)) |
| Formato di trasmissione/ricezione | 8 bit sincroni con clock | asincrona con 8 bit di dati e 1 di stop | asincrona con 8 bit di dati 1 bit di controllo e 1 bit di stop | asincrona con 8 bit di dati 1 bit di controllo e 1 bit di stop |
La velocità di trasmissione in modo 0 è fissa e vale 1/12
della frequenza di clock. In modo 2 la velocità di trasmissione
dipende dal valore del bit SMOD nel registro PCON.
Se SMOD = O (valore assunto automaticamente dopo il reset) la
velocità in baud è 1/64 della frequenza di clock.
Se SMOD = 1 la velocità in baud è 1/32 della frequenza di
clock.
Nei modi 1 e 3 la velocità di trasmissione viene determinata
dalla frequenza con cui avviene I'overflow del timer 1.
I1 timer 1 è quindi il generatore di baud rate per le modalità
1 e 3.
I1 baud rate in Modo 1 e 3 viene definito dalla seguente formula:
baud rate =2 *SMOD/32* FClock/(12*(256-TH1))
L'interrupt del timer 1 dovrebbe essere disabilitato quando il
timer viene utilizzato come generatore di baud rate. I1 timer 1
può essere fatto funzionare sia come timer che come contatore
nei modi 0, 1 e 2.
In generale viene configurato come timer in modalità di
autocaricamento (in modo 2).
In questo caso la frequenza di overflow è data da:
frequenza di overflow =frequenza clock / 12*(256 - TH1)
È possibile raggiungere baud rate molto bassi lasciando abilitata I'interruzione del timer 1, configurando il timer per funzionare come timer a 16 bit (modo 1) e usando I'interruzione generata per ricaricare via software i registri THI e TL1.
In tabella viene mostrato I'utilizzo del timer 1 per generare
baud rate usati comunemente nelle trasmissioni seriali.
| Timer l | |||||
| Baud rate | Clock (MHz) | SMOD | C/T | Modo | Valore reload |
| 1M (Modo 0) | 12 | ||||
| 375 K (Modo2) | 12 | 1 | |||
| 62,5 k (Modo 1,3) | 12 | 1 | 0 | 2 | FFH |
| 19.2 k | 11,059 | 1 | 0 | 2 | FDH |
| 9,6 k | 11,059 | 0 | 0 | 2 | FDH |
| 4,8 k | 11,059 | 0 | 0 | 2 | FAH |
| 2,4 k | 11,059 | 0 | 0 | 2 | F4H |
| 1,2 k | 11,059 | 0 | 0 | 2 | E8H |
| 137,5 | 11,986 | 0 | 0 | 2 | 1DH |
| 110 | 6 | 0 | 0 | 2 | 72H |
| 110 | 12 | 0 | 0 | 1 | FEEBH |
I1 registro PCON contiene il bit SMOD il cui valore influisce sul baud rate della porta seriale. I1 registro PCON contiene, inoltre, altri due bit che servono nelle versioni CMOS de11'8051 per ridurre il consumo di corrente.
| SMOD | | | | GF1 | GF0 | PD | IDL |
| BIT | SYMBOL | FUNCTION |
| PCON.7 | SMOD | Bit utilizzato per selezionare il Baud rate della porta seriale |
| PCON.6 | | Riservati |
| PCON.5 | | Riservati |
| PCON.4 | | Riservati |
| PCON.3 | GF1 | Bit utilizzabile a piacere |
| PCON.2 | GF0 | Bit utilizzabile a piacere |
| PCON.1 | PD | Power-Down bit. Settando questo bit si attiva il modo
di funzionamento power-down. Il clock viene bloccato di conseguenza tutte le attività del micro vengono congelate, l' unica possibilità d'uscita da questa situazione è il segnale di Reset. |
| PCON.0 | IDL | Idle mode bit. Settando questo bit si attiva il modo
di funzionamento idle. Il clock rimane in funzione ma viene bloccata l'attività del micro eccetto timers, porta seriale e interrupts; per uscirne fuori basta una richiesta di interruzione o un Reset. |



