54 6. RAM czy SFR ?
Z instrukcjami bitowymi związane są również instrukcje umożliwiające rozgałęzienia programu. Wynika to ze szczególnej roli jaką pełnią bity rejestru statusowego PSW i bity w ogóle. Rozgałęzienia programu są efektem zaistnienia pewnych warunków, dlatego instrukcje realizujące te funkcje nazwane zostały skokami warunkowymi. W skład instrukcji skoków warunkowych wchodzą następujące rozkazy:
rozkazy 2-bajtowe:
JZ |
rei |
;jeśli A=0 to skok do adresu = PC + 2 + rei |
JNZ |
rei |
;jeśli A*0 to skok do adresu = PC + 2 + rei |
JC |
rei |
;jeśli C=1 to skok do adresu = PC + 2 + rei |
JNC |
rei |
;jeśli C=0 to skok do adresu - PC + 2 + rei |
rozkazy 3-bajtowe: | ||
JB |
bit,rel |
;jeśli bit=l to skok do adresu PC + 3 + rei |
JNB |
bit,rel |
;jeśli bit=0 to skok do adresu = PC + 3 + rei |
JBC |
bit,rel |
;jeśli bit=l to bit 4- 0 (zerowanie bitu) oraz |
skok do adresu = PC + 3 + rei
We wszystkich podanych rozkazach licznik rozkazów PC zawiera adres wykonywanej instrukcji. Ponieważ każdy z rozkazów jest rozkazem 2 lub 3-bajtowym, dlatego do wartości licznika rozkazów PC dodawane jest 2 lub 3.
Wszystkie rozkazy testujące bity (z wyjątkiem rozkazu JBC) nie zmieniają wartości testowanego bitu. Instrukcja JBC bit,rel zeruje wskazany bit jeśli bit przed wykonaniem rozkazu miał wartość 1 i wykonuje skok do podanego adresu.
Konstruktorzy mikrokontrolera 8051 przewidzieli bitowy i bajtowy przepływ danych.
Jedyną operacją wykonywana na słowie, zmiennej 2-bajtowej, jest 3-baj-towy rozkaz:
MOV DPTR,#dana_16
gdzie dana_16 jest zmienną 2-bajtową.
Nawet 16-bitowe rejestry wewnętrznych układów, takich jak rejestry liczników i rejestry sterujące pracą liczników, nie są dostępne słowowo. Dlatego wpisywanie do nich 16-bitowych wartości musi odbywać się dwu-etapową Najpierw do części mniej znaczącej, a później do części bardziej znaczącej (lub odwrotnie). Przykładowo wpis wartości początkowej 4AC6h do licznika Tl
lub wykorzystując właściwości asemblera (polecenia asemblera):
Polecenia High i Low mają za zadanie wyodrębnić ze zmiennej 2-bajtowej 4AC6h:
• Low - bajt mniej znaczący czyli wartość 0C6h,
• 1 iigh - bajt bardziej znaczący czyli wartość 4Ah.
1. Jakie są sposoby adresowania wewnętrznej pamięci RAM i rejestrów specjalnych SFR ?
2. Czy rejestry specjalne SFR trzeba dołączać do mikrokontrolera jak zewnętrzną pamięć danych ?
3. Jakie adresy przyporządkowane są rejestrom speqalnym SFR ?
4. Ile rejestrów posiada mikrokontroler 8051, a ile 8052 ?
5. Co to są banki rejestrów, jak je zmieniać i adresować ?
6. Podaj przykłady instrukcji, w których do adresowania drugiego argumentu posłużono się adresowaniem:
a) rejestrowym b) pośrednim c) bezpośrednim
d) natychmiastowym e) indeksowym
Podaj ograniczenia wynikające z sposobu adresowania.
7. Wyjaśnij jaka jest różnica między instrukcjami XCH, XCHD oraz SWAP.