Advertisement
Slaby_informatyk

Mirek

Nov 20th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.53 KB | None | 0 0
  1. .include "m32def.inc" ;dołączenie pliku z definicjami rejestrów
  2. .def Jeden = R16 ;przyporządkowanie rejestrowi R16 wartości Jeden
  3. .def Dwa = R17 ;przyporządkowanie rejestrowi R17 wartości Dwa
  4. ; REJESTRY OPOZNIENIA
  5. .def licznik1 = R18 ;przyporządkowanie rejestrowi R18 wartości licznik1
  6. .def licznik2 = R19 ;przyporządkowanie rejestrowi R19 wartości licznik2
  7. .def licznik3 = R20 ;przyporządkowanie rejestrowi R20 wartości licznik3
  8. .cseg ;segment pamięci programu
  9. .org 0x0000 ;podanie adresu początku programu - pamięć programu
  10. jmp Start ;skok do etykiety Start
  11. Start: ;etykieta Start
  12. ldi Dwa, HIGH(RAMEND) ;inicjacja 16 bitowego stosu , ładuj rejestr roboczy MSB adresu końca pamięci SRAM
  13. out SPH, Dwa ;inicjalizuj MSB wskaźnika stosu
  14. ldi Jeden, LOW(RAMEND) ;ładuj rejestr roboczy LSB adresu końca pamięci SRAM
  15. out SPL, Jeden ;inicjalizuj LSB wskaźnika stosu
  16. ldi Dwa, 0xFF ;zapisujemy w rejestrze Dwa same jedynki
  17. out DDRA, Dwa ; ustawiamy Port A jako wyjscie
  18. ldi Dwa, 0x00 ;zapisujemy w rejestrze Dwa same zera
  19. out DDRB, Dwa ;ustawiamy Port B jako wejście
  20. ldi Dwa, 0b00000011 ;zapisanie w rejestrze Dwa wartości 0b00000011
  21. out PORTB, Dwa ;piny 0 i 1 portu B ustawione jako wejście z rezystorami pull-up
  22. ldi R20, 253 ;zapisaujemy w rejestrze R20 wartość 0
  23. ldi R21, 255
  24. Klawisz1: ; etykieta Klawisz1
  25. sbic PINB, PINB0 ;sprawdzamy czy przycisk W1 został wciśnięty
  26. rjmp Klawisz1 ;petla bedzie wykonywana, az przycisk W1 nie zostanie wcisniety
  27. rcall Inkrementacja ;jesli przycisk W1 zostanie wcisniety pominie instrukcje skoku i przejdzie do inkrementacji
  28. Klawisz2: ;etykieta Klawisz2
  29. rcall Zapalenie ;jesli przycisk W2 zostanie wcisniety ominie instrukcje skoku i przejdzie do gaszenia
  30. nop
  31. rjmp Start ;powrot do poczatku programu
  32. Opoznienie5sec: ;program trwajacy 2 000 000 cykli(2 sec)
  33. ldi licznik3, 0x1A
  34. ldi licznik2, 0x5E
  35. ldi licznik1, 0x6F
  36. Petla:
  37. dec licznik1 ;zmiejszenie wartosci o 1
  38. brne Petla ;jesli powyzsze nie rowna sie 0 to skocz do Petla
  39. dec licznik2 ;zmiejszenie wartosci o 1
  40. brne Petla ;jesli powyzsze nie rowna sie 0 to skocz do Petla
  41. dec licznik3 ;zmiejszenie wartosci o 1
  42. brne Petla ;jesli powyzsze nie rowna sie 0 to skocz do Petla
  43. nop
  44. nop
  45. ret ;wyjscie z podprogramu
  46.  
  47. Inkrementacja:
  48. inc R20
  49. sub R21,R20
  50. sbrc R21, 1
  51. rjmp Klawisz2
  52. sbic PINB, PINB1 ;sprawdzamy czy przycisk W2 został wciśnięty
  53. rjmp Klawisz1 ;petla bedzie wykonywana, az przycisk W2 nie zostanie wcisniety
  54. nop
  55. ret
  56.  
  57. Zapalenie:
  58. mov Dwa,R20
  59. out PORTA, Dwa
  60. rcall Opoznienie5sec
  61. ldi Dwa,0
  62. out PORTA, Dwa
  63. ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement