Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2019
75
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. TIM1_C0MPA: ; Timer1 CompareA Handler
  118. TIM1_C0MPB: ; Timer1 CompareB Handler
  119. TIM1_COMPC: ; Timer1 CompareC Handler
  120. TIM1_0VF:   ; Timer1 Overflow Handler
  121.    
  122.     cpi r25, 16
  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.     inc r21             ; inkrementujemy licznik 0-15
  137.  
  138.     mov r22, r21        ; kopiujemu aktualną wartosc licznika do r22
  139.     subi r22, 16           
  140.  
  141.     cpi r22, 0
  142.     breq cycle
  143.  
  144.     return_main:
  145.     sei
  146.     reti
  147.  
  148.     cycle:
  149.     ldi r21, 0
  150.     ldi r23, 4
  151.     inc r25
  152.     jmp return_main
  153.  
  154.     reset_mode:
  155.     ldi r21, 0 
  156.     ldi r23, 0
  157.     ldi r25, 0
  158.     ldi ZL, low(2*TAB_ROM)
  159.     ldi ZH, high(2*TAB_ROM)
  160.     ldi R17, byte3(2*TAB_ROM)
  161.     jmp return_main
  162.  
  163. TIM0_COMPA: ; Timer0 CompareA Handler
  164. TIM0_COMPB: ; Timer0 CompareB Handler
  165. TIM0_OVF:   ; Timer0 Overflow Handler
  166. SPI_STC:    ; SPI Transfer Complete Handler
  167. USART0_RXC: ; USART0 RX Complete Handler
  168. USART0_UDRE:; USART0,UDR Empty Handler
  169. USART0_TXC: ; USART0 TX Complete Handler
  170. ANA_COMP:   ; Analog COmparator Handler
  171. HADC:       ; ADC Conversion Complete Handler
  172. EE_RDY:     ; EEPROM Ready Handler
  173. TIM3_CAPT:  ; Timer3 Capture Handler
  174. TIM3_COMPA: ; Timer3 CompareA Handler
  175. TIM3_COMPB: ; Timer3 CompareB Handler
  176. TIM3_COMPC: ; Timer3 CompareC Handler
  177. TIM3_OVF:   ; Timer3 Overflow Handler
  178. USART1_RXC: ; USART1 RX Complete Handler
  179. USART1_UDRE:; USART1,UDR Empty Handler
  180. USART1_TXC: ; USART1 TX Complete Handler
  181. TWI:        ; Two-wire Serial Interface Interrupt Handler
  182. SPM_RDY:    ; SPM Ready Handler
  183. TIM4_CAPT:  ; Timer4 Capture Handler
  184. TIM4_COMPA: ; Timer4 CompareA Handler
  185. TIM4_COMPB: ; Timer4 CompareB Handler
  186. TIM4_COMPC: ; Timer4 CompareC Handler
  187. TIM4_OVF:   ; Timer4 Overlflow Handler
  188. TIM5_CAPT:  ; Timer5 Capture Handler
  189. TIM5_COMPA: ; Timer5 CompareA Handler
  190. TIM5_COMPB: ; Timer5 CompareB Handler
  191. TIM5_COMPC: ; Timer5 CompareC Handler
  192. TIM5_OVF:   ; Timer5 Overlflow Handler
  193. USART2_RXC: ; USART2 RX Complete Handler
  194. USART2_UDRE:; USART2,UDR Empty Handler
  195. USART2_TXC: ; USART2 TX Complete Handler
  196. USART3_RXC: ; USART3 RX Complete Handler
  197. USART3_UDRE:; USART3,UDR Empty Handler
  198. USART3_TXC: ; USART3 TX Complete Handler
  199.     reti        ; return from all no used
  200.  
  201. ;//////////////////////////////////////////////////////////////////////////////
  202. ; Program start
  203. RESET:
  204.     //INICJALIZACJA PORTU C
  205.     ldi r17, 0xff
  206.     out DDRC, r17
  207.  
  208.     ldi r17, 0      // ustawienie portu A na wejscie
  209.     out ddra, r17       // ustawienie portu A na wejscie
  210.     ldi r17, 255
  211.     out porta, r17
  212.  
  213. keyloop:
  214.     IN R17, PINA
  215.     cpi r17, 255
  216.     brne start_program
  217.     jmp keyloop
  218.  
  219. start_program:
  220.     // licznik
  221.     ldi r21, 0      // licznik 0-15 co bajt
  222.     ldi r23, 0      // licznik pausy 0-4
  223.     ldi r25, 0      // licznik cykli 0-15
  224.  
  225.    
  226.  
  227.     //mov z, TAB_ROM
  228.     ldi ZL, low(2*TAB_ROM)
  229.     ldi ZH, high(2*TAB_ROM)
  230.     ldi R17, byte3(2*TAB_ROM)
  231.    
  232.     cli ; disable all interrupts
  233.     // Set stack pointer to top of RAM
  234.     ldi R16, HIGH(RAMEND)
  235.     out SPH, R16
  236.     ldi R16, LOW(RAMEND)
  237.     out SPL, R16
  238.    
  239.     // Enable Timer1 Overflow Interrupt
  240.    
  241.     // OCR0A - 0x1e84 = 7812 -> 2Hz = 0,5sec timer1
  242.     LDI R27,0x84        //Load immediate
  243.     LDI R28,0x1E        //Load immediate
  244.     STS 0x0089,R28      //Store direct to data space
  245.     STS 0x0088,R27      //Store direct to data space
  246.  
  247.  
  248.     LDI R20, (1 << TOIE1)
  249.     ori r20, (1 << OCIE1A)      // porównanie wyjścia interuptu A załączone
  250.     STS TIMSK1, R20
  251.    
  252.     //LDI R20,0x00
  253.     //STS TCNT1H, R20
  254.     //STS TCNT1L, R20
  255.     // ustawienie prescaler'a na 1024
  256.     LDI R20, (1 << CS10)           
  257.     ORI r20, (1 << CS12)
  258.     ORI r20, (1 << WGM12)       // ustawienie ctc
  259.     STS TCCR1B, R20
  260.  
  261.     SEI
  262.  
  263.  
  264. loop:
  265.     jmp loop
  266.  
  267.  
  268. //------------------------------------------------------------------------------
  269. // Program end - Ending loop
  270. //------------------------------------------------------------------------------
  271. End:
  272.     rjmp END
  273.  
  274. //------------------------------------------------------------------------------
  275. // Table Declaration -  place here test values
  276. // Test with different table values and different begin addresses of table (also above 0x8000)
  277. //
  278. //.org 0x8000
  279. TAB_ROM:    .db     0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x1F
  280.             .db     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1F, 0x1F
  281.             .db     0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F
  282.             .db     0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F
  283.             .db     0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F
  284.             .db     0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F
  285.             .db     0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F
  286.             .db     0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F
  287.             .db     0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F
  288.             .db     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F
  289.             .db     0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaA, 0xaB, 0xaC, 0xaD, 0xAE, 0xAF
  290.             .db     0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF
  291.             .db     0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF
  292.             .db     0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF
  293.             .db     0xFF, 0xFE, 0xFD, 0xFC, 0xFB, 0xFA, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF2, 0xF1, 0xF0
  294.             // please correct end of this table according to the guidelines given by the teacher
  295.             .db     0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x1F
  296. .EXIT
  297. //------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement