Struktura pamięci mikrokontrolera 21
Struktura pamięci mikrokontrolera 21
MOV_Blok_XRAM_Dec: MOV P2.M3H
MOV R0,#7FH
MOV DPTR.#43DFH MOV R7,#128
Skok:
MOVX A.@R0 MOVX @DPTR,A DEC RO DEC DPL DJNZ R7.Skok
P2 <=. 43H, bardziej znaczący baje adresu, adres segmentu (strony)
RO <= 7FH, mniej znaczący bajt adresu,
adres w obrębie segmentu (strony) DPTR <= 43DFH, adres końca nowego obszaru R7 <= 128, R7 jest licznikiem przesuwanych bajtów
;A c= (256*1*2 + R0)xDATA ;(DPTR)XdaTA <= A
;R0c=R0-l, • przygotowanie do przesuwania ;DPL c= DPL -1, kolejnego bajtu ;R7 <= R7 -1, jeśli R7 * 0 to skok do adresu Skok, .powtórzenie przesunięcia kolejnego bajtu
W liście instrukcji mikroprocesora brak instrukcji DEC DPTR. Wykorzystując fakt adresowania nowego obszaru pamięd przez wskaźnikowy rejestr danych (DITR) oraz stalą wartość adresu w bardziej znaczącej części rejestru DPTR, rejestrze DPH, zmniejszanie wartości rejestru DPTR zrealizowano przez dekrcmentację tylko rejestru DPL
adres 1
adres 2
l-~,'! | ||||
Nowe |
Położenie | |||
położenie |
przesuwanego | |||
bloku |
) |
bloku | ||
danych |
_ z/ |
danych | ||
1 Położenie |
adres_1 | |
przesuwanego bloku danych
adres 2
położenie
bloku
danych
adres_1 < adres_2 a) przesuwanie od końca bloku
adres_1 > adres_2 b) przesuwanie od początku bloku
Rys. 2-12 Przesuwanie bloku danych w zewnętrznej pamięd RAM
• jeśli wystąpi sytuacja jak an rysunku 2-12 b, to przesuwanie kolejnych bajtów rozpoczyna się od początku przesuwanego bloku, tak samo jak w programie MOV_Blok_XRAM_lnc.
Mikrokontroler 80(C)$ł • programowanie
ponieważ skok wykonywany jest w ramach 2 kllajtowego bloku pamięci kodu programu. Problem znika jeśli zastosuje się instrukcję skoku dalekiego LJMP adr_16.
Przykład 2:
W instrukcjach skoków względnych, warunkowych lub bezwarunkowych, podawane przesunięcie rei ma ograniczony zakres zmian -128..+127. W wielu przypadkach zakres ten jest niewystarczający. Jeśli testowana jest zawartość rejestru R6 i w zależności od jego wartości ma zostać zrealizowana procedura:
-* Proc_l jeśli zawartość rejestru R6 - 0,
-* Proc_2 jeśli zawartość rejestru R6 * 0 oraz długości obu procedur są następujące:
-* długość procedury Proc_1 wynosi 129 - 81H bajtów, przekracza 127 bajtów,
-> długość procedury Proc_2 wynosi 130 = 82H bajtów, przekracza 127 bajtów
to możliwe jest następujące rozwiązanie problemu:
MOV A,R6
JZ Proc _1 .adres względny musi być zawarty
; w przedziale-128..+127
AJMP Proc_2 Proc_l:
—...................- .procedura Proc_l
AJMP Dalej ;ominięcie procedury Proc 2 po
; zakończeniu procedury Proc l
Proc_2:
.......................... .procedura Proc.2
Dalej:
.......................... ;dalsza część programu
Mikrokontroler 80(C)51 - programowanie