• Non ci sono risultati.

5.1 CARATTERISTICHE DELL’UART

Il processore usato nel progetto appartiene alla famiglia dell’80C52 che, derivando dal processore 8051, ha le stesse sue caratteristiche, a parte una RAM interna di 256 bytes contro i 128 bytes della RAM interna dell’8051.

Si passa ora ad analizzare le caratteristiche fondamentali dell’8051 ricordando l’equivalenza con l’80C52.

L’8051 ha 3 tipi di memoria :

1. memoria on-chip : interna al processore;

2. memoria di programma esterna : contiene il codice, ovvero l’insieme delle istruzioni che l’8051 deve eseguire ed è esterna al chip;

3. RAM esterna : SRAM che contiene i dati ed è fuori dal chip;

Capitolo 5 : Processore 8051 e UART

La memoria on-chip è di due tipi : RAM interna e area registri speciali (SFR memory). Lo schema della memoria interna dell’8051 è:

Figura 2 : memoria interna del processore 8051

Come si vede da figura 2, i 128 bytes di RAM interna sono divisi in 4 banchi di registri “R”, che risiedono agli indirizzi da 00h a 1Fh della memoria, in una memoria a bit, che risiede a partire dall’indirizzo 20h fino all’indirizzo 2Fh, ed in una restante zona di 80 bytes che va dall’indirizzo 30h a 7Fh.

I banchi di registri “R” sono usati per memorizzare un dato temporaneo o per muovere dati da una locazione di memoria ad un’altra.

La memoria a bit contiene “variabili a bit”, che possono assumere o il valore 0 o il valore 1 e che sono accessibili singolarmente.

Infine gli 80 bytes restanti sono usabili per variabili a stack, ovvero oggetti con proprietà Last In First Out (LIFO-l’ultimo oggetto inserito è l’ultimo ad essere rimosso).

I registri SFR sono aree di memoria che controllano specifiche funzioni dell’8051. Si passa a spiegare l’utilità di ciascun registro:

1. i 4 registri SFR ( P0, P1, P2, P3), consentono l’accesso alle 32 linee di I/O del processore;

2. il registro SBUF è usato per inviare e ricevere i dati dalla porta seriale dell’8051. Ogni valore scritto nel registro SBUF è inviato sulla porta seriale dal pin TXD ed

Capitolo 5 : Processore 8051 e UART

ogni valore ricevuto dalla seriale attraverso il pin RXD è disponibile al programma applicativo dell’utente attraverso la lettura del registro SBUF;

3. il registro SCON è usato per impostare il baud rate della seriale, l’abilitazione della ricezione ed indica quando un byte è stato trasmesso o ricevuto;

4. i registri TMOD e TCON controllano i due timer del processore (timer0 e timer1); il primo è usato per configurare il modo di funzionamento dei due timer del processore ed in particolare i timer possono essere a 16 bit, a 8 bit con auto-caricamento o come timer a 13 bit o come due timer separati, mentre il secondo registro controlla il funzionamento dei timer, ovvero indica quando il timer è andato in overflow (nel caso di timer usato come contatore di eventi) o quando è abilitato o è fermo;

5. i registri TH0/TL0 ed i registri TH1/TL1 che sono i byte più o meno significativi rispettivamente del timer0 e del timer1;

6. il registro SP è lo stack pointer che punta all’ultimo valore dello stack nella RAM interna. Con un’operazione di push di un valore nello stack l’8051 prima incrementa il valore di SP e poi memorizza il valore nella locazione di memoria da esso puntata, mentre con un’operazione di pop di un valore dallo stack l’8051 prende il valore puntato da SP e poi decrementa il valore del registro stesso;

7. i registri DPL e DPH, i quali concorrono a creare un valore a 16 bit detto Data Pointer, usato nelle operazioni che riguardano la memoria RAM esterna ed alcune istruzioni che riguardano il codice di programma;

8. il registro PCON (Power Control) mette l’8051 nella modalità di funzionamento in bassa potenza (detto “sleep”) ed inoltre permette di raddoppiare il baud rate settando il suo bit più significativo;

9. il registro IE (Interrupt Enable) che abilita e disabilita gli interrupt ed il registro IP (Interrupt Priority) che cambia la priorità di ciascun interrupt;

10. il registro PSW (Program Status Word) che contiene il carry flag, il flag di overflow ed il flag per selezionare il banco di registri “R” attivo;

11. il registro ACC (Accumulatore) che è usato come registro generale per accumulare i risultati di molte istruzioni, quali una somma tra due numeri, lo spostamento di un dato ad un certo indirizzo,…;

Capitolo 5 : Processore 8051 e UART

Figura 3 : nome e relativo indirizzo dei registri SFR

Una delle caratteristiche più potenti dell’8051 è la presenza dell’UART (Universal Asyncronous Receiver Trasmitter) integrata, nota anche come porta seriale.

L’UART permette di leggere e scrivere dati sulla porta seriale (attraverso il registro SBUF). Senza tale periferica simulare il comportamento della porta seriale richiederebbe un controllo dei pin di I/O del processore in rapida successione per campionare un bit alla volta, compresi i bit di start e di stop.

L’unica cosa richiesta è invece la configurazione della porta seriale.

Fatto ciò basta leggere e scrivere il registro SBUF per ricevere ed inviare dei dati in linea. Poi l’8051 stesso avvertirà quando avrà finito di trasmettere o di ricevere un byte attraverso il registro SCON.

Si passa ora a vedere come configurare la seriale : bisogna decidere il numero di bit da usare, quale sarà la sorgente del baud rate e come verrà ricavato il baud rate stesso.

Capitolo 5 : Processore 8051 e UART

Nome Indirizzo a bit Spiegazione della funzione

7 SM0 9Fh Bit 0 di modo

6 SM1 9Eh Bit 1 di modo

5 SM2 9Dh Abilitazione della Comunicazione Multiprocessore 4 REN 9Ch Receiver Enable. Questo bit deve essere settatto per

abilitare la ricezione.

3 TB8 9Bh Transmit bit 8. Nono bit da trasmettere nel modo 2 e 3 2 RB8 9Ah Receive bit 8. Nono bit ricevuto nel modo 2 e 3

1 TI 99h Transmit Flag. Settato quando il byte e' stato trasmesso. 0 RI 98h Receive Flag. Settato quando un byte e' stato ricevuto.

Tabella 1 : byte del registro SCON

I bit SM0 e SM1 sono definiti in tabella 2.

SM0 SM1 Modo

Seriale Spiegazione Baud Rate

0 0 0 Shift Register a 8-bit Oscillatore/ 12

0 1 1 Uart a 8-bit Dal Timer 1

1 0 2 Uart a 9-bit Oscillatore/ 32 (*)

1 1 3 Uart a 9-bit Dal Timer 1

Tabella 2 : modo seriale e scelta del baud rate a seconda dei bit SM0 e SM1 di SCON

Si nota che si può impostare il baud rate solo nei modi 1 e 3 poiché nei modi 0 e 2 esso è fisso ed è legato alla frequenza di oscillazione del quarzo del micro.

Capitolo 5 : Processore 8051 e UART

Si decide di usare un UART a 8 bit e quindi si lavora nel modo seriale 1, mettendo SM0 a 0 e SM1 a 1.

A questo punto si decide quale modo operativo del timer 1 usare e quindi si va a guardare più in dettaglio il registro TMOD (si veda la tabella 3).

Bit Nome Spiegazione della funzione Timer

7 GATE1

Quando questo bit e' settato, il timer 1 e' attivo solo quando il pin P3.3 e' nello stato alto. Se tale bit e ' resettato il timer 1 sara' svincolato dallo stato del pin P3.3.

1

6 C/T1

Quando questo bit e' settato il timer 1 contera' il numero degli eventi sul pin T1 (P3.5). Se il bit e' resettato il timer 1 verra' incrementato ogni ciclo macchina.

1

5 T1M1 Bit 1 di modo del timer 1 1

4 T1M0 Bit 0 di modo del timer 1 1

3 GATE0

Quando questo bit e' settato, il timer 0 e' attivo solo quando il pin P3.2 e' nello stato alto. Se tale bit e ' resettato il timer 0 sara' svincolato dallo stato del pin P3.2.

0

2 C/T0

Quando questo bit e' settato il timer 0 contera' il numero degli eventi sul pin T1 (P3.5). Se il bit e' resettato il timer 0 verra' incrementato ogni ciclo macchina.

0

1 T0M1 Bit 1 di modo del timer 0 0

0 T0M0 Bit 0 di modo del timer 0

Tabella 3 : byte del registro TMOD

Si nota che per specificare il modo operativo di ciascun timer si usano i bit TxM0 e TxM1, come è raffigurato in tabella 4.

Capitolo 5 : Processore 8051 e UART

TxM1 TxM0 Timer Mode Descrizione

0 0 0 Timer a 13-bit

0 1 1 Timer a 16-bit

1 0 2 Timer a 8-bit con auto-reload

1 1 3 Timer in splitted mode

Tabella 4 : modo operativo dei timer in base ai valori dei byte TxM1 e TxM0

Il modo 0 è un retaggio del predecessore dell’8051, l’8048 ed è usato solo per motivi di compatibilità col vecchio processore.

Il modo 1 vede TLx incrementato da 0 a 255 e all’overflow di TLx viene incrementato di 1 THx.

Il modo 2 è caratterizzato dal fatto che THx contiene il valore che deve essere caricato in TLx quando va in overflow. Quindi TLx si incrementa e quando raggiunge 255 viene ancora incrementato ed invece di tornare a 0 (come invece succedeva nel modo 1), assume il valore caricato in THx.

Si può evidenziare con un esempio il vantaggio dell’uso del modo 2 invece del modo 1. Se si vuole che il timer assuma valori tra 200 e 255 nel caso di modo 1 si è costretti a verificare da programma quando il timer va in overflow e poi settarlo al valore 200; nel caso di modo 2 invece ciò sarà fatto automaticamente dal microcontrollore.

Il modo 3 viene usato solo nel caso in cui si prevede l’uso di due timer separati a 8 bit ciascuno più un generatore di baud rate; infatti in tal caso il timer 0 diventa TL0 ed il timer 1 diventa TH0 ed entrambi i timer contano da 0 a 255 e dopo l’overflow tornano a 0. In tal modo il timer 0 è configurato in modo split, mentre il vero timer 1 , cioè TH1 e TL1, può essere configurato in uno dei modi 0, 1, 2, pur non potendo essere abilitato o disabilitato essendo i suoi bit di controllo assegnati a TH0. In tal caso i due registri TH0 e TL0 sono usati in pratica come due timer a se stanti, mentre il timer 1 è usato come generatore di baud rate.

Capitolo 5 : Processore 8051 e UART

Documenti correlati