Advertisement
Guest User

Untitled

a guest
Dec 17th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.85 KB | None | 0 0
  1. //////////////////////////////////////////////////////////////////////////////
  2. // Laboratory AVR Microcontrollers Part2
  3. // Program template for lab 9
  4. // Please fill in this information before starting coding
  5. // Authors:
  6. //
  7. // Group:
  8. // Section:
  9. //
  10. // Task:
  11. //
  12. // Todo:
  13. //
  14. //
  15. // Version: 5.0
  16. //////////////////////////////////////////////////////////////////////////////
  17. .nolist ;quartz assumption 4Mhz
  18. .include "m2560def.inc"
  19. ;//////////////////////////////////////////////////////////////////////////////
  20. .list
  21. .equ xlength = 100
  22. ;//////////////////////////////////////////////////////////////////////////////
  23. ; EEPROM - data non volatile memory segment
  24. .ESEG
  25. ;//////////////////////////////////////////////////////////////////////////////
  26. ; StaticRAM - data memory.segment
  27. .DSEG
  28. .ORG 0x200;0x200; may be omitted this is default value
  29. ;//////////////////////////////////////////////////////////////////////////////
  30. ; CODE - Program memory segment
  31. ; Please Remember that it is "word" address space
  32. ;
  33. .CSEG
  34. .org 0x0000 ; may be omitted this is default value
  35. jmp RESET ; Reset Handler
  36. ; Interrupts vector table / change to your procedure only when needed
  37. jmp EXT_INT0 ; IRQ0 Handler
  38. jmp EXT_INT1 ; IRQ1 Handler
  39. jmp EXT_INT2 ; IRQ2 Handler
  40. jmp EXT_INT3 ; IRQ3 Handler
  41. jmp EXT_INT4 ; IRQ4 Handler
  42. jmp EXT_INT5 ; IRQ5 Handler
  43. jmp EXT_INT6 ; IRQ6 Handler
  44. jmp EXT_INT7 ; IRQ7 Handler
  45. jmp HPCINT0 ; PCINT0 Handler
  46. jmp HPCINT1 ; PCINT1 Handler
  47. jmp HPCINT2 ; PCINT2 Handler
  48. jmp WDT ; WDT Handler
  49. jmp TIM2_COMPA ; Timer2 CompareA Handler
  50. jmp TIM2_COMPB ; Timer2 CompareB Handler
  51. jmp TIM2_OVF ; Timer2 Overflow Handler
  52. jmp TIM1_CAPT ; Timer1 Capture Handler
  53. jmp TIM1_C0MPA ; Timer1 CompareA Handler
  54. jmp TIM1_C0MPB ; Timer1 CompareB Handler
  55. jmp TIM1_COMPC ; Timer1 CompareC Handler
  56. jmp TIM1_0VF_CUSTOM ; Timer1 Overflow Handler
  57. jmp TIM0_COMPA ; Timer0 CompareA Handler
  58. jmp TIM0_COMPB ; Timer0 CompareB Handler
  59. jmp TIM0_OVF ; Timer0 Overflow Handler
  60. jmp SPI_STC ; SPI Transfer Complete Handler
  61. jmp USART0_RXC ; USART0 RX Complete Handler
  62. jmp USART0_UDRE ; USART0,UDR Empty Handler
  63. jmp USART0_TXC ; USART0 TX Complete Handler
  64. jmp ANA_COMP ; Analog COmparator Handler
  65. jmp HADC ; ADC Conversion Complete Handler
  66. jmp EE_RDY ; EEPROM Ready Handler
  67. jmp TIM3_CAPT ; Timer3 Capture Handler
  68. jmp TIM3_COMPA ; Timer3 CompareA Handler
  69. jmp TIM3_COMPB ; Timer3 CompareB Handler
  70. jmp TIM3_COMPC ; Timer3 CompareC Handler
  71. jmp TIM3_OVF ; Timer3 Overflow Handler
  72. jmp USART1_RXC ; USART1 RX Complete Handler
  73. jmp USART1_UDRE ; USART1,UDR Empty Handler
  74. jmp USART1_TXC ; USART1 TX Complete Handler
  75. jmp TWI ; Two-wire Serial Interface Interrupt Handler
  76. jmp SPM_RDY ; SPM Ready Handler
  77. jmp TIM4_CAPT ; Timer4 Capture Handler
  78. jmp TIM4_COMPA ; Timer4 CompareA Handler
  79. jmp TIM4_COMPB ; Timer4 CompareB Handler
  80. jmp TIM4_COMPC ; Timer4 CompareC Handler
  81. jmp TIM4_OVF ; Timer4 Overlflow Handler
  82. jmp TIM5_CAPT ; Timer5 Capture Handler
  83. jmp TIM5_COMPA ; Timer5 CompareA Handler
  84. jmp TIM5_COMPB ; Timer5 CompareB Handler
  85. jmp TIM5_COMPC ; Timer5 CompareC Handler
  86. jmp TIM5_OVF ; Timer5 Overlflow Handler
  87. jmp USART2_RXC ; USART2 RX Complete Handler
  88. jmp USART2_UDRE ; USART2,UDR Empty Handler
  89. jmp USART2_TXC ; USART2 TX Complete Handler
  90. jmp USART3_RXC ; USART3 RX Complete Handler
  91. jmp USART3_UDRE ; USART3,UDR Empty Handler
  92. jmp USART3_TXC ; USART3 TX Complete Handler
  93. //////////////////////////////////////////////////////////////////////////////
  94. EXT_INT0: ; IRQ0 Handler
  95. EXT_INT1: ; IRQ1 Handler
  96. EXT_INT2: ; IRQ2 Handler
  97. EXT_INT3: ; IRQ3 Handler
  98. EXT_INT4: ; IRQ4 Handler
  99. EXT_INT5: ; IRQ5 Handler
  100. EXT_INT6: ; IRQ6 Handler
  101. EXT_INT7: ; IRQ7 Handler
  102. HPCINT0: ; PCINT0 Handler
  103. HPCINT1: ; PCINT1 Handler
  104. HPCINT2: ; PCINT2 Handler
  105. WDT: ; WDT Handler
  106. TIM2_COMPA: ; Timer2 CompareA Handler
  107. TIM2_COMPB: ; Timer2 CompareB Handler
  108. TIM2_OVF: ; Timer2 Overflow Handler
  109. TIM1_CAPT: ; Timer1 Capture Handler
  110. TIM1_C0MPA: ; Timer1 CompareA Handler
  111. TIM1_C0MPB: ; Timer1 CompareB Handler
  112. TIM1_COMPC: ; Timer1 CompareC Handler
  113. TIM1_0VF: ; Timer1 Overflow Handler
  114. TIM0_COMPA: ; Timer0 CompareA Handler
  115. TIM0_COMPB: ; Timer0 CompareB Handler
  116. TIM0_OVF: ; Timer0 Overflow Handler
  117. SPI_STC: ; SPI Transfer Complete Handler
  118. USART0_RXC: ; USART0 RX Complete Handler
  119. USART0_UDRE:; USART0,UDR Empty Handler
  120. USART0_TXC: ; USART0 TX Complete Handler
  121. ANA_COMP: ; Analog COmparator Handler
  122. HADC: ; ADC Conversion Complete Handler
  123. EE_RDY: ; EEPROM Ready Handler
  124. TIM3_CAPT: ; Timer3 Capture Handler
  125. TIM3_COMPA: ; Timer3 CompareA Handler
  126. TIM3_COMPB: ; Timer3 CompareB Handler
  127. TIM3_COMPC: ; Timer3 CompareC Handler
  128. TIM3_OVF: ; Timer3 Overflow Handler
  129. USART1_RXC: ; USART1 RX Complete Handler
  130. USART1_UDRE:; USART1,UDR Empty Handler
  131. USART1_TXC: ; USART1 TX Complete Handler
  132. TWI: ; Two-wire Serial Interface Interrupt Handler
  133. SPM_RDY: ; SPM Ready Handler
  134. TIM4_CAPT: ; Timer4 Capture Handler
  135. TIM4_COMPA: ; Timer4 CompareA Handler
  136. TIM4_COMPB: ; Timer4 CompareB Handler
  137. TIM4_COMPC: ; Timer4 CompareC Handler
  138. TIM4_OVF: ; Timer4 Overlflow Handler
  139. TIM5_CAPT: ; Timer5 Capture Handler
  140. TIM5_COMPA: ; Timer5 CompareA Handler
  141. TIM5_COMPB: ; Timer5 CompareB Handler
  142. TIM5_COMPC: ; Timer5 CompareC Handler
  143. TIM5_OVF: ; Timer5 Overlflow Handler
  144. USART2_RXC: ; USART2 RX Complete Handler
  145. USART2_UDRE:; USART2,UDR Empty Handler
  146. USART2_TXC: ; USART2 TX Complete Handler
  147. USART3_RXC: ; USART3 RX Complete Handler
  148. USART3_UDRE:; USART3,UDR Empty Handler
  149. USART3_TXC: ; USART3 TX Complete Handler
  150. reti ; return from all no used
  151. TIM1_0VF_CUSTOM:
  152. ; re init timer start value
  153. ldi r19, 0xFE;BD
  154. ldi r20, 0xFF;F0
  155. sts TCNT1H, r20
  156. sts TCNT1L, r19
  157. ; r21 is > 0 during 2s peroid between each full cycle
  158. ; (reading values from table is skipped 8 times)
  159. ; (each skipped cycle causes r21 to be decremented, until it reaches 0)
  160. cpi r21, 0x00
  161. brne decrement_delay_counter
  162. ; copy table address
  163. mov ZL, XL
  164. mov ZH, XH
  165. ; add table adress to index
  166. add ZL, r17
  167. ; add carryover to ZH
  168. ldi r25, 0x00
  169. adc ZH, r25
  170. ; read table value to register
  171. ;ldi r25, 0x01
  172. out RAMPZ, r22
  173. elpm r23,Z
  174. ; display to port
  175. out PORTC, r23
  176. ; increment index
  177. inc r17
  178. ; check if index at table end
  179. cpi r23, 0x00;r17, 0xF1
  180. brne end_of_handler
  181. ; indexed through whole table, reset index, set delay counter to 8
  182. ldi r17, 0x00
  183. ldi r21, 0x08
  184. jmp end_of_handler
  185. decrement_delay_counter:
  186. dec r21
  187. end_of_handler:
  188. reti
  189. ;//////////////////////////////////////////////////////////////////////////////
  190. ; Program start
  191. RESET:
  192. cli ; disable all interrupts
  193. // Set stack pointer to top of RAM
  194. ldi R16, HIGH(RAMEND)
  195. out SPH, R16
  196. ldi R16, LOW(RAMEND)
  197. out SPL, R16
  198. ; init ports
  199. ldi r16,0xFF
  200. out DDRA, r16
  201. out PORTA,r16
  202. ldi r16,0xFF
  203. out DDRB, r16
  204. out PORTB,r16
  205. ldi r16,0xFF
  206. out DDRC, r16
  207. out PORTC,r16
  208. ldi r16,0xFF
  209. out DDRD, r16
  210. out PORTD,r16
  211. // 1. Place here code related to initialization of ports and interrupts
  212. // for instance:
  213. // port A as input and switching Pull-up resistors on
  214. // DDRA=0xFF
  215. // PORTA=0xFF
  216. // port C as output and initial value FF
  217. // DDRB=0xFF
  218. // PORTA=0xFF
  219. //
  220. // Writing a logic one to PINxn toggles the value of PORTxn, independent on the value of
  221. DDRxn
  222. // Note that the SBI instruction can be used to toggle one single bit in a port.
  223. ; set initial timer value ~40000
  224. /*ldi r19, 0x40
  225. ldi r20, 0x9C*/
  226. ldi r19, 0xFE;BD
  227. ldi r20, 0xFF;F0
  228. sts TCNT1H, r20
  229. sts TCNT1L, r19
  230. ; set prescaler to 1/256
  231. ldi r19, TCCR1B
  232. ori r19, 0x04
  233. sts TCCR1B, r19
  234. ; enbable tim1 overflow
  235. ldi r19, TIMSK1
  236. ori r19, 0x01
  237. sts TIMSK1, r19
  238. // 2. Enable interrupts if needed sei
  239. //------------------------------------------------------------------------------
  240. // 3. Load initial values of index registers
  241. // Z, X, Y
  242. ; Set Z pointer to message
  243. ldi XH,high(TAB_ROM<<1)
  244. ldi XL,low(TAB_ROM<<1)
  245. ldi r22, byte3(TAB_ROM<<1)
  246. ; load 0 to index register
  247. ldi r17, 0x00
  248. //------------------------------------------------------------------------------
  249. // Program end - Ending loop
  250. //------------------------------------------------------------------------------
  251. End:
  252. rjmp END
  253. //------------------------------------------------------------------------------
  254. // Table Declaration - place here test values
  255. // Test with different table values and different begin addresses of table (also above 0x8000)
  256. //
  257. ;.org 0x8000
  258. .org 0x7FFC
  259. TAB_ROM:
  260. .db 0x01, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,
  261. 0x1F
  262. .db 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1F,
  263. 0x1F
  264. .db 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E,
  265. 0x2F
  266. .db 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E,
  267. 0x3F
  268. .db 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E,
  269. 0x4F
  270. .db 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E,
  271. 0x5F
  272. .db 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E,
  273. 0x6F
  274. .db 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E,
  275. 0x7F
  276. .db 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E,
  277. 0x8F
  278. .db 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E,
  279. 0x9F
  280. .db 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD,
  281. 0xAE, 0xAF
  282. .db 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD,
  283. 0xBE, 0xBF
  284. .db 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD,
  285. 0xCE, 0xCF
  286. .db 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE,
  287. 0xEF
  288. .db 0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1,
  289. 0xF0
  290. // please correct end of this table according to the guidelines given by the teacher
  291. .db 0x00,0x00
  292. .EXIT
  293. //------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement