Systemy wbudowane - rejestry

Rejestry są wykorzystywane w CPU do tymczasowego przechowywania informacji, które mogą być danymi do przetworzenia lub adresu wskazującego dane, które mają być pobrane. W 8051 istnieje 8-bitowy typ danych, od MSB (najbardziej znaczący bit) D7 do LSB (najmniej znaczący bit) D0. W przypadku 8-bitowego typu danych każdy typ danych większy niż 8-bitowy musi zostać podzielony na 8-bitowe fragmenty przed przetworzeniem.

Najczęściej używane rejestry 8051 to A (akumulator), B, R0-R7, DPTR (wskaźnik danych) i PC (licznik programu). Wszystkie te rejestry są 8-bitowe, z wyjątkiem DPTR i PC.

Rejestry magazynowe w 8051

Omówimy tutaj następujące rodzaje rejestrów magazynowych -

  • Accumulator
  • Rejestr R.
  • Rejestr B.
  • Wskaźnik danych (DPTR)
  • Licznik programów (PC)
  • Wskaźnik stosu (SP)

Akumulator

Akumulator, rejestr A, jest używany do wszystkich operacji arytmetycznych i logicznych. Jeśli nie ma akumulatora, to każdy wynik każdego obliczenia (dodawanie, mnożenie, przesunięcie itp.) Ma być przechowywany w pamięci głównej. Dostęp do pamięci głównej jest wolniejszy niż dostęp do rejestru, takiego jak akumulator, ponieważ technologia używana w przypadku dużej pamięci głównej jest wolniejsza (ale tańsza) niż ta stosowana w przypadku rejestru.

Rejestry „R”

Rejestry „R” to zestaw ośmiu rejestrów, a mianowicie R0, R1 do R7. Rejestry te działają jako rejestry pomocnicze lub tymczasowe w wielu operacjach. Rozważmy przykład sumy 10 i 20. Przechowuj zmienną 10 w akumulatorze, a inną zmienną 20, powiedzmy, w rejestrze R4. Aby przetworzyć operację dodawania, wykonaj następujące polecenie -

ADD A,R4

Po wykonaniu tej instrukcji akumulator będzie zawierał wartość 30. Zatem rejestry "R" są bardzo ważnymi pomocniczymi lub helper registers. Sam akumulator nie byłby zbyt przydatny, gdyby nie te rejestry „R”. Rejestry „R” służą do tymczasowego przechowywania wartości.

Weźmy inny przykład. Dodamy razem wartości R1 i R2, a następnie od wyniku odejmiemy wartości R3 i R4.

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)

Jak widać, użyliśmy R5 do tymczasowego przechowywania sumy R3 i R4. Oczywiście nie jest to najbardziej efektywny sposób obliczania (R1 + R2) - (R3 + R4), ale ilustruje użycie rejestrów „R” jako sposobu tymczasowego przechowywania wartości.

Rejestr „B”

Rejestr „B” jest bardzo podobny do akumulatora w tym sensie, że może zawierać 8-bitową (1-bajtową) wartość. Rejestr „B” jest używany tylko przez dwie instrukcje 8051:MUL AB i DIV AB. Aby szybko i łatwo pomnożyć lub podzielić A przez inną liczbę, możesz zapisać drugą liczbę w „B” i skorzystać z tych dwóch instrukcji. Oprócz stosowania instrukcji MUL i DIV, rejestr „B” jest często używany jako kolejny rejestr do tymczasowego przechowywania, podobnie jak dziewiąty rejestr R.

Wskaźnik danych

Wskaźnik danych (DPTR) to jedyny dostępny dla użytkownika 16-bitowy (2-bajtowy) rejestr 8051. Akumulator, rejestry R0 – R7 i rejestr B są 1-bajtowymi rejestrami wartości. DPTR służy do wskazywania danych. Jest używany przez 8051 do dostępu do pamięci zewnętrznej przy użyciu adresu wskazanego przez DPTR. DPTR jest jedynym dostępnym rejestrem 16-bitowym i jest często używany do przechowywania wartości 2-bajtowych.

Licznik programów

Licznik programu (PC) to 2-bajtowy adres, który informuje 8051, gdzie w pamięci można znaleźć następną instrukcję do wykonania. PC uruchamia się o 0000h, kiedy 8051 inicjalizuje się i jest zwiększany za każdym razem po wykonaniu instrukcji. PC nie zawsze jest zwiększany o 1. Niektóre instrukcje mogą wymagać 2 lub 3 bajtów; w takich przypadkach komputer zostanie zwiększony o 2 lub 3.

Branch, jump, i interruptoperacje ładują Licznik Programu z adresem innym niż następna kolejna lokalizacja. Aktywacja resetowania po włączeniu zasilania spowoduje utratę wszystkich wartości w rejestrze. Oznacza to, że wartość komputera wynosi 0 po zresetowaniu, zmuszając procesor do pobrania pierwszego kodu z lokalizacji ROM 0000. Oznacza to, że musimy umieścić pierwszy bajt kodu upcode w lokalizacji ROM 0000, ponieważ to właśnie tam procesor spodziewa się znaleźć pierwsza instrukcja.

Wskaźnik stosu (SP)

Wskaźnik stosu, podobnie jak wszystkie rejestry z wyjątkiem DPTR i PC, może zawierać 8-bitową (1-bajtową) wartość. Wskaźnik stosu wskazuje miejsce, z którego następna wartość ma zostać usunięta ze stosu. Gdy wartość jest umieszczana na stosie, wartość SP jest zwiększana, a następnie wartość jest przechowywana w wynikowej lokalizacji pamięci. Gdy wartość jest zdejmowana ze stosu, wartość jest zwracana z lokalizacji pamięci wskazanej przez SP, a następnie wartość SP jest zmniejszana.

Ta kolejność operacji jest ważna. SP zostanie zainicjowany na 07h, kiedy 8051 zostanie zainicjowany. Jeśli wartość zostanie umieszczona na stosie w tym samym czasie, wartość zostanie zapisana w wewnętrznym adresie RAM 08h, ponieważ 8051 najpierw zwiększy wartość SP (od 07h do 08h), a następnie zapisze przesuniętą wartość w tej pamięci adres (08h). SP jest modyfikowane bezpośrednio przez 8051 za pomocą sześciu instrukcji: PUSH, POP, ACALL, LCALL, RET i RETI.

ROM Space w 8051

Niektórzy członkowie rodziny 8051 mają tylko 4K bajtów wbudowanej pamięci ROM (np. 8751, AT8951); niektóre mają 8K ROM, jak AT89C52, i są niektórzy członkowie rodziny z 32K bajtami i 64K bajtami wbudowanej pamięci ROM, na przykład Dallas Semiconductor. Należy pamiętać, że żaden członek rodziny 8051 nie może uzyskać dostępu do więcej niż 64 KB kodu operacji, ponieważ licznik programu w 8051 jest rejestrem 16-bitowym (0000 do adresu FFFF).

Pierwsza lokalizacja pamięci ROM programu wewnątrz 8051 ma adres 0000H, podczas gdy ostatnia lokalizacja może się różnić w zależności od rozmiaru pamięci ROM w chipie. Wśród członków rodziny 8051, AT8951 ma $ k bajtów wbudowanej pamięci ROM o adresie pamięci od 0000 (pierwsza lokalizacja) do 0FFFH (ostatnia lokalizacja).

8051 Bity flagi i rejestr PSW

Rejestr słowa statusu programu (PSW) jest 8-bitowym rejestrem, znanym również jako flag register. Ma 8-bitową szerokość, ale jest używana tylko 6-bitowa. Dwa nieużywane bity touser-defined flags. Nazywa się cztery flagiconditional flagsco oznacza, że ​​wskazują warunek, który następuje po wykonaniu instrukcji. Te cztery sąCY (Nieść), AC (noszenie pomocnicze), P (parzystość) i OV(przelewowy). Bity RS0 i RS1 służą do zmiany rejestrów bankowych. Poniższy rysunek przedstawia rejestr słów statusu programu.

Rejestr PSW zawiera bity stanu, które odzwierciedlają bieżący stan CPU.

CY CA F0 RS1 RS0 OV - P.

CY PSW.7 Carry Flag
AC PSW.6 Pomocnicza flaga przenoszenia
F0 PSW.5 Flaga 0 dostępna dla użytkownika do celów ogólnych.
RS1 PSW.4 Register Bank selector bit 1
RS0 PSW.3 Register Bank selector bit 0
OV PSW.2 Flaga przepełnienia
- PSW.1 Definiowana przez użytkownika FLAGA
P. PSW.0 FLAGA parzystości. Ustawiane / kasowane sprzętowo podczas cyklu instrukcji w celu wskazania parzystej / nieparzystej liczby 1 bitu w akumulatorze.

Możemy wybrać odpowiedni bit banku rejestru za pomocą bitów RS0 i RS1.

RS1 RS2 Zarejestruj Bank Adres
0 0 0 00H-07H
0 1 1 08H-0FH
1 0 2 10H-17H
1 1 3 18H-1FH
  • CY, the carry flag- Ta flaga przeniesienia jest ustawiana (1) za każdym razem, gdy jest przeprowadzane z bitu D7. Ma to wpływ po 8-bitowej operacji dodawania lub odejmowania. Można go również zresetować bezpośrednio do 1 lub 0 za pomocą instrukcji, takich jak „SETB C” i „CLR C”, gdzie „SETB” oznacza przeniesienie ustawionego bitu, a „CLR” oznacza wyraźne przenoszenie.

  • AC, auxiliary carry flag- Jeżeli występuje przeniesienie z D3 i D4 podczas operacji ADD lub SUB, ustawiany jest bit AC; w przeciwnym razie jest wyczyszczona. Służy do wykonywania arytmetyki dziesiętnej kodowanej binarnie.

  • P, the parity flag- Flaga parzystości reprezentuje liczbę jedynek tylko w rejestrze akumulatora. Jeśli rejestr A zawiera nieparzystą liczbę jedynek, to P = 1; a dla parzystej liczby jedynek P = 0.

  • OV, the overflow flag- Ta flaga jest ustawiana za każdym razem, gdy wynik operacji na liczbach ze znakiem jest zbyt duży, co powoduje przepełnienie najbardziej znaczącego bitu do bitu znaku. Służy tylko do wykrywania błędów w podpisanych operacjach arytmetycznych.

Przykład

Pokaż status flag CY, AC i P po dodaniu 9CH i 64H w poniższej instrukcji.

MOV A, nr 9CH

DODAJ 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