Advertisement
Guest User

Untitled

a guest
May 23rd, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.81 KB | None | 0 0
  1. $NOMOD51 ; Brak definicji niektórych rejestrów SFR mikrokontrolera 8051
  2. $include(reg517.inc) ; Dolaczenie pliku definicji rejestrów mikrokontrolera 80C537
  3. ORG 0 ; Nastepny rozkaz zostanie umieszczony pod adresem 0x0000H
  4. MAIN: ; Glowna petla programu
  5. CALL READ_KBD ; Wywolanie procedury czytajacej z klawiatury
  6. CPL A ; Zanegowanie bitów w akumulatorze
  7. MOV P1, A ; Przeslanie wartosci z akumulatora do rejestru portu P1
  8. SJMP MAIN ; Skok do petli MAIN - zapobiega wejsciu do procedur
  9. ;----------------------------------------------------------------------------------------------
  10. ; Czytanie wcisnietego klawisza z klawiatury
  11. ; Jesli klawisz wcisniety - bit C ustawiony i nr klawisza w A
  12. ;----------------------------------------------------------------------------------------------
  13. READ_KBD:
  14. MOV R1, #01111111B ; Przeslanie maski wierszy do R1
  15. MOV R3, #0 ; Przeslanie narzutu wiersza do R3
  16. PETLA_RK:
  17. ANL P5, #00001111B ; Logiczne AND zerujace starsze bity rejestru portu P5
  18. MOV A, R1 ; Przeslanie maski wierszy do akumulatora
  19. ANL A, #11110000B ; Logiczne AND przygotowujace starsze bity maski wierszy
  20. ORL P5, A ; Logiczne OR sumujace bity rejestru portu P5 i akumulatora
  21. CALL GET_KEY_CODE ; Wywolanie procedury pobierajacej nr klawisza
  22. JC KONIEC_RK ; Jesli bit C ustawiony - skok do KONIEC_RK
  23. MOV A, R1 ; Przeslanie maski wiersza do akumulatora
  24. RR A ; Przesuniecie zawartosci akumulatora w prawo
  25. JNB ACC.3, KONIEC_RK ; Jesli bit 3. nie ustawiony - skok do KONIEC_RK
  26. MOV R1, A ; Przeslanie zawartosci akumulatora do R1
  27. MOV A, R3 ; Przeslanie narzutu wiersza do akumulatora
  28. ADD A, #4 ; Zwiekszenie narzutu wiersza o 4
  29. MOV R3, A ; Przeslanie narzutu wiersza do R3
  30. SJMP PETLA_RK ; Skok do petli czytania klawisza - PETLA_RK
  31. KONIEC_RK:
  32. MOV A, R0 ; Przeslanie wartosci z R0 do akumulatora
  33. ADD A, R3 ; Dodanie narzutu wiersza do akumulatora
  34. RET ; Wyjscie z procedury
  35. ;----------------------------------------------------------------------------------------------
  36. ; Pobranie nr klawisza wcisnietego w wierszu klawiatury
  37. ; Pobrany nr klawisza - R0
  38. ;----------------------------------------------------------------------------------------------
  39. GET_KEY_CODE:
  40. CLR C ; Wyzerowanie bitu przeniesienia(C)
  41. MOV R0, #0 ; Przeslanie wartosci 0 do licznika w R0
  42. MOV A, P7 ; Przeslanie zawartosci rejestru portu P7 do akumulatora
  43. CPL A ; Zanegowanie bitów w akumulatorze
  44. ANL A, #00001111B ; Logiczne AND zerujace starsze bity akumulatora
  45. JZ KONIEC_GKC ; Jesli akumulator = 0 - skok do KONIEC_GKC
  46. PETLA_GKC:
  47. INC R0 ; Zwiekszenie licznika w R0
  48. JB ACC.3, KONIEC_GKC_C ; Jesli bit 3. akumulatora ustawiony - skok do KONIEC_GKC_C
  49. RL A ; Przesuniecie zwartosci akumulatora w lewo
  50. SJMP PETLA_GKC ; Skok do petli pobierania nr klawisza - PETLA_GKC
  51. KONIEC_GKC_C:
  52. SETB C ; Ustawienie bitu przeniesienia(C)
  53. KONIEC_GKC:
  54. RET ; Wyjscie z procedury
  55.  
  56. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement