Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;----------------------------------------------------------------------------------------------
- ; Pobranie nr klawisza wciśniętego w wierszu klawiatury
- ; Pobrany nr klawisza - R0
- ;----------------------------------------------------------------------------------------------
- GET_KEY_CODE:
- CLR C ; Wyzerowanie bitu przeniesienia(C)
- MOV R0, #0 ; Przesłanie wartości 0 do licznika w R0
- MOV A, P7 ; Przesłanie zawartości rejestru portu P7 do akumulatora
- CPL A ; Zanegowanie bitów w akumulatorze
- ANL A, #00001111B ; Logiczne AND zerujące starsze bity akumulatora
- JZ KONIEC_GKC ; Jeśli akumulator = 0 - skok do KONIEC_GKC
- PETLA_GKC:
- INC R0 ; Zwiększenie licznika w R0
- JB ACC.3, KONIEC_GKC_C ; Jeśli bit 3. akumulatora ustawiony - skok do KONIEC_GKC_C
- RL A ; Przesunięcie zwartości akumulatora w lewo
- SJMP PETLA_GKC ; Skok do pętli pobierania nr klawisza - PETLA_GKC
- KONIEC_GKC_C:
- SETB C ; Ustawienie bitu przeniesienia(C)
- KONIEC_GKC:
- RET ; Wyjście z procedury
- $NOMOD51 ; Brak definicji niektórych rejestrów SFR mikrokontrolera 8051
- $include(reg517.inc) ; Dołączenie pliku definicji rejestrów mikrokontrolera 80C537
- ORG 0 ; Następny rozkaz zostanie umieszczony pod adresem 0x0000H
- MAIN: ; Głowna pętla programu
- CALL READ_KBD ; Wywołanie procedury czytającej z klawiatury
- CPL A ; Zanegowanie bitów w akumulatorze
- MOV P1, A ; Przesłanie wartości z akumulatora do rejestru portu P1
- SJMP MAIN ; Skok do pętli MAIN - zapobiega wejściu do procedur
- ;----------------------------------------------------------------------------------------------
- ; Czytanie wciśniętego klawisza z klawiatury
- ; Jeśli klawisz wciśnięty - bit C ustawiony i nr klawisza w A
- ;----------------------------------------------------------------------------------------------
- READ_KBD:
- MOV R1, #01111111B ; Przesłanie maski wierszy do R1
- MOV R3, #0 ; Przesłanie narzutu wiersza do R3
- 1
- PETLA_RK:
- ANL P5, #00001111B ; Logiczne AND zerujące starsze bity rejestru portu P5
- MOV A, R1 ; Przesłanie maski wierszy do akumulatora
- ANL A, #11110000B ; Logiczne AND przygotowujące starsze bity maski wierszy
- ORL P5, A ; Logiczne OR sumujące bity rejestru portu P5 i akumulatora
- CALL GET_KEY_CODE ; Wywołanie procedury pobierającej nr klawisza
- JC KONIEC_RK ; Jeśli bit C ustawiony - skok do KONIEC_RK
- MOV A, R1 ; Przesłanie maski wiersza do akumulatora
- RR A ; Przesuniecie zawartości akumulatora w prawo
- JNB ACC.3, KONIEC_RK ; Jeśli bit 3. nie ustawiony - skok do KONIEC_RK
- MOV R1, A ; Przesłanie zawartości akumulatora do R1
- MOV A, R3 ; Przesłanie narzutu wiersza do akumulatora
- ADD A, #4 ; Zwiększenie narzutu wiersza o 4
- MOV R3, A ; Przesłanie narzutu wiersza do R3
- SJMP PETLA_RK ; Skok do pętli czytania klawisza - PETLA_RK
- KONIEC_RK:
- MOV A, R0 ; Przesłanie wartości z R0 do akumulatora
- ADD A, R3 ; Dodanie narzutu wiersza do akumulatora
- RET ; Wyjście z procedury
- END
- ;----------------------------------------------------------------------------------------------
- ; Tutaj procedura z listingu 1.
- ;----------------------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement