Advertisement
Guest User

zad a

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