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
|
.include "m16def.inc"
.def tmp0 = r16
.def par0 = r17
.def par1 = r18
.def cnt = r19
.def tmp1 = r20
.def tmp2 = r21
init:
ldi tmp0, HIGH(RAMEND)
out SPH, tmp0
ldi tmp0, LOW(RAMEND)
ldi par0, 0xFF
ldi par1, 0xFF
rcall wait
out SPL, tmp0
ldi tmp0, 0b11111111
out DDRA, tmp0
ldi tmp0, 0b11111111
out DDRB, tmp0
ldi tmp0, 0x31
mov cnt, tmp0
out PORTA, tmp0
ldi tmp0, 0x42
out PORTB, tmp0
ldi tmp0, 0b11000000
out DDRD, tmp0
ldi tmp0, 0b00000000
out PORTD, tmp0
main:
ldi par0, 0b11000011
rcall status
wait:
mov tmp0, par0
dec par0
nop
brne wait
mov par0, tmp0
dec par1
nop
brne wait
inc cnt
out PORTA, cnt
ret
; Output the status
; par0 = Status bits
status:
ldi tmp0, 1
status_loop:
mov tmp1, par0
and tmp1, tmp0
cp tmp0, tmp1
breq status_set
ldi tmp1, 0b00111111
out PORTD, tmp1
ldi tmp1, 0b10111111
out PORTD, tmp1
rjmp status_end
status_set:
ldi tmp1, 0b01111111
out PORTD, tmp1
ldi tmp1, 0b11111111
out PORTD, tmp1
rjmp status_end
status_end:
lsl tmp0
cpi tmp0, 0
brne status_loop
ret
|