Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.55 KB | None | 0 0
  1. .nolist
  2. .include "m16def.inc"
  3. .list
  4. .listmac
  5. .device ATmega16
  6.  
  7. .cseg
  8. .org 0x0000
  9. jmp 0x30
  10.  
  11. // wektory przerwan
  12. .org 0x0030
  13.  
  14. // ustawienia stosu
  15.  
  16. ldi r16, high(RAMEND) ;0x04
  17. out SPH, r16
  18. ldi r16, low(RAMEND) ;0x5f
  19. out SPL, r16
  20.  
  21. //program glowny
  22. /*
  23. ldi r16, 0
  24. sts 0x0060, r16
  25.  
  26. ldi r16, 1
  27. sts 0x0061, r16
  28.  
  29. ldi r16, 2
  30. sts 0x0062, r16
  31.  
  32. ldi r16, 3
  33. sts 0x0063, r16
  34.  
  35. ldi r16, 4
  36. sts 0x0064, r16
  37.  
  38. ldi r16, 5
  39. sts 0x0065, r16
  40.  
  41. ldi r16, 6
  42. sts 0x0066, r16
  43.  
  44. ldi r16, 7
  45. sts 0x0067, r16
  46.  
  47. ldi r16, 8
  48. sts 0x0068, r16
  49.  
  50. ldi r16, 9
  51. sts 0x0069, r16 //zapisuje BEZPIŚREDNIO do pamięci
  52.  
  53. */
  54. //wykorzystanie rejetru wskaźnikowego (instrukcje z wykorzystaniem adiw)
  55. /*
  56. ldi r26, 0x90
  57. ldi r27, 0x00
  58.  
  59. ldi r26, low(0x0090) //bierze młodszą czesc
  60. ldi r27, high(0x0090)//bierze starszą czesc
  61.  
  62. ldi r16, 0x0A ;0x0A
  63. st X , r16 //zapisuje do pamieci
  64.  
  65. //adiw r27:r26, 1 //inkrementacja X=X+1
  66. //ldi r16, 0x0B ;0x0B
  67. //st X, r16 //zapisuje do pamieci
  68.  
  69. //adiw r27:r26, 1 //inkrementacja X=X+1
  70. //ldi r16, 0x0C ;0x0C
  71. //st X, r16 //zapisuje do pamieci
  72.  
  73. //adiw r27:r26, 1 //inkrementacja X=X+1
  74. //ldi r16, 0x0D ;0x0D
  75. //st X, r16 //zapisuje do pamieci
  76.  
  77. //adiw r27:r26, 1 //inkrementacja X=X+1
  78. //ldi r16, 0x0D ;0x0D
  79. //st X, r16 //zapisuje do pamieci
  80.  
  81. //adiw r27:r26, 1 //inkrementacja X=X+1
  82. //ldi r16, 0x0E ;0x0F
  83. //st X, r16 //zapisuje do pamieci
  84. */
  85.  
  86.  
  87. /*
  88. ldi r26, low(0x00C0)
  89. ldi r27, high(0x00C0)
  90.  
  91. ldi r16, 0
  92. st X+, r16
  93.  
  94. ldi r16, 1
  95. st X+, r16
  96.  
  97. ldi r16, 2
  98. st X+, r16
  99.  
  100. ldi r16, 3
  101. st X+, r16
  102.  
  103. ldi r16, 4
  104. st X+, r16
  105.  
  106. ldi r16, 5
  107. st X+, r16
  108.  
  109. ldi r16, 6
  110. st X+, r16
  111.  
  112. ldi r16, 7
  113. st X+, r16
  114.  
  115. ldi r16, 8
  116. st X+, r16
  117.  
  118. ldi r16, 9
  119. st X+, r16
  120. */
  121.  
  122.  
  123. //w pętli
  124. /*
  125. ldi r26, low(0x0060)
  126. ldi r27, high(0x0060)
  127.  
  128. ldi r16, 0
  129.  
  130. SRAM_loop:
  131. st X+, r16
  132. st X-, r16
  133. inc r16
  134. cpi r16, 255
  135. brne SRAM_loop
  136. */
  137.  
  138. //wpisywanie 0 w 256 rejestrach
  139. /*
  140. ldi r26, low(0x0060) ; wskaznik X
  141. ldi r27, high(0x0060)
  142.  
  143. ldi r16, 0x00
  144.  
  145. SRAM_loop:
  146. st X+, r16
  147.  
  148. cpi r26, 0x60 ;0x5F + 1
  149. brne SRAM_loop
  150.  
  151. cpi r27, 0x04
  152. brne SRAM_loop
  153.  
  154. */
  155.  
  156.  
  157.  
  158. //wrzucanie wszystkiego do danego rejestru o takim adresie w pamięci SRAM
  159. /*
  160.  
  161. ldi r16, 0
  162. sts 0x0060, r16
  163.  
  164. ldi r16, 1
  165. sts 0x0061, r16
  166.  
  167. ldi r16, 2
  168. sts 0x0062, r16
  169.  
  170. ldi r16, 3
  171. sts 0x0063, r16
  172.  
  173. ldi r16, 4
  174. sts 0x0064, r16
  175.  
  176. ldi r16, 5
  177. sts 0x0065, r16
  178.  
  179. ldi r16, 6
  180. sts 0x0066, r16
  181.  
  182.  
  183. ldi r16, 7
  184. sts 0x0067, r16
  185.  
  186.  
  187. ldi r16, 8
  188. sts 0x0068, r16
  189.  
  190.  
  191. ldi r16, 9
  192. sts 0x0069, r16
  193.  
  194. */
  195.  
  196.  
  197.  
  198. // adres 0x0090
  199. /*
  200. ldi r26, 0x90
  201. ldi r27, 0x00
  202.  
  203. //ldi r26, low(0x0090)// to jest wskaznik ktory wskazuje na adres 90
  204. //ldi r27, high(0x0000)
  205.  
  206. ldi r16,0x0A //tu daje wartosc do r16
  207. st X, r16 // i wartosc do wartosci ze wskaznika ...
  208.  
  209. adiw r26:r27,1
  210. ldi r16,0x0B
  211. st X, r16
  212.  
  213. adiw r26:r27,1
  214. ldi r16,0x0C
  215. st X, r16
  216.  
  217. adiw r26:r27, 1
  218. ldi r16,0x0D
  219. st X, r16
  220.  
  221. adiw r26:r27, 1
  222. ldi r16,0x0E
  223. st X, r16
  224.  
  225. adiw r26:r27, 1
  226. ldi r16,0x0F
  227. st X, r16
  228. */
  229.  
  230. // adres 0x00C0
  231.  
  232. /*
  233. ldi r26, low(0x00C0) // wskaznik X
  234. ldi r27, high(0x0000)
  235.  
  236. ldi r16, 0
  237. st X+, r16
  238.  
  239. ldi r16, 1
  240. st X+, r16
  241.  
  242. ldi r16, 2
  243. st X+, r16
  244.  
  245. ldi r16, 3
  246. st X+, r16
  247.  
  248. ldi r16, 4
  249. st X+, r16
  250.  
  251. ldi r16, 5
  252. st X+, r16
  253.  
  254. ldi r16, 6
  255. st X+, r16
  256.  
  257. ldi r16, 7
  258. st X+, r16
  259.  
  260. ldi r16, 8
  261. st X+, r16
  262.  
  263. ldi r16, 9
  264. st X+, r16
  265.  
  266. ldi r16, 10
  267. st X+, r16
  268.  
  269. ldi r16, 11
  270. st X+, r16
  271.  
  272. ldi r16, 12
  273. st X+, r16
  274.  
  275. ldi r16, 13
  276. st X+, r16
  277.  
  278. ldi r16, 14
  279. st X+, r16
  280.  
  281. ldi r16,15
  282. st X+, r16
  283. */
  284.  
  285. /*
  286. ldi r26, low(0x00C0) // wskaznik X
  287. ldi r27, high(0x0000)
  288. ldi r16,0;
  289. loop_fill:
  290. st X+,r16;
  291. inc r16
  292. cpi r16, 16
  293. brne loop_fill;
  294. */
  295.  
  296.  
  297.  
  298. //zerowanie wszystkich komórek pamięci
  299.  
  300. ldi r26, low(0x0060) // r26 zawiera młodszą część wartości 0x0060 (czyli 96)
  301. ldi r27, high(0x0000) // r27 zawiera starszą część wartości 0x0000 (czyli 0)
  302. ldi r16,0x00;
  303. loop_fill_zero:
  304. st X+,r16; //zwiększ wartość w rejestrze r26 i wpisz do komórki pamięci odpowiadającej wartości r26 liczbę spod rejestru r16
  305. cpi r26, 0x60 //0x5F + 1
  306. brne loop_fill_zero;
  307. cpi r27, 0x04
  308. brne loop_fill_zero;
  309.  
  310.  
  311.  
  312. clr r15
  313.  
  314. //sprawdzanie czy jest zapisane 0
  315. ldi r26, low(0x0060) // wskaznik X
  316. ldi r27, high(0x0000)
  317. //ldi r16,0x00;
  318. loop_check_zero:
  319. //st X,r16; //inkrementuj wartość w rejestrze (tu:) r26 zapisaną jako low i high z rejestru 00C0 i zapisz tam wartość z rejestru r16
  320.  
  321. ld r28, X
  322. cpi r28, 0x00
  323. brne NO
  324.  
  325. adiw r27:r26, 1
  326.  
  327. jazda_dalej:
  328. cpi r26, 0x60 //0x5F + 1
  329. brne loop_check_zero;
  330. cpi r27, 0x04
  331. brne loop_check_zero;
  332.  
  333.  
  334.  
  335. loop:
  336. jmp loop
  337.  
  338.  
  339. NO:
  340.  
  341. inc r15
  342.  
  343. jmp jazda_dalej
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement