Advertisement
Guest User

Untitled

a guest
Mar 31st, 2015
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.82 KB | None | 0 0
  1. /*
  2. * AssemblerApplication12.asm
  3. *
  4. * Created: 3/31/2015 11:00:04 AM
  5. * Author: Laurens
  6. */
  7. .include "m32def.inc"
  8.  
  9. .org 0x0000
  10. rjmp init
  11.  
  12. .org OC1Aaddr
  13. rjmp timerInterrupt
  14.  
  15. stuff:
  16. .equ baudRate = 35
  17. .def tmp = r16
  18. .def count = r17
  19. .def data = r18
  20. .def hours = r19
  21. .def minutes = r20
  22. .def seconds = r21
  23. .def moduloCounter = r22
  24. .def multiplyRegister = r23
  25. .def NumberToConvert = r24
  26.  
  27. init:
  28. ;init stack pointer
  29. ldi tmp, LOW(RAMEND)
  30. out SPL, tmp
  31. ldi tmp, HIGH(RAMEND)
  32. out SPH, tmp
  33.  
  34. ldi r17, high(baudRate)
  35. ldi r16, low(baudRate)
  36. rcall USART_Init
  37. ldi r16, 40
  38.  
  39. ;create output compare register
  40. ldi r16, high(43200)
  41. out OCR1AH, r16
  42. ldi r16, low(43200)
  43. out OCR1AL, r16
  44.  
  45. ;Set prescaler to 256 and put timer in CTC mode
  46. ldi r16, (1<<CS12) | (1<<WGM12)
  47. out TCCR1B, r16
  48.  
  49. ;enable interrupts
  50. ldi r16, (1<<OCIE1A)
  51. out TIMSK, r16
  52. sei ; enables all interrupts
  53.  
  54. ldi seconds, 0
  55. ldi minutes, 0
  56. ldi hours, 0
  57.  
  58.  
  59.  
  60.  
  61. done:
  62. rjmp done
  63.  
  64.  
  65. USART_Init:
  66. ; Set baud rate
  67. out UBRRH, r17
  68. out UBRRL, r16
  69. ; Enable receiver and transmitter
  70. ldi r16, (1<<RXEN)|(1<<TXEN)
  71. out UCSRB,r16
  72. ; Set frame format: 8data, 2stop bit
  73. ldi r16, (1<<URSEL)|(0<<USBS)|(3<<UCSZ0)
  74. out UCSRC,r16
  75. ret
  76.  
  77. USART_Transmit:
  78. ; Wait for empty transmit buffer
  79. sbis UCSRA,UDRE
  80. rjmp USART_Transmit
  81. ; Put data (r16) into buffer, sends the data
  82. out UDR,data
  83. ret
  84.  
  85. modulo:
  86. cp tmp, multiplyRegister
  87. brlo smaller
  88. ;breq smaller
  89. ldi multiplyRegister, 10
  90. mul moduloCounter, multiplyRegister
  91. mov multiplyRegister, r0
  92. inc moduloCounter
  93. rjmp modulo
  94. smaller:
  95. subi multiplyRegister, 10
  96. sub tmp, multiplyRegister
  97. dec moduloCounter
  98. dec moduloCounter
  99. ret
  100.  
  101. showTime:
  102. ;show time
  103. ;For hours
  104. rcall USART_Transmit
  105. mov tmp, hours
  106. rcall twoBytesToTime
  107. mov tmp, minutes
  108. rcall twoBytesToTime
  109. mov tmp, seconds
  110. rcall twoBytesToTime
  111. ldi data, 0x2E ; send last character
  112. rcall USART_Transmit
  113. ret
  114.  
  115. checkIntToTime:
  116. ldi multiplyRegister, 10
  117. ldi moduloCounter, 2
  118. rcall modulo
  119. ret
  120.  
  121. twoBytesToTime:
  122. ;the tmp register should have the variable you want
  123. rcall checkIntToTime
  124. ;moduloCounter has first character
  125. mov NumberToConvert, moduloCounter
  126. rcall ConvertToSegments
  127. mov data, NumberToConvert
  128. skipChange:
  129. rcall USART_Transmit
  130. ;tmp has second character
  131. mov NumberToConvert, tmp
  132. rcall ConvertToSegments
  133. mov data, NumberToConvert
  134. rcall USART_Transmit
  135. re
  136.  
  137.  
  138. USART_Receive:
  139. ; Wait for data to be received
  140. sbis UCSRA, RXC
  141. rjmp USART_Receive
  142. ; Get and return received data from buffer
  143. in r16, UDR
  144. ret
  145.  
  146. ConvertToSegments:
  147. cpi NumberToConvert, 0
  148. brne N1
  149. ldi NumberToConvert, 0b01110111
  150. rjmp End_CTS
  151. N1:
  152. cpi NumberToConvert, 1
  153. brne N2
  154. ldi NumberToConvert, 0b00100100
  155. rjmp End_CTS
  156. N2:
  157. cpi NumberToConvert, 2
  158. brne N3
  159. ldi NumberToConvert, 0b01011101
  160. rjmp End_CTS
  161. N3:
  162. cpi NumberToConvert, 3
  163. brne N4
  164. ldi NumberToConvert, 0b01101101
  165. rjmp End_CTS
  166. N4:
  167. cpi NumberToConvert, 4
  168. brne N5
  169. ldi NumberToConvert, 0b00101110
  170. rjmp End_CTS
  171. N5:
  172. cpi NumberToConvert, 5
  173. brne N6
  174. ldi NumberToConvert, 0b01101011
  175. rjmp End_CTS
  176. N6:
  177. cpi NumberToConvert, 6
  178. brne N7
  179. ldi NumberToConvert, 0b01111011
  180. rjmp End_CTS
  181. N7:
  182. cpi NumberToConvert, 7
  183. brne N8
  184. ldi NumberToConvert, 0b00100101
  185. rjmp End_CTS
  186. N8:
  187. cpi NumberToConvert, 8
  188. brne N9
  189. ldi NumberToConvert, 0b01111111
  190. rjmp End_CTS
  191. N9:
  192. ldi NumberToConvert, 0b01101111
  193. rjmp End_CTS
  194. End_CTS:
  195.  
  196. timerInterrupt:
  197. inc seconds
  198. cpi seconds, 60
  199. brne skipCall
  200. rcall incMinutes
  201. skipCall: rcall showTime
  202. reti
  203.  
  204. incMinutes:
  205. ldi seconds, 0
  206. inc minutes
  207. cpi minutes, 60
  208. brne skipCall2
  209. rcall incHours
  210. skipCall2:
  211. ret
  212.  
  213. incHours:
  214. ldi minutes, 0
  215. inc hours
  216. cpi hours, 24
  217. brne skipCall3
  218. rcall resetHours
  219. skipCall3:
  220. ret
  221.  
  222. resetHours:
  223. ldi hours, 0
  224. ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement