Guest User

Untitled

a guest
Jan 24th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.76 KB | None | 0 0
  1. .equ DDRB, 0x04
  2. .equ PORTB, 0x05
  3.  
  4. .equ TCCR0B, 0x25
  5. .equ TCNT0, 0x26
  6. .equ TIMSK0, 0x6e
  7.  
  8. .equ SPL, 0x3d
  9. .equ SPH, 0x3e
  10. .equ SREG, 0x3f
  11.  
  12. .equ COUNTER_ADDR, 0x0100
  13.  
  14.  
  15. .org 0x00
  16. __reset:
  17.  
  18. ; 0x00 RESET
  19. jmp __init
  20.  
  21. ; 0x02 INT0
  22. jmp __bad_interrupt
  23.  
  24. ; 0x04 INT1
  25. jmp __bad_interrupt
  26.  
  27. ; 0x06 PCINT0
  28. jmp __bad_interrupt
  29.  
  30. ; 0x08 PCINT1
  31. jmp __bad_interrupt
  32.  
  33. ; 0x0a PCINT2
  34. jmp __bad_interrupt
  35.  
  36. ; 0x0c WDT
  37. jmp __bad_interrupt
  38.  
  39. ; 0x0e TIMER2_COMPA
  40. jmp __bad_interrupt
  41.  
  42. ; 0x10 TIMER2_COMPB
  43. jmp __bad_interrupt
  44.  
  45. ; 0x12 TIMER2_OVF
  46. jmp __bad_interrupt
  47.  
  48. ; 0x14 TIMER2_CAPT
  49. jmp __bad_interrupt
  50.  
  51. ; 0x16 TIMER1_COMPA
  52. jmp __bad_interrupt
  53.  
  54. ; 0x18 TIMER1_COMPB
  55. jmp __bad_interrupt
  56.  
  57. ; 0x1a TIMER1_OVF
  58. jmp __bad_interrupt
  59.  
  60. ; 0x1c TIMER0_COMPA
  61. jmp __bad_interrupt
  62.  
  63. ; 0x1e TIMER0_COMPB
  64. jmp __bad_interrupt
  65.  
  66. ; 0x20 TIMER0_OVF
  67. jmp __timer0_overflow_handler
  68.  
  69. ; 0x22 SPI_STC
  70. jmp __bad_interrupt
  71.  
  72. ; 0x24 USART_RX
  73. jmp __bad_interrupt
  74.  
  75. ; 0x26 USART_UDRE
  76. jmp __bad_interrupt
  77.  
  78. ; 0x28 USART_TX
  79. jmp __bad_interrupt
  80.  
  81. ; 0x2a ADC
  82. jmp __bad_interrupt
  83.  
  84. ; 0x2c EE_READY
  85. jmp __bad_interrupt
  86.  
  87. ; 0x2e ANALOG_COMP
  88. jmp __bad_interrupt
  89.  
  90. ; 0x30 TWI
  91. jmp __bad_interrupt
  92.  
  93. ; 0x32 SPM_READY
  94. jmp __bad_interrupt
  95.  
  96.  
  97. __init:
  98. ; r1 = zero register
  99. eor r1, r1
  100.  
  101. ; SREG = 0
  102. out SREG, r1
  103.  
  104. ; SP = 0x08FF
  105. ldi r28, 0xFF
  106. ldi r29, 0x08
  107. out SPH, r29
  108. out SPL, r28
  109.  
  110. call main
  111. jmp _exit
  112.  
  113.  
  114. __bad_interrupt:
  115. jmp __reset
  116.  
  117.  
  118. __timer0_overflow_handler:
  119. ; prologue
  120. push r1
  121. push r0
  122. in r0, SREG
  123. push r0
  124. eor r1, r1
  125. push r24
  126. push r28
  127. push r29
  128. in r28, SPL
  129. in r29, SPH
  130.  
  131. ; disable interrupts
  132. cli
  133.  
  134. ; counter++
  135. lds r24, COUNTER_ADDR
  136. subi r24, 0xFF
  137. sts COUNTER_ADDR, r24
  138.  
  139. ; enable interrupts
  140. sei
  141.  
  142. ; prologue
  143. nop
  144. pop r29
  145. pop r28
  146. pop r24
  147. pop r0
  148. out SREG, r0
  149. pop r0
  150. pop r1
  151. reti
  152.  
  153.  
  154. main:
  155. ; prologue: save Y; Y = SP
  156. push r28
  157. push r29
  158. in r28, SPL
  159. in r29, SPH
  160.  
  161. ; TCCR0B = 0x05
  162. ldi r24, 0x45
  163. ldi r25, 0x00
  164. ldi r18, 0x05
  165. movw r30, r24
  166. st Z, r18
  167.  
  168. ; TIMSK0 = 0x01
  169. ldi r24, 0x6E
  170. ldi r25, 0x00
  171. ldi r18, 0x01
  172. movw r30, r24
  173. st Z, r18
  174.  
  175. ; counter = 0
  176. sts COUNTER_ADDR, r1
  177.  
  178. ; enable interrupts
  179. sei
  180.  
  181. ; DDRB = 0xFF
  182. ldi r24, 0x24
  183. ldi r25, 0x00
  184. ldi r18, 0xFF
  185. movw r30, r24
  186. st Z, r18
  187.  
  188. ; PORTB = 0x00
  189. ldi r24, 0x25
  190. ldi r25, 0x00
  191. ldi r18, 0x00
  192. movw r30, r24
  193. st Z, r18
  194.  
  195. _temp0:
  196. ; if (counter != 10) jmp _temp0
  197. lds r24, COUNTER_ADDR
  198. cpi r24, 0x0a
  199. brne _temp0
  200.  
  201. ; counter = 0
  202. ldi r18, 0x00
  203. sts COUNTER_ADDR, r18
  204.  
  205. ; PORTB = ~PORTB
  206. ; read
  207. ldi r24, 0x25
  208. ldi r25, 0x00
  209. movw r30, r24
  210. ld r18, Z
  211. ; write
  212. ldi r24, 0x25
  213. ldi r25, 0x00
  214. ; negate
  215. com r18
  216. movw r30, r24
  217. st Z, r18
  218.  
  219. rjmp _temp0
  220.  
  221.  
  222. _exit:
  223. cli
  224.  
  225.  
  226. __stop_program:
  227. rjmp __stop_program
Add Comment
Please, Sign In to add comment