L'8051 e' un microntrollore flessibile con un discreto numero di modi operativi. Il vostro programma puo' leggere e/o modificare il modo operativo dell'8051 cambiando i valori dei registri SFR.
Si accede ai registri SFR come se fossero una parte della normale RAM interna. L'unica differenza e' che la RAM interna e' compresa fra gli indirizzi da 00h a 7Fh, mentre i registri SFR risiedono nell'area dall'indirizzo 80h all'indirizzo FFh.
Ogni registro SFR ha un proprio indirizzo ed un proprio nome. La tabella sottostante fornisce: una rappresentazione grafica dei registri SFR dell'8051, la denominazione e l'indirizzo.
Come potete osservare, anche se il range degli indirizzi da 80h a FFh offre 128 possibili bytes, ci sono solo 21 registri SFR nell'8051 standard. Tutti gli altri indirizzi sono considerati non validi. Leggere o scrivere in questi registri puo' produrre un valore indefinito oppure un comportamento anomalo.
Come risulta evidente dalla tabella, i registri SFR che hanno uno sfondo blu sono relativi a operazioni di I/O. L'8051 dispone di quattro porte di I/O ad 8 bit per un totale di 32 linee di I/O. Per porre una linea di I/O e' allo stato alto o basso o leggere il suo valore vengono usati i registri SFR in verde.
I registri SFR con lo sfondo in giallo servono a controllare il modo operativo o la configurazione dell'8051. Per esempio il registro TCON controlla i timer, mentre il registro SCON controlla la porta seriale.
I restanti registri SFR a sfondo verde, sono registri ausiliari nel
senso che essi non configurano direttamente il modo operativo del microprocessore,
ma l'8051 non potrebbe operare senza di essi. Per esempio, una volta che
la porta seriale e' stata configurata usando il registro SCON il
programma puo' leggere o scrivere sulla porta seriale usando il registro
SBUF.
Questa sezione vi fornira' una breve panoramica dei registri SFR standard
che trovate nella mappa. Non e' intenzione di questa sezione spiegare completamente
la funzionalita' di ogni registro SFR, poiche' cio' verra' affrontato in
capitoli diversi del corso. Questa sezione serve solo a darvi un'idea generale
di cosa facciano i registri SFR.
P0 (Porta 0, Indirizzo 80h, Indirizzabile
a bit): Questa e' la porta P0 di input/output. Ciascun
bit di questo registro SFR corrisponde ad un pin del microcontrollore.
Per esempio, il bit 0 e' il pin P0.0, il bit 7 e' il pin P0.7. Settare
un bit di questo registro SFR equivale a forzare ad un livello alto il
corrispondente pin di I/O, mentre resettarlo equivale a forzarlo ad un
basso livello.
TCON (Timer Control, Indirizzo 88h, Indirizzabile a bit): Il registro TCON (Timer Control) e' usato per configurare e modificare il modo di funzionamento dei timer dell'8051. Questo registro abilita o disabilita il funzionamento dei due timer e contiene un flag per indicare quando un timer va in overflow. Alcuni bit del registro TCON non sono relativi all'uso del timer ma servono a configurare gli interrupt esterni e contengono dei flag che segnalano che un interrupt esterno e' stato attivato.
TMOD (Timer Mode, Indirizzo 89h): Il regitro TMOD (Timer Mode) e' usato per configurare il modo di funzionamento di ciascuno dei due timer. Mediante tale registro e' possibile far funzionare un timer come un timer a 16-bit, oppure un timer a 8-bit con auto-caricamento, oppure come un timer a 13 bit o come dure timer separati. Inoltre e' possibile configurare il timer come contatore quando un pin esterno e' attivo oppure come "contatore di eventi" segnalati da un apposito pin esterno.
TL0/TH0 (Timer 0 Basso/Alto, Indirizzi 8Ah/8Bh): Questi due registri uniti insieme danno lo stato del timer 0. Il loro comportamento e' determinato da come e' stato configurato il timer 0 nel registro TMOD; in ogni caso essi contano sempre in modo ascendente. Quello che e' possibile configurare e' la maniera e il momento nel quale essi devono incrementare il valore.
TL1/TH1 (Timer 1 Basso/Alto, Indirizzi 8Ch/8Dh): Questi due registri uniti insieme danno lo stato del timer 1. Il loro comportamento e' determinato da come e' stato configurato il timer 1 nel registro TMOD; in ogni caso essi contano sempre in avanti. E' possibile configurare sia la maniera che il momento nel quale il timer deve incrementare il suo valore.
P1 (Porta 1, Indirizzo 90h, Indirizzabile a bit): Questa e' la porta P1 di input/output. Ciascun bit di questo registro SFR corrisponde ad un pin del microcontrollore. Per esempio, il bit 0 e' il pin P1.0, il bit 7 e' il pin P1.7. Settare un bit di questo registro SFR equivale a forzare a livello alto il corrispondente pin di I/O, mentre resettarlo equivale a forzarlo a livello basso.
SCON (Serial Control, Indirizzo 98h, Indirizzabile a bit): Il registro SCON(Serial Control) e' usato per configurare il comportamento della porta seriale dell'8051. Questo registro controlla: il baud rate della porta seriale, l'abilitazione della ricezione e contiene dei flag per indicare quando un byte e' stato trasmesso o ricevuto con successo.
P2 (Porta 2, Indirizzo A0h, Indirizzabile a bit): Questa e' la porta P2 di input/output. Ciascun bit di questo registro SFR corrisponde ad un pin del microcontrollore. Per esempio, il bit 0 e' il pin P2.0, il bit 7 e' il pin P2.7. Settare un bit di questo registro SFR equivale a forzare ad un livello alto il corrispondente pin di I/O, mentre resettarlo equivale a forzarlo ad un basso livello.
IE (Interrupt Enable, Indirizzo A8h): Il registro IE (Inetrrupt Enable) e' usato per abilitare e disabilitare gli interrupt. I 7 bit meno significativi di IE sono usati per abilitare o disabilitare gli interrupt individualmente, mentre il bit piu' significativo e' usato per abilitare o disabilitare tutti gli interrupt contemporaneamente. Per cui, se tale bit e' nello stato 0 tutti gli interrupt sono disabilitati anche se il corrispondente bit e' attivo.
P3 (Porta 3, Indirizzo B0h, Indirizzabile a bit): Questa e' la porta P3 di input/output. Ciascun bit di questo registro SFR corrisponde ad un pin del microcontrollore. Per esempio, il bit 0 e' il pin P3.0, il bit 7 e' il pin P3.7. Settare un bit di questo registro SFR equivale a forzare ad un livello alto il corrispondente pin di I/O, mentre resettarlo equivale a forzarlo ad un basso livello.
IP (Interrupt Priority, Indirizzo B8h, Indirizzabile a bit): Il registro IP (Interrupt Priority) e' usato per ambiare la priorita' di ciascun interrupt. Sull'8051 un interrupt puo' essere a bassa priorita' (0) oppure ad alta priorita' (1). Un interrupt puo' interrompere solo un altro interrupt a priorita' piu' bassa. Per esempio, se configurate l'8051 in modo tale che tutti gli interrupt siano a bassa priorita' eccetto quello relativo alla porta seriale, esso puo' sempre sospendere il sistema anche se c'e' un altro interrupt attivo. Nel momento in cui e' attivo l'interrupt della porta seriale, pero', nessun altro interrupt e' in grado di sospendere la routine in corso poiche' essa ha priorita' piu' elevata.
PSW (Program Status Word, Indirizzo D0h, Indirizzabile
a bit): Il registro PSW ( Program Status Word) e'
usato per memorizzare alcuni bit importanti che vengono aggiornati nell'esecuzione
delle istruzioni dell'8051. Il regitro PSW contiene: il carry flag, il
carry flag ausiliario, il flag di overflow ed il flag di parita'. Il registro
PSW contiene anche i flag utilizzati per selezionare il banco di registri
"R" attivo.
B ( Regitro B, Indirizzo F0h, Indirizzabile
a bit): Il registro B e' utilizzato in due istruzioni:
la moltiplicazione e la divisione. Esso e' anche comunemente usato dai
programmatori come registro ausiliario per memorizzare dei valori temporanei.
La tabella precedente e' un sommario di tutti i registri SFR di un 8051 standard. Tutti i microcontrollori derivati dall'8051 devono avere questi registri come base per mantenere la compatibilita' indietro con lo standard MSC51.
E' pratica comune, delle fabbriche di semiconduttori che vogliano sviluppare un nuova versione di 8051, aggiungere altri registri SFR per supportare delle nuove funzioni nel chip derivato.
Per esempio, il microcontrollore Dallas Semiconductor DS80C320 e' compatibile verso l'alto con l'8051. Cio' significa che un qualsiasi programma sviluppato per un 8051 standard dovrebbe girare senza modifiche sul DS80C320. In questo caso tutti i registri SFR che abbiamo finora menzionato devono esistere anche nel componente della Dallas.
Il DS80C320, pero', fornisce molte nuove funzionalita' in piu' rispetto
all'8051 standard che devono in qualche mode essere gestite. Cio' viene
realizzato aggiungendo dei nuovi registri SFR a quelli gia' menzionati.
Per esempio, poiche' il DS80C320 dispone di due porte seriali (invece di
una soltanto come nell'8051) sono stati aggiunti due nuovi registri SFR
denominati rispettivamente SBUF2 e SCON2. In aggiunta ai normali registri,
il DS80C320 riconosce come validi anche questi due nuovi registri SFR e
usa il loro valore per determinare il modo operativo della seconda porta
seriale. Ovviamente, a questi due nuovi registri devono essere assegnati
degli indirizzi non utilizzati nell'8051 originale. In questa maniera,
un nuovo chip derivato dall'8051 puo' essere sviluppato con la capacita'
di poter interpretare i programmi dell'8051 esistenti senza modificare
il codice.