aboutsummaryrefslogtreecommitdiffstats
path: root/timer.s
diff options
context:
space:
mode:
authorjustanothercatgirl <sotov2070@gmail.com>2025-05-09 16:29:17 +0300
committerjustanothercatgirl <sotov2070@gmail.com>2025-05-09 16:29:17 +0300
commitdbf6176481b6421517c612a9042f0c6d6e773046 (patch)
treec45f5907aef2f673290bf17d3bea1551c4a221b0 /timer.s
initial commit
Diffstat (limited to 'timer.s')
-rw-r--r--timer.s110
1 files changed, 110 insertions, 0 deletions
diff --git a/timer.s b/timer.s
new file mode 100644
index 0000000..94e97ae
--- /dev/null
+++ b/timer.s
@@ -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
+
+