.include "m8def.inc" .def temp1 = r17 .def temp2 = r16 .def pwm_vari = r18 ;variable für PWM vorladen (pwm_vari initialisieren) ldi pwm_vari,0x6d ; Setze erstmal "pwm" auf 6d => led leuchtet schwach ;init_STACK ldi temp1, HIGH(RAMEND) ; Stackpointer initialisieren out SPH, temp1 ldi temp1, LOW(RAMEND) out SPL, temp1 ;int_PORT_D ldi temp2, 0< bei drücken logisch 0 loop: sbis pind, 0x00 ;skip if bit is set; wenn PortD Pin0 logisch 1 ;(taste nicht gedrückt) wird nächster Befehl übersprungen rjmp hoch sbis pind, 0x01 ;skip if bit is set; wenn PortD Pin1 logisch 1 ;(taste nicht gedrückt) wird nächster Befehl übersprungen rjmp runter rjmp loop ;solange loop bis eine der beiden pins logisch 0 (Taste gedrückt) ;variable für PWM manipulieren hoch: cpi pwm_vari, 0xff ;Vergleiche den Inhalt von "pwm_vari" mit 0xff (dez255) breq max ;Springe zu "max", wenn "pwm_vari 0xff ist inc pwm_vari ;sonst erhöhe (increase) "pwm_vari" out OCR1AH, pwm_vari ;gib momentanen pwm_vari an OCR1AH aus rcall warte ;Springe ins Unterprogramm "warte" rjmp loop max: ldi pwm_vari,0x10 ;Lade 10 in pwm_vari rjmp loop ;Springe in Hauptschleife min: ldi pwm_vari,0x08 ;Lade 8 in pwm_vari rjmp loop ;Springe in Hauptschleife runter: cpi pwm_vari,0x00 ;Vergleiche den Inhalt von "pwm_vari" mit 0 breq min ;Springe zu "min", wenn "pwm-vari" 0 ist dec pwm_vari ;sonst erniedrige "pwm_vari" out OCR1AH,pwm_vari ;gib momentanen pwm_vari an OCR1AH aus rcall warte ;Springe ins Unterprogramm "warte" rjmp loop ;Wenn Du wieder da bist,springe in Hauptschleife warte: ;Wartezeit wegen Kontaktprellen erzeugen ldi R22,67 ;Lade R22 mit 67 LOOP0: ;Äussere Schleife ldi R23,198 ;Lade R23 mit 198 LOOP1: dec R23 ;Erniedrige R18 brne LOOP1 ;solange R23 nicht 0 ist, bleib in der Schleife dec R22 ;Erniedrige R22 brne LOOP0 ;solange R22 nicht 0 ist, bleib in der Schleife ret ;Wenn Schleifenzeit um ist, hüpfe dahin, wo Du hergekommen bist