aboutsummaryrefslogtreecommitdiffstats
path: root/timer.s
blob: 94e97ae6c1bd7de7e18ca830fef08ea52540bb14 (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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
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