Guest User

Untitled

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