Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $NOMOD51 ; Brak definicji niektórych rejestrów SFR mikrokontrolera 8051
- $include(reg517.inc) ; Dolaczenie pliku definicji rejestrów mikrokontrolera 80C537
- ORG 0 ; Nastepny rozkaz zostanie umieszczony pod adresem 0x0000H
- MAIN: ; Glowna petla programu
- CALL READ_KBD ; Wywolanie procedury czytajacej z klawiatury
- CPL A ; Zanegowanie bitów w akumulatorze
- MOV P1, A ; Przeslanie wartosci z akumulatora do rejestru portu P1
- SJMP MAIN ; Skok do petli MAIN - zapobiega wejsciu do procedur
- ;----------------------------------------------------------------------------------------------
- ; Czytanie wcisnietego klawisza z klawiatury
- ; Jesli klawisz wcisniety - bit C ustawiony i nr klawisza w A
- ;----------------------------------------------------------------------------------------------
- READ_KBD:
- MOV R1, #01111111B ; Przeslanie maski wierszy do R1
- MOV R3, #0 ; Przeslanie narzutu wiersza do R3
- PETLA_RK:
- ANL P5, #00001111B ; Logiczne AND zerujace starsze bity rejestru portu P5
- MOV A, R1 ; Przeslanie maski wierszy do akumulatora
- ANL A, #11110000B ; Logiczne AND przygotowujace starsze bity maski wierszy
- ORL P5, A ; Logiczne OR sumujace bity rejestru portu P5 i akumulatora
- CALL GET_KEY_CODE ; Wywolanie procedury pobierajacej nr klawisza
- JC KONIEC_RK ; Jesli bit C ustawiony - skok do KONIEC_RK
- MOV A, R1 ; Przeslanie maski wiersza do akumulatora
- RR A ; Przesuniecie zawartosci akumulatora w prawo
- JNB ACC.3, KONIEC_RK ; Jesli bit 3. nie ustawiony - skok do KONIEC_RK
- MOV R1, A ; Przeslanie zawartosci akumulatora do R1
- MOV A, R3 ; Przeslanie narzutu wiersza do akumulatora
- ADD A, #4 ; Zwiekszenie narzutu wiersza o 4
- MOV R3, A ; Przeslanie narzutu wiersza do R3
- SJMP PETLA_RK ; Skok do petli czytania klawisza - PETLA_RK
- KONIEC_RK:
- MOV A, R0 ; Przeslanie wartosci z R0 do akumulatora
- ADD A, R3 ; Dodanie narzutu wiersza do akumulatora
- RET ; Wyjscie z procedury
- ;----------------------------------------------------------------------------------------------
- ; Pobranie nr klawisza wcisnietego w wierszu klawiatury
- ; Pobrany nr klawisza - R0
- ;----------------------------------------------------------------------------------------------
- GET_KEY_CODE:
- CLR C ; Wyzerowanie bitu przeniesienia(C)
- MOV R0, #0 ; Przeslanie wartosci 0 do licznika w R0
- MOV A, P7 ; Przeslanie zawartosci rejestru portu P7 do akumulatora
- CPL A ; Zanegowanie bitów w akumulatorze
- ANL A, #00001111B ; Logiczne AND zerujace starsze bity akumulatora
- JZ KONIEC_GKC ; Jesli akumulator = 0 - skok do KONIEC_GKC
- PETLA_GKC:
- INC R0 ; Zwiekszenie licznika w R0
- JB ACC.3, KONIEC_GKC_C ; Jesli bit 3. akumulatora ustawiony - skok do KONIEC_GKC_C
- RL A ; Przesuniecie zwartosci akumulatora w lewo
- SJMP PETLA_GKC ; Skok do petli pobierania nr klawisza - PETLA_GKC
- KONIEC_GKC_C:
- SETB C ; Ustawienie bitu przeniesienia(C)
- KONIEC_GKC:
- RET ; Wyjscie z procedury
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement