Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .equ DDRB, 0x04
- .equ PORTB, 0x05
- .equ TCCR0B, 0x25
- .equ TCNT0, 0x26
- .equ TIMSK0, 0x6e
- .equ SPL, 0x3d
- .equ SPH, 0x3e
- .equ SREG, 0x3f
- .equ COUNTER_ADDR, 0x0100
- .org 0x00
- __reset:
- ; 0x00 RESET
- jmp __init
- ; 0x02 INT0
- jmp __bad_interrupt
- ; 0x04 INT1
- jmp __bad_interrupt
- ; 0x06 PCINT0
- jmp __bad_interrupt
- ; 0x08 PCINT1
- jmp __bad_interrupt
- ; 0x0a PCINT2
- jmp __bad_interrupt
- ; 0x0c WDT
- jmp __bad_interrupt
- ; 0x0e TIMER2_COMPA
- jmp __bad_interrupt
- ; 0x10 TIMER2_COMPB
- jmp __bad_interrupt
- ; 0x12 TIMER2_OVF
- jmp __bad_interrupt
- ; 0x14 TIMER2_CAPT
- jmp __bad_interrupt
- ; 0x16 TIMER1_COMPA
- jmp __bad_interrupt
- ; 0x18 TIMER1_COMPB
- jmp __bad_interrupt
- ; 0x1a TIMER1_OVF
- jmp __bad_interrupt
- ; 0x1c TIMER0_COMPA
- jmp __bad_interrupt
- ; 0x1e TIMER0_COMPB
- jmp __bad_interrupt
- ; 0x20 TIMER0_OVF
- jmp __timer0_overflow_handler
- ; 0x22 SPI_STC
- jmp __bad_interrupt
- ; 0x24 USART_RX
- jmp __bad_interrupt
- ; 0x26 USART_UDRE
- jmp __bad_interrupt
- ; 0x28 USART_TX
- jmp __bad_interrupt
- ; 0x2a ADC
- jmp __bad_interrupt
- ; 0x2c EE_READY
- jmp __bad_interrupt
- ; 0x2e ANALOG_COMP
- jmp __bad_interrupt
- ; 0x30 TWI
- jmp __bad_interrupt
- ; 0x32 SPM_READY
- jmp __bad_interrupt
- __init:
- ; r1 = zero register
- eor r1, r1
- ; SREG = 0
- out SREG, r1
- ; SP = 0x08FF
- ldi r28, 0xFF
- ldi r29, 0x08
- out SPH, r29
- out SPL, r28
- call main
- jmp _exit
- __bad_interrupt:
- jmp __reset
- __timer0_overflow_handler:
- ; prologue
- push r1
- push r0
- in r0, SREG
- push r0
- eor r1, r1
- push r24
- push r28
- push r29
- in r28, SPL
- in r29, SPH
- ; disable interrupts
- cli
- ; counter++
- lds r24, COUNTER_ADDR
- subi r24, 0xFF
- sts COUNTER_ADDR, r24
- ; enable interrupts
- sei
- ; prologue
- nop
- pop r29
- pop r28
- pop r24
- pop r0
- out SREG, r0
- pop r0
- pop r1
- reti
- main:
- ; prologue: save Y; Y = SP
- push r28
- push r29
- in r28, SPL
- in r29, SPH
- ; TCCR0B = 0x05
- ldi r24, 0x45
- ldi r25, 0x00
- ldi r18, 0x05
- movw r30, r24
- st Z, r18
- ; TIMSK0 = 0x01
- ldi r24, 0x6E
- ldi r25, 0x00
- ldi r18, 0x01
- movw r30, r24
- st Z, r18
- ; counter = 0
- sts COUNTER_ADDR, r1
- ; enable interrupts
- sei
- ; DDRB = 0xFF
- ldi r24, 0x24
- ldi r25, 0x00
- ldi r18, 0xFF
- movw r30, r24
- st Z, r18
- ; PORTB = 0x00
- ldi r24, 0x25
- ldi r25, 0x00
- ldi r18, 0x00
- movw r30, r24
- st Z, r18
- _temp0:
- ; if (counter != 10) jmp _temp0
- lds r24, COUNTER_ADDR
- cpi r24, 0x0a
- brne _temp0
- ; counter = 0
- ldi r18, 0x00
- sts COUNTER_ADDR, r18
- ; PORTB = ~PORTB
- ; read
- ldi r24, 0x25
- ldi r25, 0x00
- movw r30, r24
- ld r18, Z
- ; write
- ldi r24, 0x25
- ldi r25, 0x00
- ; negate
- com r18
- movw r30, r24
- st Z, r18
- rjmp _temp0
- _exit:
- cli
- __stop_program:
- rjmp __stop_program
Add Comment
Please, Sign In to add comment