[Search] [Contact Us]
|
|||||||||||||||||||
Sponsor di 8052.it ![]() µC Family FAQ Strumenti di Sviluppo Libri Bookmarks Mailing List Forum Download Area Prodotti Il sito 8052.it e' in continua evoluzione: se avete suggerimenti o richieste contattateci |
Corso 8051 CAPITOLO 4 - Modi d'indirizzamento Quando parliamo di modi d'indirizzamento, ci riferiamo a come una locazione di memoria viene indirizzata. L'8051 dispone dei seguenti modi d'indirizzamnto:
Ognuno di questi modi d'indirizzamento fornisce importanti
flessibilita'.
L'Indirizzamento Immediato e' chiamato cosi' perche' il valore da memorizzare risiede immediatamente nel codice operativo nella memoria programma. Cio' significa che l'istruzione contiene in se' stessa il valore da memorizzare. Per esempio, l'istruzione: MOV A,#20husa l'indirizzamento immediato perche' l'accumulatore sara' caricato con il valore che segue immadiatamente (una costante); in questo caso 20 (esadecimale). L' indirizzamento immediato e' molto veloce poiche' il valore da caricare e' gia contenuto nell'istruzione stessa. Come inconveniente, pero', il valore e' stabilito al momento della compilazione e questo ne limita la flessibilita'. L'Indirizzamento Diretto e' chiamato cosi' perche' il valore da memorizzare in memoria e' ottenuto direttamente prendendolo da un'altra locazione di memoria. Per esempio, l'istruzione: MOV A, 30hleggera' il valore contenuto nella locazione di RAM interna all'indirizzo 30 (esadecimale) e lo porra' nell'accumulatore. L'Indirizzamento Diretto e' generalmente veloce, poiche', anche se il valore da caricare non e' incluso nell'istruzione, esso e' comunque facilmente accessibile, in quanto risiede nella memoria interna dell'8051. Esso e' inoltre molto piu' flessibile dell'Indirizzamento Immediato poiche' il valore da caricare e' contenuto in un determinato indirizzo e quindi puo' essere modificato. Va inoltre notato che, ogni volta che usate l'indirizzamento diretto con valori compresi da 00h a 7Fh fate riferimento alla Memoria Interna. Mentre se usate indirizzi da 80h a FFh fate riferimento ai registri SFR che servono a controllare i modi operativi del microcontrollore stesso. A questo punto sorge spontanea la domanda; " Se l'indirizzamento
diretto
nell'area da 80h a FFh fa riferimento ai registri SFR, come posso
indirizzare
i 128 byte superiori della RAM interna dell'8052?". La risposta e': Non
potete usare l'indirizzamento diretto per far riferimento a quell'area
di memoria. Ad ogni modo potete accedere a tale parte di RAM usando il
prossimo modo d'indirizzamento: quello indiretto.
L'indirizzamento Indiretto e' un modo molto potente che in molti casi fornisce un elevato grado di flessibilita'. Esso e' inoltre l'unica maniera per accedere ai 128 byte extra della RAM interna dell'8052. L'indirizzamento indiretto assume la seguente forma: MOV A,@R0 Questa istruzione dice all'8051 di analizzare il valore contenuto
nel
registro R0. In seguito il microcontrollore carichera'
nell'accumulatore
il valore contenuto nella RAM interna alla locazione il cui indirizzo
e'
contenuto in R0.
MOV R0,#99h ;Carica in R0 l'indirizzo della porta serialeQuesta operazione e' concettualmente non valida. Siccome l'indirizzamento indiretto fa sempre riferimento alla RAM interna, le due istruzioni di sopra, scriveranno 01h all'indirizzo 99h dell'8052. Nel caso di un 8051, le due istruzioni produrranno un risultato indefinito, perche' esso dispone di soli 128 byte. La Memoria Esterna puo' essere usata con un modo d'indirizzamento chiamato "Esterno Diretto". Il suo nome deriva dal fatto che esso e' simile all'indirizzamento diretto, ma e' usato per accedere alla memoria esterna invece che interna. Ci sono solo due istruzioni che usano questo modo d'indirizzamento: MOVX A,@DPTRCome potete notare, ambedue le istruzioni utilizzano DPTR. In queste istruzioni, il registro DPTR deve essere caricato con l'indirizzo della memoria esterna alla quale si vuole accedere. Una volta che il registro DPTR contiene l'indirizzo corretto, la prima istruzione carichera' il valore della memoria nell'accumulatore, mentre la seconda fara' l'operazione opposta, spostando il valore dell'accumulatore nella memoria esterna. La memoria esterna puo' anche essere indirizzata usando una forma di indirizzamento indiretto chiamato "esterno indiretto". Questa forma di indirizzamento e' usualmente utilizzata in progetti relitavemente piccoli che hanno una piccola quantita' di RAM esterna. Un esempio di tale indirizzamento e' il seguente: MOVX @R0,AAncora una volta, il valore di R0 e' usato come indirizzo di memoria esterna dove caricare il valore dell'accumulatore. Poiche' il valore di @R0 puo' soltanto essere incluso nel range da 00h a FFh, il progetto dovrebbe effettivamente avere una RAM esterna di soli 256 byte. Ci sono degli accorgimenti relativamente semplici implementati in hardware/software per accedere a piu' di 256 byte di memoria esterna usando l'indirizzamento in oggetto, comunque risulta piu' facile usare in questi casi l'indirizzamento Esterno Diretto. ![]() < Registri Base > Controllo di flusso del programma (C)Copyright 1997, 1998 by Vault Information
Services. All
Rights Reserved.
Le informazioni sono fornite senza alcuna garanzia (vedi dettagli) Contattate l'autore Craig Steiner (presso 8052.com) per l'uso e/o il permesso di divulgazione di questo corso. Traduzione italiana di: Sergio Salvitti |
||||||||||||||||||
|
Indirizzamento |
Site made with Sworg - Simple Web Organizer
|
||||||||||||||||||