46 6. RAM czy SFR ?
• wymiana typu XCH A,Rn zastąpiona trzema równoważnymi rozkazami ale z użyciem dodatkowego rejestru do przechowywania zmiennej, np. rejestru B:
MOV B,A ;B «- A, ochrona akumulatora A
MOV A,Rn ;A «- Rn
MOV Rn,B ;Rn B, czyli przesłanie akumulatora A
• rozkaz XCH A,@Ri można również zastąpić kombinacją trzech innych instrukcji, także z użyciem dodatkowego rejestru do przechowywania zmiennej, np. rejestru B
MOV |
B,A |
;B <- A, ochrona akumulatora A |
MOV |
A,@Ri |
;A <- (Ri) |
MOV |
@Ri,B |
;(Ri) <- B, czyli przesłanie akumulatora A |
Podobna |
w działaniu |
do instrukcji XCH A,@Ri jest instrukcja |
XCHD A,@Ri ale wzajemna wymiana dotyczy jedynie 4 mniej znaczących' bitów (eXCHange Digit) akumulatora A i komórki wewnętrznej pamięci RAM adresowanej rejestrem Ri (rejestr RO lub Rl). Instrukcja ta stosowana jest w operacjach z liczbami przedstawionymi w kodzie BCD. Graficznie działanie tej instrukcji ilustruje poniższy rysunek:
Przykłady zastąpienia instrukcji XCH i XCHD innymi instrukcjami dobitnie świadczą, że niezbędny jest pomocniczy wewnętrzny rejestr. Rejestr taki rzeczywiście istnieje w mikrokontrolerze ale nie jest dostępny dla programisty. Na rysunku 2-2 przedstawiającym schemat blokowy mikrokontrolera zaznaczone są dwa rejestry pomocnicze.
Cztery banki rejestrów RBO.. RB3 używane są zamiennie w różnych procedurach. Najczęściej roboczym bankiem jest bank RBO. Inne używane są w zależności od potrzeb, np: przy transmisji szeregowej bank RB1, wyświetlaniu danych na polu odczytowym - bank RB2, a obsługą przetwornika zajmują się rejestry w banku RB3.
Zmiana banku rejestrów jest najszybszym sposobem ochrony zawartości rejestrów przy wywołaniach podprogramów, a w szczególności w procedurach obsługi przerwań.
Jak już wcześniej stwierdzono, rejestry specjalne SFR są odbiciem wszystkich wewnętrznych układów mikrokontrolera. Konstruktorzy mikrokontrolera 8051 przewidzieli miejsce na 128 rejestrów specjalnych. Rejestrów adresowanych tylko bezpośrednio, o adresach od 80h do OFFh. W miarę upływu czasu, rozwoju nowych technologii i potrzeb użytkowników pojawiły się nowe mikrokontrolery ze zmienionymi lub całkiem nowymi układami wewnętrznymi. Każdy nowy element zmieniał tylko znaczenie kolejnych komórek rejestrów specjalnych. Z 21 rejestrów specjalnych w mikrokontrolerze 8051 do 42 w 80515/535. Lista rozkazów, sposoby adresowania pozostały niezmienione.
Adresy i symbole wszystkich rejestrów' specjalnych w mikrokontrolerach 8051, 8052 i 80515/535 pokazano na rysunku 6-4. Rejestry, których funkcje są zmienione lub całkowicie nowe rejestry zostały zacieniowane zgodnie z oznaczeniami pod rysunkiem.
Z rysunku 6-4 widać, że nie wszystkie rejestry są zagospodarowane, np. o adresach 0E1H..0EFH. Wolne rejestry nie mogą być jednak wykorzystane w programach jako dodatkowa komórki wewnętrznej pamięci RAM. Tylko niektóre z rejestrów mogą pełnić taką funkcję. O tym decyduje producent mikrokontrolera oraz programista. Analizując program wiadomo jakie jest wykorzystanie układów peryferyjnych, które mogą zmieniać w trakcie swojej pracy zawartość tych rejestrów. Dla przykładu rejestr SBUF związany z transmisją szeregową reprezentuje dwa niezależne rejestry. Jeden do zapisu (rejestr nadawanego znaku), a drugi do odczytu (rejestr odebranego znaku). Odczyt zawartości rejestru SBUF daje inną wartość niż wpisana.
Poniżej omówiono, łącznie z adresami, wybrane rejestry specjalne SFR mikrokontrolerów' rodziny '51. Oznaczenie rw-OOh sygnalizuje:
-► możliwość odczytu zawartości rejestru (read),
-> możliwość wpisu (write) innych wartości zgodnie z wymaganiami programu,
-» zawartość rejestru po sprzętowym zerowaniu mikrokontrolera, OOh.
Akumulator (ACC - Accumulator) - adres OEOh (rw-OOh).
Jest jednym z ważniejszych rejestrów' procesora, ponieważ większość rozkazów wykorzystuje ten rejestr. Oznaczany jest w mnemonikach instrukcji jako ACC (symboliczny adres komórki rejestru specjalnego) lub skróconym symbolem A (nazwa rejestru).