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
 

Tipi di Memoria - Memoria di Programma

informatica



Tipi di Memoria

L'8051 ha in generale tre tipi di memoria.

Per programmare efficacemente l'8051 e' necessario avere una conoscenza di base di questi tipi di memoria.

I tipi di memoria sono illustrati nel figura sottostante.

Essi sono: Memoria On-Chip, Memoria di programma esterna (External Code) e RAM esterna (External RAM).

La memoria On-Chip si riferisce a quella che fisicamente risiede nel componente. Essa puo'
essere di tipi diversi, ma non preoccupatevi, la affronteremo presto nel seguito.

La memoria di programma esterna e' quella che contiene il codice e risiede fuori dal chip.
Questa si presenta generalmente sotto forma di una EPROM esterna.

La RAM esterna e' la RAM che risiede fuori dal chip.
Questa si presenta generalmente sotto forma di una RAM statica o di una FLASH RAM.

Memoria di Programma

La memoria di programma e' quella che contiene le istruzioni che l'8051 deve eseguire.



Questa memoria e' limitata a 64K e viene fornita in diverse forme e formati.

La memoria programma (codice) puo' essere contenuta all'internodel chip sotto forma di ROM oppure di EPROM.

Il codice puo' essere anche memorizzato in una ROM esterna o, piu' comunemente, in una EPROM.

La FLASH RAM e' un altro metodo molto usato per memorizzare un programma.

Possono essere usate diverse combinazioni di tipi di memoria, per esempio: e' possibile avere 4K di memoria di codice nella prom interna del chip e 64K di memoria di codice esterna in una EPROM.

Quando il programma e' memorizzato nella prom interna del chip i 64K massimi si riducono a 4k, 8k o 16k in funzione della versione di 8051 usata.

Ciascuna versione offre specifiche prestazioni. Un modo per 131b18b distinguere i chip e' quello relativo alla quantita' di ROM/EPROM disponibile internamente.

Comunque, la memoria di programma e' comunemente implementata con una EPROM esterna.

Suggerimento per la programmazione: Poiche' la memoria programma e' limitata a 64k la dimensione dei programmi per l'8051 non dovvrebbe superare tale limite. Alcuni assembler e compilatori offrono un accorgimento per ovviare a questa limitazione usando dei banchi di memoria. Comunque senza particolari compilatori e trucchi hardware i programmi sono limitati a 64K.

RAM esterna

Oltre alla RAM interna, l'8051 supporta anche la RAM esterna.

Come suggerisce anche il nome, la RAM esterna e' una memoria ad accesso casuale situata fuori dal chip. Essendo esterna, essa non e' flessibile in termini di accesso ed e' anche piu' lenta di quella interna. Per esempio, per incrementare una locazione di RAM interna e' richiesta una sola istruzione ed un solo ciclo d'istruzione, mentre per incrementare una variabile residente nella RAM esterna sono necessarie 4 istruzioni e 7 cicli d'istruzione. In questo caso la memoria esterna diventa 7 volte piu' lenta.

Quello che perde in velocita' lo guadagna pero' in ampiezza. Mentre la RAM interna e' limitata a 128 bytes (256 bytes nell'8052), quella esterna puo' arrivare fino a 64K.

Suggerimento per la programmazione: L'8051 puo' indirizzare soltanto 64k di RAM. Per espandere tale capacita' e' richiesto un trucco hardware. Potreste trovarvi nella necessita' di farlo a mano, poiche' molti assembler e compilatori forniscono il supporto per programmi superiori a 64K, ma non sono capaci di farlo anche con la RAM. Questo fatto e' molto strano. Nella mia passata esperienza ho notato che i programmi rientrano generalmente entro il limite di 64K mentre la RAM e' spesso insufficiente. Se necessitate quindi di un quantitativo RAM superiore a 64K, verificate che il vostro compilatore possa supportare la gestione della RAM a banchi altrimenti siate pronti a farlo a mano.

Memoria On-Chip

Come menzionato all'inizio di questo capitolo, l'8051 include internamente una certa quantita' di memoria. In effetti la memoria interna (On-Chip Memory) e' di due tipi: RAM interna e Area Registri Speciali (SFR memory).

Lo schema della memoria interna dell'8051 e' riportato nella mappa seguente:

Come illustrato nella mappa, l'8051 ha un banco di 128 bytes di RAM interna. Questa tipo di RAM e' la piu' veloce e la piu' flessibile in lettura e scrittura. La RAM interna pero' e' volatile, per cui, quando l'8051 viene resettato essa si cancella.

I 128 bytes di RAM interna sono divisi in porzioni come illustrato nella mappa di memoria.

I primi 8 bytes (00h-07h) sono il banco di registri 0. Cambiando il valore di alcuni registri SFR e' possibile scegliere di usare anche i banchi 1, 2, 3. Questi banchi di registri alternativi risiedono nella RAM interna agli indirizzi da 08h a 1Fh. Discuteremo dei "banchi di registri" con maggior dettaglio in un capitolo successivo. Per ora e' sufficiente sapere che essi esistono e fanno parte della RAM interna.

Anche la memoria a bit risiede nella RAM interna. Parleremo in maniera piu' approfondita della memoria a bit molto presto, ma per ora tenete soltanto a mente che essa risiede nella RAM interna a partire dall'indirizzo 20h fino all'indirizzo 2Fh.

I restanti 80 bytes della RAM interna, dall'indirizzo 30h a 7Fh, possono essere usati come variabili utente che richiedono accessi frequenti e veloci.
Questa area e' anche utilizzata dal microcontrollore come area di memoria per le operazioni di stack. Cio' limita moltissimo l'ampiezza dell'area di stack dell'8051 che e' al massimo di 80 bytes e anche meno. In realta' gli 80 byte sono usati anche dalle variabili d'utente.

Banchi di Registri

L'8051 usa i registri "R" che sono richiamati da molte delle sue istruzioni. Questi registri "R" sono numerati da 0 a 7 (R0, R1, R2, R3, R4, R5, R6, e R7). Essi sono generalmente usati per memorizzare un dato temporaneo o per muovere dati da una locazione di memoria ad un'altra.
Per esempio, per addizionare il valore di R4 al valore dell' Accumulatore, noi eseguiremo la seguente istruzione:

ADD A,R4

Se l'Accumulatore (A) contiene il vaore 6 e R4 il valore 3, al termine dell'istruzione suddetta l'accumulatore conterra' il valore 9.

Comunque, come mostrato nella mappa di memoria, il registro R4 e' realmente parte della RAM interna, in particolare il suo indirizzo e' 04h. Questo puo' essere visto nella sezione verde della mappa di memoria. Anche l'istruzione seguente ottiene il medesimo risultato:

ADD A,04h

Questa istruzione addiziona il valore contenuto nella locazione di memoria d'indirizzo 04h al valore dell'accumulatore e carica il risultato nell' accumulatore stesso. Poiche' R4 risiede all'indirizzo 04h, l'istruzione summenzionata ottiene il medesimo risultato.

Ma osservate! Come mostra la mappa di memoria, l'8051 dispone di 4 distinti banchi di registri. All'accensione, l'8051 usa il banco 0 (indirizzi da 00h a 07h) come default. Ma il vostro programma puo' richiedere all'8051 di usare un banco di registri diverso da 0 (es. 1, 2, 3). In questo caso, R4 non si trovera' piu' all'indirizzo 04h. Per esempio, se il programma chiede all'8051 di selezionare il banco di registri numero 3, il registro R4 diventera' sinonimo di RAM interna alla locazione 1Ch.

Il concetto di banchi di registri aggiunge un livello di elevata flessibilita' all'8051, specialmente quando parliamo di interrupt (affronteremo l'argomento interrupt piu' avanti). In ogni caso, ricordate sempre che i banchi di registri risiedono nei primi 32 bytes della RAM interna.

Suggerimento per il programmatore: Se usate solo il primo banco di registri (p.e. il banco 0), le locazioni di RAM interna da 08h a 1Fh possono essere usate per i vostri scopi. Ma se pensate di usareanche i banchi di registri 1, 2, 3, state attenti a non accedere ad indirizzi di memoria al di sotto di 20h altrimenti andrete a sovrascrivere il valore di un registro R.

Memoria a bit

L'8051, e' un microcontrollore orientato alla trasmissione dati e , come tale, da all'utente la possibilita' di accedere ad un numero di variabili a bit. Queste variabili possono assumere o il valore 1 o il valore 0.

Ci sono 128 variabili a bit disponibili all'utente, numerate da 00h a 7Fh. L'utente puo' far uso di queste variabili con comandi quali SETB e CLR. Per esempio, per porre il bit numero 24(hex) al valore 1 dovreste eseguire la seguente istruzione:

SETB 24h

E' importante notare che la Memoria a bit e' realmente parte della RAM interna. Infatti, le 128 variabili a bit occupano 16 bytes della RAM interna da 20h a 2Fh. Comunque se scrivete il valore FFh nell'indirizzo 20h della RAM interna, in effetti avete settato tutti i bit da 00h a 07h.
Come dire:

MOV 20h,#0FFh

e' equivalente a:

SETB 00h
SETB 01h
SETB 02h
SETB 03h
SETB 04h
SETB 05h
SETB 06h
SETB 07h

Come appena illustrato, la memoria a bit non e' realmente un nuovo tipo di memoria ma solo una parte della RAM interna. Poiche' l'8051 fornisce delle istruzioni particolari per accedere a questi 16 bytes su base bit, e' utile ritenerla come se fosse una memoria separata. In ogni caso, ricordate che essa e' solo una parte della RAM interna e che in questa parte di RAM e' possibile effettuare delle operazioni bit a bit.

Suggerimento per il programmatore: Se il vostro programma non usa le variabili a bit, potete utilizzare le locazioni della RAM interna da 20h a 2Fh per i vostri scopi. Ma se pensate di utilizzare le variabili a bit, state molto attento agli indirizzi da 20h a 2Fh onde evitare di sovrascrivere il valore dei vostri bit!

Le variabili a bit da 00h a 7Fh sono funzioni utente definite nei tuoi programmi. Comunque le variabili a bit da 80h in su, sono attualmente utilizzate per accedere ad alcuni registri SFR su base bit. Per esempio, se le linee di uscita della porta 0 (P0.0 - P0.7) sono tutte a zero e volete settare solo il pin P0.0 dovreste eseguire le seguente istruzione:

MOV P0,#01h

oppure potreste eseguire quest'altra istruzione:

SETB 80h

Ambedue le istruzioni danno il medesimo risultato. In ogni caso, mentre il comando SETB attiva solo l'uscita P0.0 lasciando inalterato lo stato degli altri pin della porta P0, l'istruzione MOV, invece, forza tutti gli altri pin al valore 0, e in alcuni casi, questo puo' essere inaccettabile.

Suggerimento per il programmatore: Di default, l'8051 inizializza lo Stack Pointer (SP) al valore 08h quando il microcontrollore viene alimentato. Questo significa che lo stack iniziera' dall'indirizzo 08h e crescera' verso l'alto. Se volete usare i banchi di registri 1, 2, 3 dovete ricordarvi di inizializzare lo stack pointer sopra l'indirizzo del piu' alto banco di registri che volete adoperare, pena la sovrascrittura dei banchi di registri. Allo stesso modo, se pensate di usare la memoria a bit sarebbe una buona idea inizializzare lo stack pointer ad un valore piu' alto di 2Fh per garantire che le vostre variabili a bit siano protette dallo stack.

Registri Speciali (SFR)

I registri speciali (SFR) sono aree di memoria che controllano specifiche funzionalita' dell'8051. Per esempio, 4 registri SFR consentono l'accesso alle 32 linee di input/output dell'8051. Un altro registro SFR consente di leggere e scrivere sulla porta seriale dell'8051. Altri registri SFR permettono all'utente di: impostare il baud rate della seriale, controllare ed accedere ai timer e configurare il sistema degli interrupt dell'8051.

Quando state programmando, i registri SFR vi danno l'illusione di risiedere nella Memoria Interna. Per esempio se volete scrivere il valore "1" alla locazione 50 hex dovete eseguire la seguente istruzione:

MOV 50h,#01h

Allo stesso modo, se volete scrivere il valore "1" sulla porta seriale dell'805, dovete scrivere questo valore nel registro SFR denominato SBUF all' indirizzo e' 99 Hex.
Vedi come esempio la seguente istruzione:

MOV 99h,#01h

Come potete osservare, sembra che l'area SFR sia parte della Memoria Interna. Questo non e' vero! Quando utilizzate questo metodo di accesso alla memoria (indirizzamento diretto), ogni istruzione che usa degli indirizzi da 00h a 77Fh fa riferimento alla RAM interna, mentre se usa degli indirizzi da 80h a FFh fa riferimento ad un registro di controllo SFR.

Suggerimento per il programmatore: I registri SFR sono usati per controllare le funzionalita' dell'8051. Ogni registro SFR ha un sua funzione specifica ed un particolare formato del quale parleremo piu' avanti. Non tutti gli indirizzi al di sopra di 80h sono usati dai registri SFR. Comunque, questa area e' riservata e non puo' essere usata come RAM addzionale anche se ad un particolare indirizzo non corrisponde alcun registro SFR.




Privacy




Articolo informazione


Hits: 3538
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