2. Struktura pamięci mikrokontrolera 21
2. Struktura pamięci mikrokontrolera 21
MO V_ Blok _XRAM_Dcc MÓV P2.M3H
MOV R0,#7FH
MOV DPTK.W3DFH MOV R7,#12S
Skok:
MOVX A,®R0 MOVX @DPTR,A DEC RO DEC DPL DJNZ R7,Skok
1*2 <= 43H, bardziej znaczący bajt adresu, adres segmentu (strony)
RO c= 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
R0<=R0-1, • przygotowanie do przesuwania DPL <= DPL -1, kolejnego bajtu R7 c= 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ęci przez wskaźnikowy rejestr danych (DITR) oraz stalą wartość adresu w bardziej znaczącej części rejestru DPTR, rejestrze DPH, zmniejszanie wartości rejestru DITR zrealizowano przez dekrementację tylko rejestru DPL
Położenie przesuwanego bloku danych
Nowe
położenie
bloku
danych
adres 2
adres 1
Li |
Położenie |
przesuwanego | |
bloku | |
danych |
adres 1
adres 2
Nowe
położenie
bloku
danych
adres 1 < adres 2
adres 1 > adres 2
a) przesuwanie od końca bloku b) przesuwanie od początku bloku
Rys. 2-12 Przesuwanie bloku danych w zewnętrznej pamięci 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_Inc.
Mikrokontroler 80(C)5I • 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,!
AJMP Proc_2 Proc_l:
AJMP Dalej
Proc_2:
Dalej:
;adres względny musi być zawarty ; w przedziale-128..+127
.procedura Proc l
;ominięcie procedury Proc 2 po
; zakończeniu procedury Proc.l
.procedura Proc_2
;dalsza część programu
Mikrokontroler 80(C)51 - programowanie