Sistemi integrati - Registra banca / pila
Il microcontrollore 8051 ha un totale di 128 byte di RAM. Discuteremo dell'allocazione di questi 128 byte di RAM ed esamineremo il loro utilizzo come stack e registro.
Allocazione dello spazio di memoria RAM nell'8051
Ai 128 byte di RAM all'interno dell'8051 viene assegnato l'indirizzo da 00 a 7FH. È possibile accedervi direttamente come posizioni di memoria e sono suddivisi in tre diversi gruppi come segue:
32 byte da 00H a 1FH sono riservati ai banchi di registri e allo stack.
16 byte da 20H a 2FH sono riservati alla memoria di lettura / scrittura indirizzabile a bit.
80 byte da 30H a 7FH vengono utilizzati per l'archiviazione in lettura e scrittura; è chiamato comescratch pad. Queste 80 posizioni RAM sono ampiamente utilizzate allo scopo di memorizzare dati e parametri dai programmatori 8051.
Registrare le banche in 8051
Un totale di 32 byte di RAM sono riservati ai banchi di registri e allo stack. Questi 32 byte sono divisi in quattro banchi di registri in cui ogni banco ha 8 registri, R0 – R7. Le locazioni RAM da 0 a 7 vengono messe da parte per il banco 0 di R0 – R7 dove R0 è la posizione RAM 0, R1 è la posizione RAM 1, R2 è la posizione 2 e così via, fino alla posizione di memoria 7, che appartiene a R7 del banco 0.
Il secondo banco di registri R0 – R7 inizia dalla posizione 08 della RAM e va alle posizioni OFH. Il terzo banco di R0 – R7 inizia dalla posizione di memoria 10H e va alla posizione a 17H. Infine, le posizioni RAM da 18H a 1FH vengono riservate per il quarto banco di R0-R7.
Banca di registro predefinita
Se le locazioni RAM 00–1F sono riservate ai quattro banchi di registri, a quale banco di registri di R0 – R7 abbiamo accesso quando l'8051 viene acceso? La risposta è banca di registro 0; cioè, si accede alle posizioni RAM da 0 a 7 con i nomi da R0 a R7 durante la programmazione dell'8051. Perché è molto più facile fare riferimento a queste posizioni RAM con nomi come R0 a R7, piuttosto che con le loro posizioni di memoria.
Come cambiare banca di registro
Il banco di registro 0 è l'impostazione predefinita all'accensione dell'8051. Possiamo passare agli altri banchi usando il registro PSW. I bit D4 e D3 del PSW sono utilizzati per selezionare il banco di registri desiderato, poiché sono accessibili tramite le istruzioni bit indirizzabili SETB e CLR. Ad esempio, "SETB PSW.3" imposterà PSW.3 = 1 e selezionerà il registro del banco 1.
RS1 | RS2 | Banca selezionata |
---|---|---|
0 | 0 | Bank0 |
0 | 1 | Bank1 |
1 | 0 | Bank2 |
1 | 1 | Bank3 |
Stack e sue operazioni
Stack nell'8051
Lo stack è una sezione di una RAM utilizzata dalla CPU per memorizzare informazioni come dati o indirizzo di memoria su base temporanea. La CPU necessita di questa area di memoria considerando un numero limitato di registri.
Modalità di accesso agli stack
Poiché lo stack è una sezione di una RAM, ci sono dei registri all'interno della CPU che puntano ad essa. Il registro utilizzato per accedere allo stack è noto come registro del puntatore dello stack. Il puntatore dello stack nell'8051 è largo 8 bit e può assumere un valore compreso tra 00 e FFH. Quando l'8051 viene inizializzato, il registro SP contiene il valore 07H. Ciò significa che la posizione della RAM 08 è la prima posizione utilizzata per lo stack. L'operazione di memorizzazione di un registro della CPU nello stack è nota come filePUSHe riportare i contenuti dallo stack in un registro della CPU è chiamato a POP.
Spingendo nella pila
Nell'8051, lo stack pointer (SP) punta all'ultima posizione utilizzata dello stack. Quando i dati vengono inseriti nello stack, il puntatore dello stack (SP) viene incrementato di 1. Quando viene eseguito PUSH, il contenuto del registro viene salvato nello stack e SP viene incrementato di 1. Per inserire i registri nello stack, devono utilizzare i loro indirizzi RAM. Ad esempio, l'istruzione "PUSH 1" inserisce il registro R1 nello stack.
Saltando dalla pila
Reinserire il contenuto della pila in un dato registro è l'opposto del processo di push. Ad ogni operazione pop, il primo byte dello stack viene copiato nel registro specificato dall'istruzione e il puntatore dello stack viene decrementato una volta.