Advertisement
Slaby_informatyk

Czego KURWA? XD

Nov 20th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.41 KB | None | 0 0
  1. Sprawozdanie - Podstawy Mikrosterowników - ćwiczenie 4
  2. GRUPA: C M00-O9c
  3. Imiona i nazwiska twórców sprawozdania: Zbigniew Zabłocki, Dominik Wojtalik
  4. Data zajęć laboratoryjnych, których dotyczy sprawozdanie 15-11-2017
  5. Numer sprawozdania: 4
  6.  
  7. Zadanie nr. 1
  8.  
  9. .include "m32def.inc" ;dołączenie pliku z definicjami rejestrów
  10. .def Jeden = R16 ;przyporządkowanie rejestrowi R16 wartości Jeden
  11. .def Dwa = R17 ;przyporządkowanie rejestrowi R17 wartości Dwa
  12. ; REJESTRY OPOZNIENIA
  13. .def licznik1 = R18 ;przyporządkowanie rejestrowi R18 wartości licznik1
  14. .def licznik2 = R19 ;przyporządkowanie rejestrowi R19 wartości licznik2
  15. .def licznik3 = R20 ;przyporządkowanie rejestrowi R20 wartości licznik3
  16. .cseg ;segment pamięci programu
  17. .org 0x0000 ;podanie adresu początku programu - pamięć programu
  18. jmp Start ;skok do etykiety Start
  19. Start: ;etykieta Start
  20. ldi Dwa, HIGH(RAMEND) ;inicjacja 16 bitowego stosu , ładuj rejestr roboczy MSB adresu końca pamięci SRAM
  21. out SPH, Dwa ;inicjalizuj MSB wskaźnika stosu
  22. ldi Jeden, LOW(RAMEND) ;ładuj rejestr roboczy LSB adresu końca pamięci SRAM
  23. out SPL, Jeden ;inicjalizuj LSB wskaźnika stosu
  24. ldi Dwa, 0xFF ;zapisujemy w rejestrze Dwa same jedynki
  25. out DDRA, Dwa ; ustawiamy Port A jako wyjscie
  26. ldi Dwa, 0x00 ;zapisujemy w rejestrze Dwa same zera
  27. out DDRB, Dwa ;ustawiamy Port B jako wejście
  28. ldi Jeden, 0b00001111 ;zapisanie w rejestrze Jeden wartości 00001111
  29. ldi Dwa, 0b11110000 ;zapisanie w rejestrze Dwa wartości 11110000
  30. push Dwa ;zapisanie rejestru Dwa w stosie
  31. push Jeden ;zapisanie rejestru Jeden w stosie
  32. ldi Dwa, 0b00000011 ;zapisanie w rejestrze Dwa wartości 0b00000011
  33. out PORTB, Dwa ;piny 0 i 1 portu B ustawione jako wejście z rezystorami pull-up
  34. Klawisz1: ; etykieta Klawisz1
  35. sbic PINB, PINB0 ;sprawdzamy czy przycisk W1 został wciśnięty
  36. rjmp Klawisz1 ;petla bedzie wykonywana, az przycisk W1 nie zostanie wcisniety
  37. rcall Zapalanie ;jesli przycisk W1 zostanie wcisniety ominie instrukcje skoku i przejdzie do zapalania
  38. Klawisz2: ;etykieta Klawisz2
  39. sbic PINB, PINB1 ;sprawdzamy czy przycisk W1 został wciśnięty
  40. rjmp Klawisz2 ;petla bedzie wykonywana, az przycisk W2 nie zostanie wcisniety
  41. rcall Gaszenie ;jesli przycisk W2 zostanie wcisniety ominie instrukcje skoku i przejdzie do gaszenia
  42. nop
  43. pop Jeden ;wyciagniecie wartosci Jeden ze stosu
  44. out PORTA, Jeden ;wyswietlenie wartosci 00001111
  45. rcall OpoznienieChwilowe ;tutaj realizuje podprogram OpoznienieChwilowe
  46. pop Dwa ;wyciagniecie wartosci Dwa ze stosu
  47. out PORTA, Dwa ;wyswietlenie wartosci 11110000
  48. nop
  49. rjmp Start ;powrot do poczatku programu
  50.  
  51.  
  52.  
  53. Opoznienie2sec: ;program trwajacy 2 000 000 cykli(2 sec)
  54. ldi licznik3, 0x12
  55. ldi licznik2, 0xBC
  56. ldi licznik1, 0xC4
  57. Petla:
  58. dec licznik1 ;zmiejszenie wartosci o 1
  59. brne Petla ;jesli powyzsze nie rowna sie 0 to skocz do Petla
  60. dec licznik2 ;zmiejszenie wartosci o 1
  61. brne Petla ;jesli powyzsze nie rowna sie 0 to skocz do Petla
  62. dec licznik3 ;zmiejszenie wartosci o 1
  63. brne Petla ;jesli powyzsze nie rowna sie 0 to skocz do Petla
  64. nop
  65. nop
  66. ret ;wyjscie z podprogramu
  67.  
  68. Opoznienie1sec: ;program trwajacy 1 000 000 cykli (1 sec)
  69. ldi licznik3, 0x09
  70. ldi licznik2, 0xBC
  71. ldi licznik1, 0xC4
  72. Petla1:
  73. dec licznik1 ;zmiejszenie wartosci o 1
  74. brne Petla1 ;jesli powyzsze nie rowna sie 0 to skocz do Petla1
  75. dec licznik2 ;zmiejszenie wartosci o 1
  76. brne Petla1 ;jesli powyzsze nie rowna sie 0 to skocz do Petla1
  77. dec licznik3 ;zmiejszenie wartosci o 1
  78. brne Petla1 ;jesli powyzsze nie rowna sie 0 to skocz do Petla1
  79. nop
  80. ret ;wyjscie z podprogramu
  81.  
  82. OpoznienieChwilowe: ;program trwajacy 100 000 cykli (0,1 sec)
  83. ldi Dwa, 0x00
  84. out PORTA, Dwa ;zgaszenie diod
  85. ldi licznik2, 0xA5
  86. ldi licznik1, 0xC9
  87. ldi licznik3, 0x03
  88. Petla3:
  89. dec licznik1 ;zmiejszenie wartosci o 1
  90. brne Petla1 ;jesli powyzsze nie rowna sie 0 to skocz do Petla3
  91. dec licznik2 ;zmiejszenie wartosci o 1
  92. brne Petla1 ;jesli powyzsze nie rowna sie 0 to skocz do Petla3
  93. dec licznik3 ;zmiejszenie wartosci o 1
  94. brne Petla1 ;jesli powyzsze nie rowna sie 0 to skocz do Petla3
  95. nop
  96. ret ;wyjdz z podprogramu
  97.  
  98. Zapalanie: ;etykieta Zapalenie
  99. rcall Opoznienie2sec ;wywolanie podprogramu Opoznienie2sec
  100. rcall Jedynka ;podprogram Jedynka
  101. rcall Opoznienie2sec ;wywolanie podprogramu Opoznienie2sec
  102. rcall Dwojka ;podprogram Dwojka
  103. rcall Opoznienie2sec ;wywolanie podprogramu Opoznienie2sec
  104. rcall Trojka ;podprogram Trojka
  105. rcall Opoznienie2sec ;wywolanie podprogramu Opoznienie2sec
  106. rcall Czworka ;podprogram Czworka
  107. rcall Opoznienie2sec ;wywolanie podprogramu Opoznienie2sec
  108. rcall Piatka ;podprogram Piatka
  109. rcall Opoznienie2sec ;wywolanie podprogramu Opoznienie2sec
  110. rcall Szostka ;podprogram Szostka
  111. rcall Opoznienie2sec ;wywolanie podprogramu Opoznienie2sec
  112. rcall Siodemka ;podprogram Siodemka
  113. rcall Opoznienie2sec ;wywolanie podprogramu Opoznienie2sec
  114. rcall Osemka ;podprogram Osemka
  115. ret
  116.  
  117.  
  118. Gaszenie: ;etykieta Gaszenie
  119. rcall Opoznienie1sec ;wywolanie podprogramu Opoznienie1sec
  120. rcall Siodemka ;podprogram Siodemka
  121. rcall Opoznienie1sec ;wywolanie podprogramu Opoznienie1sec
  122. rcall Szostka ;podprogram Szostka
  123. rcall Opoznienie1sec ;wywolanie podprogramu Opoznienie1sec
  124. rcall Piatka ;podprogram Piatka
  125. rcall Opoznienie1sec ;wywolanie podprogramu Opoznienie1sec
  126. rcall Czworka ;podprogram Czworka
  127. rcall Opoznienie1sec ;wywolanie podprogramu Opoznienie1sec
  128. rcall Trojka ;podprogram Trojka
  129. rcall Opoznienie1sec ;wywolanie podprogramu Opoznienie1sec
  130. rcall Dwojka ;podprogram Dwojka
  131. rcall Opoznienie1sec ;wywolanie podprogramu Opoznienie1sec
  132. rcall Jedynka ;podprogram Jedynka
  133. rcall Opoznienie1sec ;wywolanie podprogramu Opoznienie1sec
  134. rcall Zero ;podprogram Zero
  135. rcall Opoznienie1sec ;wywolanie podprogramu Opoznienie1sec
  136. ret
  137.  
  138.  
  139.  
  140. Zero: ;etykieta Zero
  141. ldi Dwa, 0b00000000 ;ladowanie wartosci 00000000 do rejestru Dwa
  142. out PORTA, Dwa ;wyświetlanie wartosci rejestru Dwa
  143. ret
  144.  
  145. Jedynka: ;etykieta Jeden
  146. ldi Dwa, 0b0000001 ;ladowanie wartosci 00000001 do rejestru Dwa
  147. out PORTA, Dwa ;wyświetlanie wartosci rejestru Dwa
  148. ret
  149.  
  150. Dwojka:
  151. ldi Dwa, 0b00000011 ;ladowanie wartosci 00000011 do rejestru Dwa
  152. out PORTA, Dwa ;wyświetlanie wartosci rejestru Dwa
  153. ret
  154.  
  155. Trojka:
  156. ldi Dwa, 0b00000111 ;ladowanie wartosci 00000111 do rejestru Dwa
  157. out PORTA, Dwa ;wyświetlanie wartosci rejestru Dwa
  158. ret
  159.  
  160. Czworka:
  161. ldi Dwa, 0b00001111 ;ladowanie wartosci 00001111 do rejestru Dwa
  162. out PORTA, Dwa ;wyświetlanie wartosci rejestru Dwa
  163. ret
  164.  
  165. Piatka:
  166. ldi Dwa, 0b00011111 ;ladowanie wartosci 00011111 do rejestru Dwa
  167. out PORTA, Dwa ;wyświetlanie wartosci rejestru Dwa
  168. ret
  169.  
  170. Szostka:
  171. ldi Dwa, 0b00111111 ;ladowanie wartosci 00111111 do rejestru Dwa
  172. out PORTA, Dwa ;wyświetlanie wartosci rejestru Dwa
  173. ret
  174.  
  175. Siodemka:
  176. ldi Dwa, 0b01111111 ;ladowanie wartosci 01111111 do rejestru Dwa
  177. out PORTA, Dwa ;wyświetlanie wartosci rejestru Dwa
  178. ret
  179.  
  180. Osemka:
  181. ldi Dwa, 0b11111111 ;ladowanie wartosci 11111111 do rejestru Dwa
  182. out PORTA, Dwa ;wyświetlanie wartosci rejestru Dwa
  183. ret
  184.  
  185.  
  186. Zadanie nr. 2
  187.  
  188. .include "m32def.inc" ;dołączenie pliku z definicjami rejestrów
  189. .def Jeden = R16 ;przyporządkowanie rejestrowi R16 wartości Jeden
  190. .def Dwa = R17 ;przyporządkowanie rejestrowi R17 wartości Dwa
  191. ; REJESTRY OPOZNIENIA
  192. .def licznik1 = R18 ;przyporządkowanie rejestrowi R18 wartości licznik1
  193. .def licznik2 = R19 ;przyporządkowanie rejestrowi R19 wartości licznik2
  194. .def licznik3 = R20 ;przyporządkowanie rejestrowi R20 wartości licznik3
  195. .cseg ;segment pamięci programu
  196. .org 0x0000 ;podanie adresu początku programu - pamięć programu
  197. jmp Start ;skok do etykiety Start
  198. Start: ;etykieta Start
  199. ldi Dwa, HIGH(RAMEND) ;inicjacja 16 bitowego stosu , ładuj rejestr roboczy MSB adresu końca pamięci SRAM
  200. out SPH, Dwa ;inicjalizuj MSB wskaźnika stosu
  201. ldi Jeden, LOW(RAMEND) ;ładuj rejestr roboczy LSB adresu końca pamięci SRAM
  202. out SPL, Jeden ;inicjalizuj LSB wskaźnika stosu
  203. ldi Dwa, 0xFF ;zapisujemy w rejestrze Dwa same jedynki
  204. out DDRA, Dwa ; ustawiamy Port A jako wyjscie
  205. ldi Dwa, 0x00 ;zapisujemy w rejestrze Dwa same zera
  206. out DDRB, Dwa ;ustawiamy Port B jako wejście
  207. ldi Dwa, 0b00000011 ;zapisanie w rejestrze Dwa wartości 0b00000011
  208. out PORTB, Dwa ;piny 0 i 1 portu B ustawione jako wejście z rezystorami pull-up
  209. ldi R20, 253 ;zapisaujemy w rejestrze R20 wartość 0
  210. ldi R21, 255
  211. Klawisz1: ; etykieta Klawisz1
  212. sbic PINB, PINB0 ;sprawdzamy czy przycisk W1 został wciśnięty
  213. rjmp Klawisz1 ;petla bedzie wykonywana, az przycisk W1 nie zostanie wcisniety
  214. rcall Inkrementacja ;jesli przycisk W1 zostanie wcisniety pominie instrukcje skoku i przejdzie do inkrementacji
  215. Klawisz2: ;etykieta Klawisz2
  216. rcall Zapalenie ;jesli przycisk W2 zostanie wcisniety ominie instrukcje skoku i przejdzie do gaszenia
  217. nop
  218. rjmp Start ;powrot do poczatku programu
  219. Opoznienie5sec: ;program trwajacy 2 000 000 cykli(2 sec)
  220. ldi licznik3, 0x1A
  221. ldi licznik2, 0x5E
  222. ldi licznik1, 0x6F
  223. Petla:
  224. dec licznik1 ;zmiejszenie wartosci o 1
  225. brne Petla ;jesli powyzsze nie rowna sie 0 to skocz do Petla
  226. dec licznik2 ;zmiejszenie wartosci o 1
  227. brne Petla ;jesli powyzsze nie rowna sie 0 to skocz do Petla
  228. dec licznik3 ;zmiejszenie wartosci o 1
  229. brne Petla ;jesli powyzsze nie rowna sie 0 to skocz do Petla
  230. nop
  231. nop
  232. ret ;wyjscie z podprogramu
  233.  
  234. Inkrementacja:
  235. inc R20
  236. sub R21,R20
  237. sbrc R21, 1
  238. rjmp Klawisz2
  239. sbic PINB, PINB1 ;sprawdzamy czy przycisk W2 został wciśnięty
  240. rjmp Klawisz1 ;petla bedzie wykonywana, az przycisk W2 nie zostanie wcisniety
  241. nop
  242. ret
  243.  
  244. Zapalenie:
  245. mov Dwa,R20
  246. out PORTA, Dwa
  247. rcall Opoznienie5sec
  248. ldi Dwa,0
  249. out PORTA, Dwa
  250. ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement