12

12



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


Wyszukiwarka

Podobne podstrony:
10 7 Instrukcje skoków i wywołań podprogramów 83 CALL adr    CALL Uncondilional Dzia
16 7 Instrukcje skoków i wywołań podprogramów 77 Przykład 2: Lcd On: Dalej: Jeśli do wyjścia portu
10 7 Instrukcje skoków i wywołań podprogramów 73 AJMP Procedura_2 ;skok do Procedury 2 AJMP
12 7 Instrukcje skokpw i vywolan podprogramów 81 Adresowanie Mnemonik:    Struktura
14 7 Instrukcje skokow i wywołań podprogramów 79 CJNE argument_l,axgument_2,adres Compare and Jump
18 7 Instrukcje skoków i wywołań podprogramów 85 •    wpisanie pobranego adresu do l
14 7 Instrukcje skokow i wywołań podprogramów 79 CJNE argument_l.argumenl_2,adres Compaie and Jump
16 7 Instrukcje skoków i wywołań podprogramów 77 Przykład 2: Lcd .On: Dalej: Jeśli do wyjścia portu
10 73 7 Instrukcje skoków i wywołań podprogramów AJMP Procedura_2 ;skok do Procedury 2 AJMP
12 7 Insnukcte skokpw i wywołań podprogramów 81 7 Insnukcte skokpw i wywołań podprogramów
18 7 łnsinjkgc skoków i wywołań podprogramów 75 7 łnsinjkgc skoków i wywołań podprogramów 75 JMP
12 3. Instrukcje modyfikacji bitów 91 Przykład: Ustawienie znacznika przeniesienia (C> przy

więcej podobnych podstron