Advertisement
Guest User

Untitled

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