7 Instrukcje skoków i wywoJag podprogramów 71
Przed omówieniem przedstawionych grup rozkazów wyjaśnienia wymaga pojęcie 8 bitowego względnago adresu skoków., przesunięcia rei. W rozkazach skoków względnych adres skoku obliczany jest przez mikrokontroler na bieżąco po wczytaniu wszystkich bajtów instrukcji. Licznik rozkazów (PO wskazuje więc adres pierwszego bajtu następnej instrukcji występującej po realizowanej instrukcji skoku. Do takiej wartości licznika rozkazów (PO dodawane jest przesunięcie rei. Ponieważ licznik rozkazów (PO mikrokontrolera liczy 16 bitów, a przesunięcie rei tylko 8 bitów, dlatego do adresu zawartego w liczniku rozkazów (PO dodawane jest znakowe rozszerzenie adresu przesunięcia rei i samo przesunięcie rei (łącznic 16 bitów). Należy przy tym pamiętać, że adres przesunięcia rei jest 8 bitową liczbą całkowitą ze znakiem, tzn. zawartą w zakresie -128..+127:
• jeśli przesunięcie rei jest liczbą dodatnią to rozszerzeniem znakowym jest bajt zerowy,
• jeśli przesunięcie rei jest liczbą ujemną to znakowym rozszerzeniem jest bajt równy OFFH.
Przykładowo jeśli stan licznika rozkazów (PO po pobraniu instrukcji skoku względnego jest równy:
PC - 136AH
i przesunięcie rei - 0..+127, np rei =* 12 » OCH, to
PC - PC + rei - 13 6AH + 00 OCH - 1376H Oznacza to wykonanie skoku do adresu 1376H.-
Jeśli przy tym samym stanie licznika rozkazów (PO przesunięcie rei jest ujemne, tzn. rei » -128..0, np. rei = -7 » 0F9H:
PC = PC + rei = 13 6AH + OFF F9H - 1363H to skok nastąpi do adresu 1363H.
Taki sposób deklaracji przesunięcia rei umożliwia wykonywanie skoków względnych 0 -128 komórek poniżej instrukcji skoku względnego lub o 127 komórek powyżej tej instrukcji.
Lista instrukcji rodziny mikroprocesorów MCS51 mimo braku znacznika zera zawiera instrukcje testujące zerową zawartość akumulatora, dowolnego rejestru, zawartość komórki wewnętrznej pamięci RAM, bitu przeniesienia (Q lub wybranego bitu komórki wewnętrznej pamięci RAM adresowanej bitowa Na przykład N-krotne powtórzenie fragmentu programu można wykonać w następujący sposób:
MOV R7,#N ;R7 c= N, R7 jest licznikiem Ń-powtórzeń
;wybranego fragmentu programu
Pla: ;N-krotnie powtarzany fragment programu
------ .początek fragmentu programu
;koniec fragmentu programu
DJNZ R7,Pla ;R7 c= R7 -1. jeśli R7 * 0 to skok do adresu Pla
Mjkrokonuoler 8<XC)51 - oroaramowanie
Opis działania:
Wymiana 8-bitowych argumentów między:
• akumulatorem (A) i rejestrami Rn (Rn=R0..R7), komórkami wewnętrznej pamięć RAM adresowanymi bezpośrednio (adr) lub pośrednio (©Ri, Ri»R0, Rl) uraz argumentem będącym drugim bajtem instrukcji (dana),
• rejestrami Rn (Rn»R0..R7) i akumulatorem (A), komórkami wewnętrznej pamięć RAM adresowanymi bezpośrednio (adr) oraz argumentem będącym drugim bajtem instrukcji
• komórką wewnętrznej pamięć RAM adresowaną bezpośrednio (adr) i akumulatorem (A), rejestrami Rn (Rn«R0..R7), komórkami wewnętrznej pamięa RAM adresowanymi bezpośrednio (adrl) lub pośrednio (@Ri, Ri-RO, Rl) oraz argumentem będącym trzedm bajtem instrukcji (dana)
• komófką wewnętrznej pamięć RAM adresowaną pośrednio (@Ri, Ri=R0, KI) i akumulatorem (A), komórkami wewnętrznej pamięć RAM adresowanymi pośrednio (adr) oraz argumentem będącym drugim bajtem instrukcji (dana)
Instrukcja MOV DPTR,#dana_16 jest jedyną instrukcją przesyłania 16-bitowych argumentów.
Jedynie znacznik parzystość P jest zmieniany w trakde wykonywania instrukqi
MOV; A,<bajt>.
Zabroniona jest składnia instrukcji MOV A.ACC.
Wpisanie do akumulatora wartość 5DH:
Mov_A_Dana:
MOV A,#SDH ;Ac= 5DH
I
lub
MOV 0E0H,#5DK ’ ;(0E0H) c= 5DH.
; adres CHOH jest adresem akumulatora ; w obszarze rejestrów specjalnych (SFR)
Przesianie zawartość akumulatora do portu PI:
Mov,Pl: | |||
MÓV lub |
n,A |
;(Pl)c=A, |
adresowanie bezpośrednie |
MOV |
80H,A |
;(80H)<=A. |
adres 80H jest adresem portu Pl w obszarze rejestrów specjalnych (SFK) |
Mikrokontroler 80(051 - programowanie