7 Instrukcje skoków i wywołań podprogramów 83
CALL adr CALL Uncondilional
Działanie: PC <= PC +- 2, SPc=SP+l
(SP) <= PC7..0
SP c= SP +1 (SP) <= PC15..8. -
PC10„Q «= adr_l1
PC c= PC + 3, SPcrSP +1 (SP) <= PC7..0 SP c= SP ♦ 1 (SP) <= PC] 5.8
PC15 0C=adM6
Cykle Znacz-
maszynowe. niki:
Adresowanie Mnemonik: Struktura bajtów: 1 2
2. Struktura pamięci mikiokontćolcra_________
:o
-V < “
INC RO 'i ;RU c= RU + 1, przygotowanie do przesuwania
INC DPTR ;D]TR <= DPTR + 1, kolejnego bajtu
DJNZ R7,Skok ;R7 ę ft7-1, jeśli R7 2 0 to skok do adresu Skok.
;powtórzcnie przesunięcia kolejnego bajtu
4EE7H . 4E68H
437FH . 4300H
obszar adresowany wskaźnikowym rejestrem danych (OPTR)
przesuwany blok pamięci liczy 128 bajtów
obszar adresowany rejestrem RO i portem P2
nowe położenie przesuwanego bloku danych
przesuwany blok danych
Rys. 2-11
Zewnętrzna pamięć RAM adresowana jest następująco:
• port P2 i rejestr RO adresują kolejne przesuwane bajty,
• wskaźnikowy rejestT danych (DPTR) adresuje obszar pamięci, do którego przesuwane są kolejne bajty.
• rejestr R7 jest licznikiem przesuwanych bajtów.
W podanym przykładzie, ze względu na użycie do zliczania przesuwanych bajtów 8-bitowcgo rejestru R7, możliwe jest tylko przesunięcie bloku pamięci o wielkości nie przekraczającej 2^ = 256 bajtów. Przyjęty sposób adresowania zakłada, że obszary obu bloków pamięci są rozłączne. Jeśli warunek ten nie jest spełniony (rysunek 2-12), to algorytm przesuwania musi uwzględniać fakt wspólnej części obu bloków:
• jeśli wystąpi sytuacja jak na rysunku 2-12 a. to przesuwanie kolejnych bajtów rozpoczyna się od końca przesuwanego bloku. Przyjęcie odwrotnej kolejności, takiej jaka miała miejsce w programie MOV^BIok_XRAMJnc powoduje zapisywanie początkowych wartości przesuwanego bloku w jego końcowej części, a tym samym niszczenie końcowych bajtów przesuwanego bloku. Przykładowy program przesuwania bloku pamięci o adresie początkowym 4300H liczącego 128 bajtów (adres końca obszaru 437FH) do obszaru o adresie początkowym 4360H (adres końcowy 4360H+7FH=43DFH) przedstawiono poniżej:
Mikrokontroler 80(C)5l - programowanie
natychmiastowe: ACALL
natychmiastowe: LCALL
2
2
Działanie
Zawartość licznika rozkazów PC wpisywana jest do stosu adresowanego wskaźnikiem stosu (SP - w pierwszej kolejności wpisywana jest mniej znacząca część licznika rozkazów PC - biły 1X17 (j) wskaźnik st<»su zwiększany jest o dwa. Instrukcje wywołań podprogramów powodują wpisanie do licznika rozkazów (PC) adresu początku wywoływanego podprogramu. W zależności od typu rozkazu adresem jest
11-bitowy adres w rozkazie ACALL adr II; w 16-bitowym liczniku rozkazów PC modyfikowanych jest tylko 11 najmniej znaczących bitów A]q..Aq, pięć najbardziej znaczących bitów nie jest zmienianych A^-.A]], skok wykonywany jest
Mikrokontroler 80(C)51 - programowanie