Advertisement
MateuszGrabarczyk

assembler lab9

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