Caricare documenti e articoli online 
INFtub.com è un sito progettato per cercare i documenti in vari tipi di file e il caricamento di articoli online.


 
Non ricordi la password?  ››  Iscriviti gratis
 

I REGISTRI SFR - Cosa sono i registri SFR?

informatica



I REGISTRI SFR

Cosa sono i registri SFR?

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.

Suggerimento per il programmatore: Si raccomanda di non leggere o scrivere nei registri SFR non assegnati Cio' puo' provocare un comportamento anomalo e puo' rendere il vostro pro 414j93e gramma incompatibile con altri derivati dell'8051 che usano quei registri SFR per altri scopi.



Tipi di SFR

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.

Suggerimento per il programmatore: I registri SFR il cui nome appare scritto in rosso nella tabella sovrastante sono quelli ai quali si puo' accedere con operazioni bit a bit (p.e. usando le istruzioni SETB e CLR). Gli altri registri SFR non possono essere usati nella modalita' bit a bit. Come potete notare, tutti i registri SFR i cui indirizzi sono multipli interi di 8 possono essere usati con modalita' bit a bit.

Descrizione dei registri SFR

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.

Suggerimento per il programmatore: Siccome l'8051 dispone di 4 porte di I/O (P0, P1, P2 e P3), se il vostro hardware usa della RAM esterna oppure della ROM per il codice, le porte P0 a P2 non possono essere utilizzate. Questo e' dovuto al fatto che in questa modalita' di funzionamento, l'8051 usa queste porte per indirizzare la memoria esterna. In questo caso potete usare solo le porte P1 e P3.

SP (Stack Pointer, Indirizzo 81h): Questo e' lo stack pointer del microcontrollore. Questo registro SFR punta al prossimo valore dello stack nella RAM interna. Se caricate un valore nello stack (operazione di push) tale valore sara' memorizzato all'indirizzo SP+1. Supponiamo che SP contenga il valore 07h, una istruzione di PUSH carichera' il valore nello stack all'indirizzo 80h. Questo registro SFR viene modificato da tutte le istruzioni che comportano operazioni sullo stack quali: PUSH, POP, LCALL, RET, RETI, e ogni volta che il microcontrollore esegue un'operazione di interrupt.

Suggerimento per il programmatore: Lo stack pointer allo start up, e' inizializzato a 07h. Questo significa che lo stack parte da 08h e si espande in alto nella RAM interna. Poiche' i banchi di registri 1, 2 e 3 come pure le variabili a bit occupano la RAM interna da 08h a 2Fh, e' necessario inizializzare diversamente lo stack pointer del vostro programma se intendete usare i banchi di registri e/o la memoria a bit. Non e' una cattiva idea inizializzare lo stack pointer ad un valore pari a 2Fh nella prima istruzione di ogni vostro programma a meno che non siate sicuri al 100% di non dover usare i registri a banchi e le variabili a bit.

DPL/DPH (Data Pointer Basso/Alto, Indirizzi 82h/83h): I registri DPL e DPH lavorano insieme per formare un valore a 16-bit chiamato Data Pointer. Il Data Pointer e' usato nelle operazioni che riguardano la memoria RAM esterna ed alcune istruzioni che riguardano il codice di programma. Essendo un valore intero unsigned, esso puo' rappresentare valori da 0000h a FFFFh (da 0 a 65535 decimale).

Suggerimento per il programmatore: DPTR e' in realta' un valore a 16-bit ottenuto raggrupppando insieme i registri DPH e DPL. In verita' quando avete a che fare con il registro DPTR quasi sempre usate un byte alla volta. Per esempio, per mettere nello stack il registro DPTR (operazione di push) dovete prima effettuare il push del registro DPL e quindi quello del registro DPH. Non potete semplicemente effettuare il push del registro DPTR. Eccezionalmente esiste un'istruzione per "incrementare il DPTR". Quando eseguite questa istruzione, i due byte operano come se fossero un solo registro a 16-bit. Comunque non esiste un'istruzione per decrementare DPTR. Se volete decrementare DPTR dovete scrivere un sezione di codice apposta.

PCON (Power Control, Indirizzo 87h): Il registro PCON (Power Control) e' usato per controllare il power mode delll'8051. In alcune modalita' di funzionamento e' permesso all'8051 di mettersi nello stato "sleep" che richiede molta minor potenza. Questa modalita' di funzionamento e' controllata dal registro PCON. In piu', uno dei bit di PCON e' usato per raddoppiare il baud rate effettivo della porta seriale dell'8051.

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.

Suggerimento per il programmatore: Per usare la porta seriale dell'8051 e' generalmente necessario inizializzare i seguenti registri SFR: SCON, TCON e TMOD. Cio' e' dovuto al fatto che il registro SCON e' usato solo per controllare la porta seriale. Nella maggior parte dei casi il programma prevede di usare uno dei timer come generatore di baud rate. In questo caso va configurato il timer corrispondente mediante i registri TCON e TMOD.

SBUF (Serial Buffer, Indirizzo 99h): Il registro SBUF (Serial Buffer) e' usato per inviare e ricevere i dati dalla porta seriale dell'8051. Ogni valore scritto nel registro SBUF e' inviato sulla porta seriale dal pin TXD. Allo stesso modo, ogni valore ricevuto dalla seriale attraverso il pin RXD e' reso disponibile al programma applicativo dell'utente mediante una lettura del registro SBUF. In altre parole il registro SBUF serve da porta di uscita quando viene scritto e da porta d'ingresso quando viene letto.

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.

Suggerimento per il programmatore: Se scrivete un routine di interrupt (interrupt handler), e' buona norma salvare sempre lo stato del registro PSW nello stack all'inizio della routine e di ripristinarlo appena prima di ritornare al programma principale. Molte istruzioni modificano lo stato dei bit del registro PSW, per cui se la vostra routine di inetrrupt non preserva lo stato del registro PSW, il programma avra' dei comportamenti strani e imprevedibili e sara' difficile trovare il problema a causa del comportamento non deterministico del microcontrollore.

ACC (Accumulatore, Indirizzo E0h, Indirizzabile a bit): L'accumulatore e' il regiistro dell'8051 piu' usato poiche' esso viene coinvolto in quasi tutte le istruzioni. Esso risiede all'indirizzo E0h, cio' significa che l'istruzione MOV A,#20h in realta' corrisponde all'istruzione MOV E0h,#20h. E' comunque meglio usare la prima istruzione poiche' richiede un solo byte mentre la seconda ne richiede almeno due.

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.

Altri registri SFR

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.

Suggerimento per il programmatore: Qualora state scrivendo un programma che utilizza dei nuovi registri SFR che sono specifici di un chip derivato e non sono contemplati nell'elenco dei registri che abbiamo analizzato, ricordate che esso non girera' su un 8051 standard. Percio' usate i registri SFR non standard solo se ritenete di dover usare il vostro programma su quel microcontrollore specifico. Nella stessa maniera, qualora forniate tale programma ad una terza parte, avvisateli che il vostro codice usa dei registri SFR non standard, per evitargli dei possibili rompicapo.





Privacy




Articolo informazione


Hits: 3187
Apprezzato: scheda appunto

Commentare questo articolo:

Non sei registrato
Devi essere registrato per commentare

ISCRIVITI



Copiare il codice

nella pagina web del tuo sito.


Copyright InfTub.com 2024