diff options
author | justanothercatgirl <sotov2070@gmail.com> | 2025-05-09 16:29:17 +0300 |
---|---|---|
committer | justanothercatgirl <sotov2070@gmail.com> | 2025-05-09 16:29:17 +0300 |
commit | dbf6176481b6421517c612a9042f0c6d6e773046 (patch) | |
tree | c45f5907aef2f673290bf17d3bea1551c4a221b0 /timer.s |
initial commit
Diffstat (limited to 'timer.s')
-rw-r--r-- | timer.s | 110 |
1 files changed, 110 insertions, 0 deletions
@@ -0,0 +1,110 @@ +.equ PINB, 0x03 +.equ DDRB, 0x04 +.equ PORTB, 0x05 +.equ PIND, 0x09 +.equ DDRD, 0x0A +.equ PORTD, 0x0B +.equ TIFR0, 0x15 +.equ ADDR, 0x256 +.equ SPL, 0x3D +.equ SPH, 0x3E +.equ SREG, 0x3F +.equ TCCR0A, 0x0024 +.equ TCCR0B, 0x0025 +.equ TCNT0, 0x0026 +.equ OCR0A, 0x0027 +.equ TIMSK0, 0x006E +.equ STOFL, 0xFF +.equ STOFH, 0x08 +.equ TOIE0, 1 + +.equ LOC, 0x128 +.equ FREQ, 0x80 + +.org 0x0000 ; reset interrupt +jmp init +.org 0x0040 ; timer 0 overflow interrupt +jmp tmrint + + +.org 0x0068 +init: + ; IO + sbi DDRB, 5 + sbi DDRD, 2 + cbi PORTB, 5 + cbi PORTD, 2 + ; stack + ldi r16, STOFL + ldi r17, STOFH + out SPL, r16 + out SPH, r17 + ; initial + ldi r16, 69 + sts ADDR, r16 + ; timer + ldi r18, 0b00000001 + out TCCR0B, r18 + ldi r18, TOIE0 + sts TIMSK0, r18 + sei + rcall main + +tmrint: + push r18 + in r18, SREG + push r18 + push r19 + push r20 + push r21 + + lds r20, LOC + ldi r21, FREQ + inc r20 + cpse r20, r21 + rjmp .stt + + in r18, PORTD + ldi r19, (1 << 2) + eor r18, r19 + out PORTD, r18 + eor r20, r20 +.stt: + sts LOC, r20 +.exit: + pop r21 + pop r20 + pop r19 + pop r18 + out SREG, r18 + pop r18 + sei + reti + + +main: + sei + ldi r17, 128 +.loop: + lds r1, ADDR + in r6,TCNT0 + cp r1, r17 + breq .finloop + inc r1 + sts ADDR, r1 + rjmp .loop +.finloop: + + in r13, PINB + in r14, PORTB + + lds r16, ADDR + cpse r16, r17 + cbi PORTB, 5 + + in r13, PINB + in r14, PORTB + + rjmp main + + |