.include "m8def.inc" .cseg .org 0x000 .def temp1=r16 .def temp2=r17 .def temp3=r18 .def temp4=r19 .def temp5=r20 .def keyold=r21 .def keynow=r22 Main: ldi r16, HIGH(RAMEND) ;SP Initialisieren out SPH, r16 ldi r16, LOW(RAMEND) out SPL, r16 ldi temp1, 0xFF ;Port B Ausgang Out DDRB, temp1 ldi temp2, 0x00 ;Port D Eingang out DDRD, temp2 ldi temp1, 0xFF out PORTD, temp1 ;interne Pullups an ldi temp1, 0xFF mov keyold, temp1 Tastenerkennung: ldi temp1, 0x00 ;alle LEDs an = Standart Out PORTB, temp1 in keynow, PIND mov temp1, keynow eor keynow, keyold mov keyold, temp1 breq Tastenerkennung ;überspringen wenn Eor =1, bzw. keynow&keyold ungleich (xor=true) and temp1, keynow brne Tastenerkennung ldi temp3,50 ldi temp4, 120 ldi temp5, 255 Warten1: dec temp5 brne Warten1 ;brne: bei 0 überspringen Warten2: ldi temp5, 255 dec temp4 brne Warten1 ldi temp4, 120 dec temp3 brne Warten1 in Temp1, PIND and Temp1, keynow brne Tastenerkennung ;überspringen wenn 0, bzw. gleich Tastenfinden: sbis PIND, 0 rjmp Blink sbis PIND, 1 rjmp Rider Blink: ldi r16, 0xFF Out PORTB, r16 rcall Warten3 ldi r16, 0x00 Out PORTB, r16 rcall Warten3 sbis PIND, 1 rjmp Blink rjmp Tastenfinden Rider: ldi r16, 0b11111110 Out PORTB, r16 rcall Warten3 ldi r16, 0b11111101 Out PORTB, r16 rcall Warten3 ldi r16, 0b11111011 Out PORTB, r16 rcall Warten3 ldi r16, 0b11110111 Out PORTB, r16 rcall Warten3 ldi r16, 0b11101111 Out PORTB, r16 rcall Warten3 ldi r16, 0b11011111 Out PORTB, r16 rcall Warten3 ldi r16, 0b11101111 Out PORTB, r16 rcall Warten3 ldi r16, 0b11110111 Out PORTB, r16 rcall Warten3 ldi r16, 0b11111011 Out PORTB, r16 rcall Warten3 ldi r16, 0b11111101 Out PORTB, r16 rcall Warten3 sbis PIND, 1 rjmp Rider rjmp Tastenfinden Warten3: ldi temp3, 120 Warten4: dec temp5 brne Warten4 ;brne: bei 0 überspringen Warten5: ldi temp5, 50 dec temp4 brne Warten4 Warten6: ldi temp4, 30 dec temp3 brne Warten4 ret