Podstawy techniki mikroprocesorowej
Programowanie klawiatury
1. Zapalanie diód, z użyciem klawiatury
Ćwiczenie polegało na przyporządkowaniu każdemu klawiszowi innej pary świecących diod które zapalały się po wciśnięciu jednego z klawiszy klawiatury
P5 EQU 0F8H
P7 EQU 0DBH
LJMP START
ORG 100H
START:
MOV P5, #01111111B ; wysterowanie klawiatury
MOV R5, #4
PETLA1:
MOV A, P7 ;odczytujemy bity z portu klawiatury
CPL A ;negujemy
JZ PETLA2 ;jesli nie wcisniety skacz do petli 2
CPL A ;negujemy
XRL A, P5 ; exor sprawdzenie czy jakis klawisz wcisniety
CPL A ; negujemy
MOV P1,A; ;swiecimy diodami
PETLA2:
MOV A, P5 ;przeniesienie do akumulatora adresu wiersza
RR A ; przesuniecie bitowe
MOV P5, A ; przesylanie akumulatora do adresu wiersza
DJNZ R5,PETLA1 ;dekrementacja i jesli licznik wierszy jest rozny od 0 to skok
JMP START
NOP
NOP
NOP
JMP $
END START
2. Wyświetlanie kodu naturalnego binarnego poszczególnych klawiszy
Naszym zadaniem było nadanie nowego adresu 16 bitowego którego starszy bajt to #0x80 zaś młodszy to odpowiedni kod klawisza.
Kod poprzedniego programu wystarczy trochę zmodyfikować i dopisać przyporządkowanie każdemu klawiszowi inny rejestr. Całość wygląda tak:
P5 EQU 0F8H
P7 EQU 0DBH
LJMP START
ORG 100H
START:
MOV DPH,#0x80; znaczace bajty dla klawiatury
MOV DPL,#0x11; znajac kazdy adres przycisku przyporzadkowujemy mu nowy adres
MOV A,#0x11;
MOVX @DPTR,A; i skladamy go w 16 bitowy
; i tak przez wszytskie 16 klawiszy
MOV DPL,#21h;
MOV A,#2h;
MOVX @DPTR, A;
MOV DPL,#31h;
MOV A,#3h;
MOVX @DPTR,A;
MOV DPL,#12h;
MOV A,#4h;
MOVX @DPTR, A;
MOV DPL,#22h;
MOV A,#5h;
MOVX @DPTR, A;
MOV DPL,#32h;
MOV A,#6h;
MOVX @DPTR, A
MOV DPL,#13h;
MOV A, #7h;
MOVX @DPTR, A
MOV DPL,#23h;
MOV A,#8h;
MOVX @DPTR, A
MOV DPL,#32h;
MOV A, #9h;
MOVX @DPTR, A
MOV DPL,#34h;
MOV A, #0h;
MOVX @DPTR, A
MOV DPL,#41h;
MOV A,#10;
MOVX @DPTR, A
MOV DPL,#42h;
MOV A, #11;
MOVX @DPTR, A
MOV DPL,#43h;
MOV A,#12;
MOVX @DPTR,A
MOV DPL,#44h;
MOV A, #13;
MOVX @DPTR, A
MOV DPL,#34h;
MOV A,#14;
MOVX @DPTR, A
MOV DPL,#14h;
MOV A,#15;
MOVX @DPTR, A;
START:
MOV P5, #01111111B ; wysterowanie klawiatury
MOV R5, #4
PETLA1:
MOV A, P7 ;odczytujemy bity z portu klawiatury
CPL A ;negujemy
JZ PETLA2 ;jesli nie wcisniety skacz do petli 2
CPL A ;negujemy
XRL A, P5 ; exor sprawdzenie czy jakis klawisz wcisniety
CPL A ; negujemy
MOV DPL, A; ;mlodsza czesc do akumulatora
MOVX A, @DPTR; ;laczymy w 16bit
CPL A; ;negacja
MOV P1,A; ;swiecimy diodami
PETLA2:
MOV A, P5 ;przeniesienie do akumulatora adresu wiersza
RR A ; przesuniecie bitowe
MOV P5, A ; przesylanie akumulatora do adresu wiersza
DJNZ R5,PETLA1 ;dekrementacja i jesli licznik wierszy jest rozny od 0 to skok
JMP START
NOP
NOP
NOP
JMP $
END START
Wnioski:
Obsługa klawiatury polega na przyporządkowaniu jej odpowiedniego wiersza i odpowiedniej kolumny i sprawdzanie czy klawisz przez nas użyty. Instrukcja zapętla się dopóki klawisz nie zostanie wciśnięty. Wówczas mikroprocesor może odczytać adresy poszczególnych klawiszy a my możemy zadać mu odpowiednie operacje do wykonania. Aby ułatwić sobie prace dobrze jest przypisać każdemu klawiszowi adres który łatwo będzie zapamiętać. Uczyniliśmy tak w zadaniu drugim. Dzięki temu możemy ułożyć sobie w pamięci kolejne przyciski w odpowiadającej nam kolejności. Niestety zadania 3 w którym należało zapalać diody po zwolnieniu przycisku nie udało nam się wykonać.