aboutsummaryrefslogtreecommitdiffstats
path: root/timer.s
blob: c62b2b57bf19bda0ac1b9e01aeb3d42560aea67a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
.include "def.s"

.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
	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