51e4c32f8743a1afec6070a28d1940f51b8dda06
[my-code/atmel.git] / beginners / rgb_moritz.asm
1 ;
2 ; rgb moritz
3 ;
4
5 ; hopefully more improved version of rgb for mali
6
7 ; author: hackbard@hackdaworld.org
8
9
10 .include "../include/2313def.inc"
11
12 ; defines & equals
13 .def zero = r0
14 .def one = r1
15 .def tmp = r16
16 .def count = r17
17 .def red = r18
18 .def green = r19
19 .def blue = r20
20 .def rgb_level = r21
21 .equ pin_red = 0x01
22 .equ pin_green = 0x02
23 .equ pin_blue = 0x04
24
25 ; interrupt vectors
26 ; reset
27 rjmp INIT
28 ; int0
29 reti
30 ; int1
31 reti
32 ; timer/counter capt 1
33 reti
34 ; timer/counter compare
35 reti
36 ; timer/counter overflow 1
37 rjmp TCO1
38 ; timer/counter overflow 0
39 reti
40 ; uart rx complete
41 reti
42 ; uart data register empty
43 reti
44 ; uart tx complete
45 reti
46 ; analog comparator
47 reti
48
49 ;
50 ; init routine
51 ;
52
53 INIT:
54
55 ; stack pointer
56 ldi tmp,low(RAMEND)
57 out SPL,tmp
58
59 ; timer: clock/8
60 ldi tmp,(1<<CS11)
61 out TCCR1B,tmp
62
63 ; enable timer overflow interrupt
64 ldi tmp,(1<<TOIE1)
65 out TIMSK,tmp
66
67 ; register values
68 ldi tmp,1
69 mov one,tmp
70 ldi tmp,0
71 mov zero,tmp
72
73 ; port b 0-2 -> output
74 ; port b 0-2 -> high
75 ldi tmp,0x07
76 out DDRB,tmp
77 out PORTB,tmp
78
79 ;
80 ; more init
81 ;
82
83 ; rgb offsets
84 mov red,zero
85 ldi tmp,85
86 mov green,tmp
87 ldi tmp,170
88 mov blue,tmp
89
90 ; level init
91 ldi rgb_level,0x07
92
93 ; init count variable
94 mov count,zero
95
96 ;
97 ; main routine
98
99
100 MAIN:
101
102 rjmp MAIN
103
104 TCO1:
105
106 cp count,zero
107 brne CHECK_RED
108 mov rgb_level,zero
109
110 CHECK_RED:
111
112 cp count,red
113 brne CHECK_GREEN
114 ori rgb_level,pin_red
115
116 CHECK_GREEN:
117
118 cp count,green
119 brne CHECK_BLUE
120 ori rgb_level,pin_green
121
122 CHECK_BLUE:
123
124 cp count,blue
125 brne SET_PORTS
126 ori rgb_level,pin_blue
127
128 SET_PORTS:
129
130 out PORTB,rgb_level
131
132 reti
133