Sistemi integrati - Registri

I registri vengono utilizzati nella CPU per memorizzare temporaneamente informazioni che potrebbero essere dati da elaborare o un indirizzo che punta ai dati che devono essere recuperati. Nell'8051 esiste un tipo di dati a 8 bit, da MSB (bit più significativo) D7 a LSB (bit meno significativo) D0. Con il tipo di dati a 8 bit, qualsiasi tipo di dati superiore a 8 bit deve essere suddiviso in blocchi di 8 bit prima di essere elaborato.

I registri più utilizzati dell'8051 sono A (accumulatore), B, R0-R7, DPTR (puntatore dati) e PC (contatore programma). Tutti questi registri sono di 8 bit, eccetto DPTR e PC.

Registri di archiviazione in 8051

Discuteremo i seguenti tipi di registri di archiviazione qui:

  • Accumulator
  • Registro R.
  • Registro B.
  • Puntatore dati (DPTR)
  • Contatore programma (PC)
  • Stack Pointer (SP)

Accumulatore

L'accumulatore, registro A, viene utilizzato per tutte le operazioni aritmetiche e logiche. Se l'accumulatore non è presente, ogni risultato di ogni calcolo (addizione, moltiplicazione, spostamento, ecc.) Deve essere memorizzato nella memoria principale. L'accesso alla memoria principale è più lento dell'accesso a un registro come l'accumulatore perché la tecnologia utilizzata per la grande memoria principale è più lenta (ma più economica) di quella utilizzata per un registro.

I registri "R"

I registri "R" sono un insieme di otto registri, vale a dire, R0, da R1 a R7. Questi registri funzionano come registri di memorizzazione ausiliari o temporanei in molte operazioni. Considera un esempio della somma di 10 e 20. Memorizza una variabile 10 in un accumulatore e un'altra variabile 20, diciamo, nel registro R4. Per elaborare l'operazione di aggiunta, eseguire il seguente comando:

ADD A,R4

Dopo aver eseguito questa istruzione, l'accumulatore conterrà il valore 30. Pertanto i registri "R" sono ausiliari o molto importanti helper registers. Il solo Accumulatore non sarebbe molto utile se non fosse per questi registri "R". I registri "R" servono per la memorizzazione temporanea dei valori.

Facciamo un altro esempio. Aggiungeremo i valori in R1 e R2 insieme e poi sottrarremo i valori di R3 e R4 dal risultato.

MOV A,R3   ;Move the value of R3 into the accumulator 
ADD A,R4   ;Add the value of R4 
MOV R5,A   ;Store the resulting value temporarily in R5 
MOV A,R1   ;Move the value of R1 into the accumulator 
ADD A,R2   ;Add the value of R2 
SUBB A,R5  ;Subtract the value of R5 (which now contains R3 + R4)

Come puoi vedere, abbiamo usato R5 per trattenere temporaneamente la somma di R3 e R4. Naturalmente, questo non è il modo più efficiente per calcolare (R1 + R2) - (R3 + R4), ma illustra l'uso dei registri "R" come un modo per memorizzare i valori temporaneamente.

Il registro "B"

Il registro "B" è molto simile all'accumulatore nel senso che può contenere un valore di 8 bit (1 byte). Il registro "B" viene utilizzato solo da due istruzioni 8051:MUL AB e DIV AB. Per moltiplicare o dividere rapidamente e facilmente A per un altro numero, è possibile memorizzare l'altro numero in "B" e utilizzare queste due istruzioni. Oltre a utilizzare le istruzioni MUL e DIV, il registro "B" viene spesso utilizzato come un altro registro di memorizzazione temporanea, molto simile a un nono registro R.

Il puntatore dati

Il Data Pointer (DPTR) è l'unico registro a 16 bit (2 byte) accessibile all'utente dell'8051. L'accumulatore, i registri R0 – R7 e il registro B sono registri di valore a 1 byte. DPTR è pensato per puntare ai dati. Viene utilizzato dall'8051 per accedere alla memoria esterna utilizzando l'indirizzo indicato da DPTR. DPTR è l'unico registro a 16 bit disponibile e viene spesso utilizzato per memorizzare valori a 2 byte.

Il contatore del programma

Il Program Counter (PC) è un indirizzo a 2 byte che indica all'8051 dove si trova nella memoria l'istruzione successiva da eseguire. Il PC parte da 0000h quando l'8051 si inizializza e viene incrementato ogni volta che viene eseguita un'istruzione. Il PC non è sempre incrementato di 1. Alcune istruzioni possono richiedere 2 o 3 byte; in questi casi, il PC verrà incrementato di 2 o 3.

Branch, jump, e interruptle operazioni caricano il contatore del programma con un indirizzo diverso dalla posizione sequenziale successiva. L'attivazione di un reset all'accensione causerà la perdita di tutti i valori nel registro. Significa che il valore del PC è 0 al ripristino, costringendo la CPU a recuperare il primo codice operativo dalla posizione della ROM 0000. Significa che dobbiamo posizionare il primo byte dell'upcode nella posizione della ROM 0000 perché è lì che la CPU si aspetta di trovare il prima istruzione.

Lo Stack Pointer (SP)

Lo Stack Pointer, come tutti i registri eccetto DPTR e PC, può contenere un valore a 8 bit (1 byte). Lo Stack Pointer indica la posizione da cui il valore successivo deve essere rimosso dallo stack. Quando un valore viene inserito nello stack, il valore di SP viene incrementato e quindi il valore viene memorizzato nella posizione di memoria risultante. Quando un valore viene estratto dallo stack, il valore viene restituito dalla posizione di memoria indicata da SP, quindi il valore di SP viene decrementato.

Questo ordine di operazione è importante. SP verrà inizializzato a 07h quando viene inizializzato l'8051. Se un valore viene inserito nello stack nello stesso momento, il valore verrà memorizzato nell'indirizzo RAM interno 08h perché l'8051 prima incrementerà il valore di SP (da 07h a 08h) e quindi memorizzerà il valore inserito in quella memoria indirizzo (08h). SP viene modificato direttamente dall'8051 da sei istruzioni: PUSH, POP, ACALL, LCALL, RET e RETI.

Spazio ROM nell'8051

Alcuni membri della famiglia dell'8051 hanno solo 4K byte di ROM su chip (ad esempio 8751, AT8951); alcuni hanno una ROM 8K come AT89C52, e ci sono alcuni membri della famiglia con 32K byte e 64K byte di ROM su chip come Dallas Semiconductor. Il punto da ricordare è che nessun membro della famiglia 8051 può accedere a più di 64K byte di codice operativo poiché il contatore del programma nell'8051 è un registro a 16 bit (da 0000 a FFFF).

La prima posizione della ROM del programma all'interno dell'8051 ha l'indirizzo 0000H, mentre l'ultima posizione può essere diversa a seconda delle dimensioni della ROM sul chip. Tra i membri della famiglia 8051, AT8951 ha $ k byte di ROM su chip con un indirizzo di memoria da 0000 (prima posizione) a 0FFFH (ultima posizione).

8051 Flag bit e registro PSW

Il registro della parola di stato del programma (PSW) è un registro a 8 bit, noto anche come flag register. Ha una larghezza di 8 bit, ma ne viene utilizzato solo 6 bit. I due bit inutilizzati sonouser-defined flags. Vengono chiamate quattro delle bandiereconditional flags, il che significa che indicano una condizione che risulta dopo l'esecuzione di un'istruzione. Questi quattro sonoCY (Trasportare), AC (trasporto ausiliario), P (parità) e OV(overflow). I bit RS0 e RS1 vengono utilizzati per modificare i registri del banco. La figura seguente mostra il registro della parola di stato del programma.

Il registro PSW contiene quei bit di stato che riflettono lo stato corrente della CPU.

CY circa F0 RS1 RS0 OV - P

CY PSW.7 Porta bandiera
corrente alternata PSW.6 Flag di trasporto ausiliario
F0 PSW.5 Flag 0 disponibile per l'utente per scopi generali.
RS1 PSW.4 Registra il selettore del banco bit 1
RS0 PSW.3 Registra il selettore del banco bit 0
OV PSW.2 Bandiera di overflow
- PSW.1 BANDIERA definibile dall'utente
P PSW.0 BANDIERE DI PARITÀ. Impostato / cancellato dall'hardware durante il ciclo di istruzione per indicare il numero pari / dispari di 1 bit nell'accumulatore.

È possibile selezionare il bit del banco di registro corrispondente utilizzando i bit RS0 e RS1.

RS1 RS2 Register Bank Indirizzo
0 0 0 00H-07H
0 1 1 08H-0FH
1 0 2 10H-17H
1 1 3 18H-1FH
  • CY, the carry flag- Questo flag di riporto viene impostato (1) ogni volta che viene eseguita una traslazione dal bit D7. Viene influenzato dopo un'operazione di addizione o sottrazione a 8 bit. Può anche essere reimpostato su 1 o 0 direttamente da un'istruzione come "SETB C" e "CLR C" dove "SETB" sta per set bit carry e "CLR" sta per clear carry.

  • AC, auxiliary carry flag- Se c'è un riporto da D3 e D4 durante un'operazione ADD o SUB, viene impostato il bit AC; in caso contrario, viene cancellato. Viene utilizzato per l'istruzione per eseguire operazioni aritmetiche decimali in codice binario.

  • P, the parity flag- Il flag di parità rappresenta il numero di 1 solo nel registro dell'accumulatore. Se il registro A contiene un numero dispari di 1, allora P = 1; e per un numero pari di 1, P = 0.

  • OV, the overflow flag- Questo flag viene impostato ogni volta che il risultato di un'operazione di numero con segno è troppo grande, causando l'overflow del bit di ordine elevato nel bit di segno. Viene utilizzato solo per rilevare errori nelle operazioni aritmetiche con segno.

Esempio

Mostra lo stato dei flag CY, AC e P dopo l'aggiunta di 9CH e 64H nelle seguenti istruzioni.

MOV A, # 9CH

AGGIUNGI A, # 64H

Solution:  9C   10011100 
          +64   01100100 
          100   00000000 
			 
CY = 1 since there is a carry beyond D7 bit  
AC = 0 since there is a carry from D3 to D4 
P  = 0 because the accumulator has even number of 1's