1 | ;+-----------------------------------------------------------------------------
|
2 | ;| Title :
|
3 | ;+-----------------------------------------------------------------------------
|
4 | ;| Funktion : RGB-Fader
|
5 | ;| Schaltung : RGB LED Anode auf PORTC.0
|
6 | ;| Kathoden über Vorwiederstände (alle 150Ohm)
|
7 | ;| Auf PORTB 0-2
|
8 | ;+-----------------------------------------------------------------------------
|
9 | ;| Prozessor : ATmega8
|
10 | ;| Takt : 3,6864 MHz
|
11 | ;| Sprache : Assembler
|
12 | ;| Datum : ...
|
13 | ;| Version : ...
|
14 | ;| Autor : ...
|
15 | ;+-----------------------------------------------------------------------------
|
16 | .include "AVR.H"
|
17 | ;------------------------------------------------------------------------------
|
18 | begin: rjmp main ; RESET External Pin, Power-on Reset, Brown-out Reset and Watchdog Reset
|
19 | reti ; INT0 External Interrupt Request 0
|
20 | reti ; INT1 External Interrupt Request 1
|
21 | reti ; TIMER2 COMP Timer/Counter2 Compare Match
|
22 | reti ; TIMER2 OVF Timer/Counter2 Overflow
|
23 | reti ; TIMER1 CAPT Timer/Counter1 Capture Event
|
24 | reti ; TIMER1 COMPA Timer/Counter1 Compare Match A
|
25 | reti ; TIMER1 COMPB Timer/Counter1 Compare Match B
|
26 | reti ; TIMER1 OVF Timer/Counter1 Overflow
|
27 | reti ; TIMER0 OVF Timer/Counter0 Overflow
|
28 | reti ; SPI, STC Serial Transfer Complete
|
29 | reti ; USART, RXC USART, Rx Complete
|
30 | reti ; USART, UDRE USART Data Register Empty
|
31 | reti ; USART, TXC USART, Tx Complete
|
32 | reti ; ADC ADC Conversion Complete
|
33 | reti ; EE_RDY EEPROM Ready
|
34 | reti ; ANA_COMP Analog Comparator
|
35 | reti ; TWI 2-wire Serial Interface
|
36 | reti ; SPM_RDY Store Program Memory Ready
|
37 | ;------------------------------------------------------------------------------
|
38 | main: ldi r16,hi8(RAMEND) ; Main program start
|
39 | out SPH,r16 ; Set Stack Pointer to top of RAM
|
40 | ldi r16,lo8(RAMEND)
|
41 | out SPL,r16
|
42 | ldi r16,0b00000111
|
43 | out DDRB,r16
|
44 | out DDRC,r16 ; PortB und C auf Ausgang
|
45 | out PORTB,r16
|
46 | ldi r16,0b0000001 ; Anode der LEDs
|
47 | out PORTC,r16
|
48 |
|
49 | ldi r16,0 ; ROT Startwerte Laden
|
50 | ldi r19,0 ; GRÜN
|
51 | ldi r18,255 ; BLAU
|
52 |
|
53 | ;------------------------------------------------------------------------------
|
54 | mainloop: wdr
|
55 |
|
56 | rot_up: inc r16 ; Rot bis 255 zählen
|
57 | rcall light ; nach jeden durchlauf in die "light" Outputroutine
|
58 | cpi r16,255 ; Wenn Rot = 255 weiter zur nächsten
|
59 | brne rot_up
|
60 |
|
61 | blau_dn: dec r18 ; Blau herunterzählen
|
62 | rcall light ; Licht ausgeben
|
63 | cpi r18,0 ; Wenn Blau = 0 weiter zur nächsten
|
64 | brne blau_dn
|
65 |
|
66 | grün_up: inc r17 ; Grün hinauf zählen
|
67 | rcall light
|
68 | cpi r17,255
|
69 | brne grün_up
|
70 |
|
71 | rot_dn: dec r16 ; Rot hinunter zählen
|
72 | rcall light
|
73 | cpi r16,0
|
74 | brne rot_dn
|
75 |
|
76 | blau_up: inc r18 ; Blau hinauf zählen
|
77 | rcall light
|
78 | cpi r18,255
|
79 | brne blau_up
|
80 |
|
81 | grün_dn: dec r17 ; Grün hinunter zählen
|
82 | rcall light
|
83 | cpi r17,0
|
84 | brne grün_dn
|
85 |
|
86 | rjmp mainloop
|
87 | ;------------------------------------------------------------------------------
|
88 |
|
89 | light: ; Leucht Routine
|
90 |
|
91 | ldi r21,20 ; Lade Wert für Schleife Daurchlaufdauer
|
92 | loopL:
|
93 | mov r20,r16 ; Setze Rot für für die Schleife ein
|
94 | cbi PORTB,0 ; Rote LED auf LOW, damit sie Leuchtet
|
95 | loopR: dec r20 ; Schleife für Leuchtdauer ROT
|
96 | brne loopR
|
97 | sbi PORTB,0 ; Ausgang Rot wieder auf High
|
98 |
|
99 | mov r20,r17
|
100 | cbi PORTB,1
|
101 | loopG: dec r20
|
102 | brne loopG
|
103 | sbi PORTB,1
|
104 |
|
105 | mov r20,r18
|
106 | cbi PORTB,2
|
107 | loopB: dec r20
|
108 | brne loopB
|
109 | sbi PORTB,2
|
110 |
|
111 | dec r21 ; Schleife für Wiederholungen um die
|
112 | brne loopL ; Duchalaufdauer einzustellen
|
113 |
|
114 | ret
|