83
/ msinjKcje skok |
ow 1 wywołań poaprogramow ___ | |
CALL adr |
CALL Unconditional | |
Działanie |
PCc= PC + 2, SPc=SP+l (SP) <= PC7..0 SPc=SP + 1 (SP) <= PC15..8 - rcio„Q^adr-n PC <= PC + 3, SP c= SP +1 (SP) c= PC7..0 SPc=SP*l (SP)c=PCi5..8 | |
rc15..o<=adr-16 | ||
Adrcsoivanie |
Mnemonik: Struktura bajtów: |
Cykle Znacz-maszynowe niki: |
natychmiastowe: ACALL
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 - bity 1X17 o) wskaźnik stosu zwiększany jest o dwa. Instrukcje wywołań podprogramów powodują wpisanie do licznika rozkazów (rC) 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 I*C modyfikowanych jest tylko 11 najmniej znaczących bitów Ajq--aO pięć najbardziej znaczących bitów nie jest zmienianych A^-Ajj, skok wykonywany jest
Mikrokontroler 80(C)51 - programowanie
;RU c= RU + 1, przygotowanie do przesuwania DPTR + 1, kolejnego bajtu \ ;R7 ę ft7 -1, jeśli R7 * 0 to skok do adresu Skok. .powtórzenie przesunięcia kolejnego bajtu
INC KO INC DPTR DJNZ ltf,Skok
4EE7H _ 4E68H
437FH . 4300H
obszar adresowany wskaźnikowym rejestrem danych (OPTR)
przesuwany blok pamięci Piczy 128 bajtów
obszar adresowany rejestrem RO i portem P2
nowe położenie przesuwanego bloku danych
przesuwany blok danych
Rys. 2-11 Przesuwanie bloku danych w zewnętrz: _ : o
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żyde do zliczania przesuwanych bajtów 8-biłowcgo rejestru R7, możliwe jest tylko przesunięde bloku pamięd o wielkośd nie przekraczającej 2^ = 256 bajtów. Przyjęty sposób adresowania zakłada, że obszary obu bloków pamięd są rozłączne. Jeśli warunek ten nie jest spełniony (rysunek 2-12), to algorytm przesuwania musi uwzględniać fakt wspólnej częśd 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ęde odwrotnej kolejność. takiq jaka miała miejsce w programie MOV_Blok_XRAMJnc powoduje zapisywanie początkowych wartośd przesuwanego bloku w jego końcowej częśd. a tym samym niszczenie końcowych bajtów przesuwanego bloku. Przykładowy program przesuwania bloku pamięd 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=43DPH) przedstawiono poniżej:
Mikrokontroler 80(C)5l - programowanie
natvchmiastowe:
LCALL
2