1. Podaj przykład adresowania bitowego na przykładzie bitu 2 akumulatora:
CLR ACC.2 - zerowanie
SETB ACC.2 - ustawianie
MOV ACC.2,P1.7 - kopiowanie
CPL ACC.2 - negowanie
2. Stosując operację maskowania na rejestrze PSW zmień bank 1 na bank 2
ANL PSW,#11110111B
ORL PSW,#00010000B
3. Podaj przykład odwołań do pamięci programu oraz zewnętrznej pamięci danych
MOVC A,PC
MOVX A,DPTR
4. Napisz dwie przykładowe pętle licznikowe opierające się na rozkazach DJNZ oraz CJNE
MOV R2,#10 LOOP: NOP DJNZ R2,LOOP ==> |
MOV R2,#10 LOOP: NOP INC R2 CJNE R2,#20,LOOP |
5. Napisz procedurę zamiany liczby zapisanej w kodzie BCD na kod U2. Wykorzystaj stos pamięci. Przyjmij przekazywanie danych poprzez rejestry R6 (BCD) i R7 (U2):
BCD EQU R6 U2 EQU R7 BCD_U2: MOV A,BCD ANL A,#11110000B SWAP A MOV B,#10 MUL A,B PUSH A MOV A,BCD ANL A,#00001111B MOV U2,A POP A ADD A,U2 MOV U2,A RET ==> |
BCD EQU R6 U2 EQU R7 BCD_U2: MOV A,BCD ANL A,#11110000B SWAP A MOV B,#10 DIV A,B PUSH ACC MOV A,BCD ANL A,#00001111B MOV B,A POP ACC ADD A,B CPL A ADD A,#1 MOV U2,A RET |
6. Na przykładzie obsługi Timera 1 pracującego w trybie 1, odmierzającego czas 50ms napisz stosowne podprogramy i procedurę obsługi przerwania. Wskaż miejsce obu procedur w kodzie programu.
LJMP START ORG 1BH MOV TL1,#0 MOV TL1,#76 CPL P1.7 RETI ORG 100H START: LCALL CONF LCALL ==> |
STRAT_TIMERA SJMP $ CONF: MOV TMOD,#00010000B MOV TL1,#0 MOV TH1,#76 SETB EA SETB ET1 RET START_TIMERA: SETB TR1 RET |
1. Podaj przykład selektywnego ustawiania, negowania i zerowania bitów 0,2,3,6 w porcie P1.
ORL P1,#01001101B - selektywne ustawianie
XRL P1,#010011001B - selektywne negowanie
ANL P1,#10110010B - selektywne zerowanie
2. Podaj przykład pośredniego zapisu i odczytu pemięci wewnętrznej danych.
MOV R0,#21H
MOV ACC,@R0 - odczyt komórki 21H
MOV @R0,#0FFH - zapis do komórki 21H
3. Stosując adresowanie bitowe skopiuj bit 7 portu P! do bitu 2 rejestru o adresie 20H
MOV C,P1.7
MOV 22H,C
4. Podaj stan rejestrów IE i IP, jeżeli: uaktywniamy przerwania od INT1, T0 i ES. ES ma najwyższy priorytet.
IE = 10010110B
IP = 00010000B
5. Napisz procedurę zamiany zmiennej BIN (30H) w kod U2 (31H) dla liczb z zakresu 0 - 30H. W tym celu wykonaj porównanie arytmetyczne.
BIN EQU 30H
U2 EQU 31H
BIN_U2:
PUSH ACC
CJNE BIN,#30H,DALEJ
DALEJ:
JNC PRZEPISZ; gdy C ustawiony, to BIN < #30H
MOV A,BIN
CPL A
INC A
SJMP KONIEC
PRZEPISZ:
MOV A,BIN
KONIEC:
MOV U2,A
6. Stosując pętlę programową (rozkaz DJNZ) oraz indeksując rejestr R1 poprzez adresowanie pośrednie zaadresuj co drugą komórkę pamięci od adresu 30H do adresu 40H. Do komórek pamięci wpisz ich adresy.
MOV R1,30H
MOV A,#9; będziemy adresować 3-tą komórkę
LOOP:
MOV @R1,R1
INC R1
INC R1
DJNZ A,LOOP