; ***********************************************************************************************; * RGB-Fader + Festfarben + Strobo	+ Disco-Blinker												*; *																								*; * für ATMega 8515																				*; *																								*; * Version 3.0 - 22.03.2008																	*; *																								*; * LEDs über Mosfet-Schalter an Port A															*; *																								*; * PortA0 = Rot, PortA1 = Grün, PortA2 = Blau													*; ***********************************************************************************************.include "m8515def.inc"; ------------------------------------------------------------------------------------------------; Register etc. definieren; ------------------------------------------------------------------------------------------------.def temp0 		= R16						; Register definieren.def temp1 		= R17.def temp2 		= R18.def temp_ZL	= R1.def temp_ZH	= R2.def temp_Sreg 	= R3.def Speed 		= R19.def R  		= R20.def G  		= R21.def B  		= R22.def R_Out 		= R4.def G_Out  	= R5.def B_Out		= R6.def PWM_Count 	= R23.equ XTAL 		= 16000000					; nur zur Info; ------------------------------------------------------------------------------------------------; Interrupt-Vektor-Tabelle Mega 8515; ------------------------------------------------------------------------------------------------.CSEG.org 0x0000		rjmp    Start                  		; Reset Handler		reti								; External Interrupt Request 0		reti								; External Interrupt Request 1		reti								; Timer/Counter1 Capture Event		reti								; Timer/Counter1 Compare Match A		reti								; Timer/Counter1 Compare Match B		reti								; Timer/Counter1 Overflow		rjmp    ISR_PWM       				; Timer/Counter0 Overflow --> PWM-Routine		reti								; Serial Transfer Complete		reti								; Rx Complete		reti								; Data Register Empty		reti								; Tx Complete		reti								; Analog Comparator		reti								; External Interrupt Request 2		reti								; Timer/Counter0 Compare Match		reti								; EEPROM Ready		reti								; Store Program memory Ready; ------------------------------------------------------------------------------------------------; Stackpointer, Ports setzen; ------------------------------------------------------------------------------------------------Start:		ldi 	temp0, LOW(RAMEND)			; LOW-Byte der obersten RAM-Adresse		out 	SPL, temp0		ldi 	temp0, HIGH(RAMEND) 		; HIGH-Byte der obersten RAM-Adresse		out 	SPH, temp0		ldi     temp0, 0b00000001			; CS00 setzen: Teiler 1		out     TCCR0, temp0		ldi     temp0, (1<<TOIE0)      		; TOIE0: Interrupt bei Timer Overflow		out     TIMSK, temp0		sei									; Interrupts aktivieren		ldi 	temp0, 0			out		DDRC, temp0					; PortC auf Eingang (DIP-Schalter)		ldi		temp0, 0b00000001		out 	DDRE, temp0					; PortE0 auf Ausgang (Status-LED), 1 und 2 auf Eingang		sbi		PORTE, 1					; Pull-Up-Widerstände		sbi		PORTE, 2		ldi 	temp0, 0xff		out 	DDRA, temp0					; PortA auf Ausgang setzen (PWM-Ausgang)		out		PORTC, temp0				; Pull-Up-Widerstände an PORTC aktivieren		sbi 	DDRD, 7						; PortD7 auf Ausgang ("On"-LED); ------------------------------------------------------------------------------------------------; "Grundzustand" - Farben über DIP-Schalter einstellbar, Strobo; ------------------------------------------------------------------------------------------------Schalter_Loop:    							; DIP-Schalter abfragen		sbis	PINC, 6						; Schalter 7 ist aus, weiter		rcall	RGB_Fade					; Schalter an --> RGB-Fader		sbis	PINC, 5						; Schalter 6 ist aus, weiter		rcall	Disco						; Schalter an --> Disco-Blinker		cbi		PORTE, 0					; Status-LED an		sbic	PINC, 3						; Schalter 4 abfragen (Grün Hälfte/Rosa-Korrektur)		rjmp	Farben						; Korrektur nicht gewünscht, "normal weiter"		in 		temp1, PINC					; Dip-Schalter abfragen		andi	temp1, 0b00000111			; Sonderfall "Weiss"		brne	Farben						; nicht alle Schalter an (nicht Weiss), also weiter zu Farben		ldi		R, 220						; weniger Rot wegen Rosa-Stich von Rebels		ldi		G, 255		ldi		B, 255		rcall	Dimmerkurve					; Helligkeits-Korrektur und Ausgabe		rjmp	Strobo						; Farbeinstellung überspringen, weiter zu StroboFarben:		ldi		R, 255						; Rot an		sbic	PINC, 0						; Schalter 1 abfragen (Rot)		ldi		R, 0						; Schalter ist aus, Rot aus		ldi		G, 0						; Grün aus		sbic	PINC, 1						; Schalter 2 abfragen (Grün)		rjmp	Blau						; Schalter ist aus, weiter		ldi		G, 255						; Schalter ist an, Grün an		sbis	PINC, 3						; Schalter 4 abfragen (Grün Hälfte/Rosa-Korrektur)		ldi		G, 128						; Schalter ist an, Grün HälfteBlau:		ldi		B, 255						; Blau an		sbic	PINC, 2						; Schalter 3 abfragen (Blau)		ldi		B, 0						; Schalter ist aus, Blau aus		rcall	Dimmerkurve					; Helligkeits-Korrektur und AusgabeStrobo:		sbic	PINC, 4						; Schalter 5 abfragen (Strobo)		rjmp	Schalter_Loop				; Schalter aus, kein Strobo; ------------------------------------------------------------------------------------------------; Strobo		ldi		Speed, 255					; Strobo-Grundgeschwindigkeit		sbic	PINC, 7						; Schalter 8 abfragen (Rot/blau Strobo)		rjmp	Strobo_normal				; Schalter aus, normales Strobo		ldi		R, 255						; Rot		ldi		G, 0		ldi		B, 0		rcall	Dimmerkurve					; Helligkeits-Korrektur und Ausgabe		cbi		PORTE, 0					; Status-LED an		ldi		temp1, 2					; für 2 Zyklen RotStrobo_rot:				rcall	warten				dec		temp1		brne	Strobo_rot		ldi		R, 0						; dann aus		ldi		G, 0		ldi		B, 0		rcall	Dimmerkurve					; Helligkeits-Korrektur und Ausgabe		sbi		PORTE, 0					; Status-LED aus		ldi		temp1, 10					; und 10 Zyklen ausStrobo_rot_aus:		rcall	warten				dec		temp1		brne	Strobo_rot_aus		ldi		R, 0						; dann Blau		ldi		G, 0		ldi		B, 255		rcall	Dimmerkurve					; Helligkeits-Korrektur und Ausgabe		cbi		PORTE, 0					; Status-LED an		ldi		temp1, 2					; für 2 Zyklen BlauStrobo_blau:		rcall	warten				dec		temp1		brne	Strobo_blau		ldi		R, 0						; dann aus		ldi		G, 0		ldi		B, 0		rcall	Dimmerkurve					; Helligkeits-Korrektur und Ausgabe		sbi		PORTE, 0					; Status-LED aus		ldi		temp1, 10					; und 10 Zyklen ausStrobo_blau_aus:		rcall	warten				dec		temp1		brne	Strobo_blau_aus		rjmp	Schalter_Loop				Strobo_normal:		ldi		temp1, 2					; für 2 Zyklen anStrobo_an:				rcall	warten				dec		temp1		brne	Strobo_an		ldi		R, 0						; dann aus		ldi		G, 0		ldi		B, 0		rcall	Dimmerkurve					; Helligkeits-Korrektur und Ausgabe		sbi		PORTE, 0					; Status-LED aus		ldi		temp1, 10					; und 10 Zyklen ausStrobo_aus:		rcall	warten				dec		temp1		brne	Strobo_aus		rjmp	Schalter_Loop; ------------------------------------------------------------------------------------------------; Fade-Routine 1; ------------------------------------------------------------------------------------------------RGB_Fade:				ldi		Speed, 127					; Grundgeschwindikeit WarteschleifeRGB_Loop:		ldi		R, 255						; erst mal Rot		ldi		G, 0		ldi		B, 0		rcall	Dimmerkurve					; Helligkeits-Korrektur und Ausgabe							cbi		PORTE, 0					; Status-LED anrot_gelb:									; dann Grün dazu --> Gelb		sbic	PINC, 6						; Schalter 7 ist an, weiter mit Fader		rjmp	RGB_Ende					; Schalter aus --> RGB-Fader beenden		sbis	PINC, 7						; Schalter 8 ("Fader 2") abfragen?		rcall	Rainbow_Fade				; Schalter an, weiter zu Programm 2		rcall	warten		sbi		PORTE,0						; Status-LED aus		inc		G		rcall	Dimmerkurve					; Helligkeits-Korrektur und Ausgabe		cpi		G, 255		brlo	rot_gelb		cbi		PORTE, 0					; Status-LED angelb_gruen:									; Rot weg --> Grün		sbic	PINC, 6						; Schalter 7 ist an, weiter mit Fader		rjmp	RGB_Ende					; Schalter aus --> RGB-Fader beenden		sbis	PINC, 7						; Schalter 8 ("Fader 2") abfragen?		rcall	Rainbow_Fade				; Schalter an, weiter zu Programm 2		rcall	warten		sbi		PORTE,0						; Status-LED aus				dec		R		rcall	Dimmerkurve					; Helligkeits-Korrektur und Ausgabe		brne	gelb_gruen		cbi		PORTE, 0					; Status-LED angruen_cyan:									; Blau dazu --> Cyan		sbic	PINC, 6						; Schalter 7 ist an, weiter mit Fader		rjmp	RGB_Ende					; Schalter aus --> RGB-Fader beenden		sbis	PINC, 7						; Schalter 8 ("Fader 2") abfragen?		rcall	Rainbow_Fade				; Schalter an, weiter zu Programm 2		rcall	warten		sbi		PORTE,0						; Status-LED aus		inc		B		rcall	Dimmerkurve					; Helligkeits-Korrektur und Ausgabe		cpi		B, 255		brlo	gruen_cyan		cbi		PORTE, 0					; Status-LED ancyan_blau:									; Grün weg --> Blau		sbic	PINC, 6						; Schalter 7 ist an, weiter mit Fader		rjmp	RGB_Ende					; Schalter aus --> RGB-Fader beenden		sbis	PINC, 7						; Schalter 8 ("Fader 2") abfragen?		rcall	Rainbow_Fade				; Schalter an, weiter zu Programm 2		rcall	warten		sbi		PORTE,0						; Status-LED aus		dec		G		rcall	Dimmerkurve					; Helligkeits-Korrektur und Ausgabe		brne	cyan_blau		cbi		PORTE, 0					; Status-LED anblau_magenta:								; Rot dazu --> Magenta		sbic	PINC, 6						; Schalter 7 ist an, weiter mit Fader		rjmp	RGB_Ende					; Schalter aus --> RGB-Fader beenden		sbis	PINC, 7						; Schalter 8 ("Fader 2") abfragen?		rcall	Rainbow_Fade				; Schalter an, weiter zu Programm 2		rcall	warten		sbi		PORTE,0						; Status-LED aus		inc		R		rcall	Dimmerkurve					; Helligkeits-Korrektur und Ausgabe		cpi		R, 255		brlo	blau_magenta		cbi		PORTE, 0					; Status-LED anmagenta_rot:								; Blau weg --> Rot		sbic	PINC, 6						; Schalter 7 ist an, weiter mit Fader		rjmp	RGB_Ende					; Schalter aus --> RGB-Fader beenden		sbis	PINC, 7						; Schalter 8 ("Fader 2") abfragen?		rcall	Rainbow_Fade				; Schalter an, weiter zu Programm 2		rcall	warten		sbi		PORTE,0						; Status-LED aus		dec		B		rcall	Dimmerkurve					; Helligkeits-Korrektur und Ausgabe		brne	magenta_rot				rjmp 	RGB_Loop					; Fade-Zyklus von vornRGB_Ende:		ret; ------------------------------------------------------------------------------------------------; Rainbow-Fader 2; ------------------------------------------------------------------------------------------------Rainbow_Fade:				mov		temp0, R					; Farben für anderen Fader sichern		mov		temp1, G		mov		temp2, B								ldi		Speed, 254					; Grundgeschwindikeit WarteschleifeRainbow_Loop:		ldi		R, 255						; erst mal Rot		ldi		G, 0		ldi		B, 0		rcall	Dimmerkurve					; Helligkeits-Korrektur und Ausgabe							cbi		PORTE, 0					; Status-LED anrot_gruen:									; Rot ausblenden, Grün einblenden		sbic	PINC, 7						; Schalter 8 ist an, weiter mit Fader 2		rjmp	Rainbow_Ende				; Schalter aus --> zurück zu RGB-Fader 1		rcall	warten		sbi		PORTE,0						; Status-LED aus		dec		R		inc		G		rcall	Dimmerkurve					; Helligkeits-Korrektur und Ausgabe		cpi		G, 255		brlo	rot_gruen		cbi		PORTE, 0					; Status-LED angruen_blau:									; Grün ausblenden, Blau einblenden		sbic	PINC, 7						; Schalter 8 ist an, weiter mit Fader 2		rjmp	Rainbow_Ende				; Schalter aus --> zurück zu RGB-Fader 1		rcall	warten		sbi		PORTE,0						; Status-LED aus				dec		G		inc		B		rcall	Dimmerkurve					; Helligkeits-Korrektur und Ausgabe		cpi		B, 255		brlo	gruen_blau		cbi		PORTE, 0					; Status-LED anblau_rot:									; Blau ausblenden, Rot einblenden		sbic	PINC, 7						; Schalter 8 ist an, weiter mit Fader 2		rjmp	Rainbow_Ende				; Schalter aus --> zurück zu RGB-Fader 1		rcall	warten		sbi		PORTE,0						; Status-LED aus		dec		B		inc		R		rcall	Dimmerkurve					; Helligkeits-Korrektur und Ausgabe		cpi		R, 255		brlo	blau_rot		cbi		PORTE, 0					; Status-LED an				rjmp 	Rainbow_Loop				; Fade-Zyklus von vornRainbow_Ende:		mov		R, temp0					; Farben für anderen Fader wiederherstellen		mov		G, temp1		mov		B, temp2		ret; ------------------------------------------------------------------------------------------------; "Disco-Blink"-Routine; ------------------------------------------------------------------------------------------------Disco:		in		temp1, PINC					; DIP-Schalter abfragen		andi	temp1, 0b00000011			; nur die ersten zwei interessieren		mov		temp2, temp1				; merken, für Vgl, ob Schalter geändert		cpi		temp1, 0b00000011			; Programm 1		brne	Disco_P2		ldi     ZL, LOW(Disco_Farben_1*2)	; Z-Pointer laden Programm 1        ldi     ZH, HIGH(Disco_Farben_1*2)		rjmp	Disco_LoopDisco_P2:		cpi		temp1, 0b00000001			; Programm 2		brne	Disco_P3		ldi     ZL, LOW(Disco_Farben_2*2)	; Z-Pointer laden Programm 2        ldi     ZH, HIGH(Disco_Farben_2*2)		rjmp	Disco_LoopDisco_P3:		cpi		temp1, 0b00000010			; Programm 3		brne	Disco_P4		ldi     ZL, LOW(Disco_Farben_3*2)	; Z-Pointer laden Programm 3        ldi     ZH, HIGH(Disco_Farben_3*2)		rjmp	Disco_LoopDisco_P4:		ldi     ZL, LOW(Disco_Farben_4*2)	; Z-Pointer laden Programm 4        ldi     ZH, HIGH(Disco_Farben_4*2)Disco_Loop:				lpm		Speed, Z+					; Speed/"Ende-Flag" abfragen		tst		Speed						; Ende der Tabelle erreicht?		breq	Disco						; Ja, von vorne beginnen						in		temp1, PINC					; DIP-Schalter abfragen		andi	temp1, 0b00000011			; nur die ersten zwei interessieren		cp		temp2, temp1				; Wurde DIP-Schalter geändert?		brne	Disco						; Ja, Neustart mit neuem Programm		cbi		PORTE, 0					; Status-LED an		lpm		R, Z+						; Farben aus Tabelle holen		lpm		G, Z+		lpm		B, Z+		rcall	Dimmerkurve					; Helligkeits-Korrektur und Ausgabe		ldi		temp0, 64					; Grundgeschwindigkeite Disco-BlinkerDisco_warten:		sbic	PINC, 5						; Schalter 6 ist an, weiter mit Disco		ret									; Schalter aus --> Disco beenden		rcall	warten		sbi		PORTE,0						; Status-LED aus		dec		temp0		brne	Disco_warten		rjmp	Disco_Loop					; Nächste Farbe; ------------------------------------------------------------------------------------------------; Farbtabellen für Disco-Blinker-Farben; 1.Byte = Speed/Ende(255), Byte 2-4 = R, G, B; ------------------------------------------------------------------------------------------------Disco_Farben_1:.db 	128,255,0,0		; Rot.db 	128,0,255,0		; Grün.db 	128,0,0,255		; Blau.db 	128,255,0,0		; Rot.db 	128,0,255,0		; Grün.db 	128,0,0,255		; Blau.db 	64,255,0,0		; Rot.db 	64,0,255,0		; Grün.db 	64,0,0,255		; Blau.db 	64,255,0,0		; Rot.db 	64,0,255,0		; Grün.db 	64,0,0,255		; Blau.db 	128,0,255,255	; Cyan.db 	128,255,0,255	; Magenta.db 	128,255,255,0	; Gelb.db 	128,0,255,255	; Cyan.db 	128,255,0,255	; Magenta.db 	128,255,255,0	; Gelb.db 	64,0,255,255	; Cyan.db 	64,255,0,255	; Magenta.db 	64,255,255,0	; Gelb.db 	64,0,255,255	; Cyan.db 	64,255,0,255	; Magenta.db 	64,255,255,0	; Gelb.db 	0,0				; Ende TabelleDisco_Farben_2:.db 	128,255,0,0		; Rot.db 	128,0,0,255		; Blau.db 	128,210,255,255	; Weiß.db 	128,255,0,0		; Rot.db 	128,0,0,255		; Blau.db 	128,210,255,255	; Weiß.db 	64,255,0,0		; Rot.db 	64,0,0,255		; Blau.db 	64,210,255,255	; Weiß.db 	64,255,0,0		; Rot.db 	64,0,0,255		; Blau.db 	64,210,255,255	; Weiß.db 	128,255,0,0		; Rot.db 	128,0,0,255		; Blau.db 	128,210,255,255	; Weiß.db 	128,255,0,0		; Rot.db 	128,0,0,255		; Blau.db 	128,210,255,255	; Weiß.db 	64,255,0,0		; Rot.db 	64,0,0,255		; Blau.db 	64,210,255,255	; Weiß.db 	64,255,0,0		; Rot.db 	64,0,0,255		; Blau.db 	64,210,255,255	; Weiß.db 	128,255,0,0		; Rot.db 	128,210,255,255	; Weiß.db 	128,0,0,255		; Blau.db 	128,210,255,255	; Weiß.db 	128,255,0,0		; Rot.db 	128,210,255,255	; Weiß.db 	128,0,0,255		; Blau.db 	128,210,255,255	; Weiß.db 	0,0				; Ende TabelleDisco_Farben_3:.db 	255,255,90,0	; Orange.db 	255,0,0,255		; Blau.db 	255,255,128,0	; Orange.db 	255,0,255,255	; Cyan.db 	255,255,128,0	; Orange.db 	255,0,255,0		; Grün.db 	255,255,128,0	; Orange.db 	255,255,0,255	; Magenta.db 	255,0,0,255		; Blau.db 	255,255,0,255	; Magenta.db 	255,0,255,255	; Cyan.db 	255,255,0,255	; Magenta.db 	255,255,255,0	; Gelb.db 	255,0,255,0		; Grün.db 	0,0				; Ende TabelleDisco_Farben_4:.db 	64,255,0,0		; Rot.db 	64,0,0,0		; Aus.db 	64,0,255,255	; Cyan.db 	64,0,0,0		; Aus.db 	64,255,128,0	; Orange.db 	64,0,0,0		; Aus.db 	64,0,255,0		; Grün.db 	64,0,0,0		; Aus.db 	64,255,0,255	; Magenta.db 	64,0,0,0		; Aus.db 	64,255,255,0	; Gelb.db 	64,0,0,0		; Aus.db 	64,0,0,255		; Blau.db 	64,0,0,0		; Aus.db 	64,255,255,0	; Gelb.db 	64,0,0,0		; Aus.db 	0,0				; Ende Tabelle; ------------------------------------------------------------------------------------------------; ISR für Software-PWM; ------------------------------------------------------------------------------------------------ISR_PWM:    								; PWM-Ausgabe         push 	temp0        in   	temp0, SREG        push 	temp0				        ldi     temp0, 0b00000111      		; Grundzustand 1 = LED an, 0 = LED aus (wegen FET)				inc     PWM_Count              		; den PWM Zähler von 0 bis          cp      PWM_Count, R_Out       		; Ist der Grenzwert für Rot erreicht?        brlo    PWM_G						; nein, weiter zu grün        andi    temp0, 0b00000110			; ja, LED Rot ausPWM_G:         cp      PWM_Count, G_Out       		; Ist der Grenzwert für Grün erreicht?        brlo    PWM_B						; nein, weiter zu Blau        andi    temp0, 0b00000101			; ja, LED Grün ausPWM_B:        cp      PWM_Count, B_Out       		; Ist der Grenzwert für Blau erreicht?        brlo    PWM_Ausgabe					; nein, weiter zur Ausgabe        andi    temp0, 0b00000011			; ja, LED Blau aus  PWM_Ausgabe:                           		; Neue Bitbelegung ausgeben        out     PORTA, temp0 		pop 	temp0        out 	SREG, temp0					; Statusregister + Temp0 wiederherstellen		pop 	temp0				reti; ------------------------------------------------------------------------------------------------; Umrechnung über Dimmerkurve, Übergabe in PWM-Register; ------------------------------------------------------------------------------------------------Dimmerkurve:		push	temp0		in		temp0, SREG					; Register sichern		push	temp0		mov		temp_ZL, ZL		mov		temp_ZH, ZH		ldi     ZL, LOW(DK_Data*2)			; Z-Pointer laden Beginn Dimmerwerte        ldi     ZH, HIGH(DK_Data*2)		add     ZL, R						; Rot-Wert addieren, 16 Bit    	ldi     temp0,0                       	adc     ZH,temp0		lpm		R_Out, Z					; Wert aus Tabelle holen		ldi     ZL, LOW(DK_Data*2)			; Z-Pointer laden Beginn Dimmerwerte        ldi     ZH, HIGH(DK_Data*2)		add     ZL, G						; Grün-Wert addieren, 16 Bit    	ldi     temp0,0                       	adc     ZH,temp0		lpm		G_Out, Z					; Wert aus Tabelle holen		ldi     ZL, LOW(DK_Data*2)			; Z-Pointer laden Beginn Dimmerwerte        ldi     ZH, HIGH(DK_Data*2)		add     ZL, B						; Blau-Wert addieren, 16 Bit    	ldi     temp0,0                       	adc     ZH,temp0		lpm		B_Out, Z					; Wert aus Tabelle holen		pop		temp0		out		SREG, temp0		 			; Register wiederherstellen		pop		temp0		mov		ZL, temp_ZL		mov		ZH, temp_ZH		ret; ------------------------------------------------------------------------------------------------; Daten für Dimmerkurve; ------------------------------------------------------------------------------------------------DK_Data:.db     0,   0,   1,   1,   1,   1,   1,   2.db     2,   2,   2,   3,   3,   3,   4,   4.db     4,   5,   5,   5,   6,   6,   7,   7.db     8,   8,   9,   9,  10,  10,  11,  11.db    12,  12,  13,  13,  14,  14,  15,  15.db    16,  16,  17,  17,  18,  18,  19,  19.db    20,  20,  21,  21,  22,  22,  23,  23.db    24,  24,  25,  25,  26,  27,  28,  29.db    30,  30,  31,  32,  33,  34,  35,  36.db    36,  37,  38,  39,  40,  41,  42,  43.db    43,  44,  45,  46,  47,  48,  49,  50.db    51,  52,  52,  53,  54,  55,  56,  57.db    58,  59,  60,  61,  62,  63,  64,  65.db    66,  67,  68,  69,  70,  71,  72,  73.db    74,  75,  76,  77,  78,  79,  80,  81.db    82,  83,  84,  85,  86,  88,  89,  90.db    91,  92,  93,  94,  95,  96,  97,  98.db    99, 100, 102, 103, 104, 105, 106, 107.db   108, 109, 110, 112, 113, 114, 115, 116.db   117, 119, 120, 121, 122, 123, 124, 126.db   127, 128, 129, 130, 132, 133, 134, 135.db   136, 138, 139, 140, 141, 142, 144, 145.db   146, 147, 149, 150, 151, 152, 154, 155.db   156, 158, 159, 160, 161, 162, 164, 165.db   167, 168, 169, 171, 172, 173, 174, 176.db   177, 178, 180, 181, 182, 184, 185, 187.db   188, 189, 191, 192, 193, 195, 196, 197.db   199, 200, 202, 203, 204, 206, 207, 208.db   210, 211, 213, 214, 216, 217, 218, 220.db   221, 223, 224, 226, 227, 228, 230, 231.db   233, 234, 236, 237, 239, 240, 242, 243.db   245, 246, 248, 249, 251, 252, 254, 255; ------------------------------------------------------------------------------------------------; Warteschleife; ------------------------------------------------------------------------------------------------warten:    									; 3 verschachtelte Warteschleifen        push 	temp2						; Statusregister + Temp sichern        push 	temp1        push 	temp0		in   	temp0, SREG        push 	temp0		mov		temp0, Speed				; Geschwindigkeit aus Register "Speed"loop0:		ldi 	temp1, 255 					; 255 Wiederholungen		sbis	PINE, 2						; Dip 9 an? -> viertelte Dauer			ldi		temp1, 64loop1:		ldi 	temp2, 2 					; 2 Wiederholungen		sbis	PINE, 1						; Dip 10 an? -> halbe Dauer			ldi		temp2, 1loop2:                          		dec     temp2		brne    loop2		dec     temp1		brne    loop1		dec     temp0		brne    loop0        pop 	temp0		out 	SREG, temp0					; Statusregister + Temp wiederherstellen        pop 	temp0		pop 	temp1		pop 	temp2		ret; ------------------------------------------------------------------------------------------------; Und Schluss; ------------------------------------------------------------------------------------------------ende: rjmp ende