.INCLUDE "m8535def.inc" .include "avr/io.h" ldi r16, 0xFF out DDRA, r16 ; A auf Ausgang ldi r16, 0xFF out DDRC, r16 ; C auf Ausgang ldi r16, 0xFF out DDRD, r16 ; D auf Ausgang ldi r16, 0x00 out DDRB, r16 ; B auf Eingang ldi r17, 0x00 ; Taktregister nullen ldi r18, 0x00 ; Sekunden nullen ldi r19, 0x00 ; Minuten nullen ldi r20, 0x00 ; Stunden nullen ldi r21, 0x01 ; +1 für addieren .equ r3=60 .equ r4=24 .macro warten1 ; ============================= ; Warteschleifen-Generator ; 4000000 Zyklen: ; ----------------------------- ; warte 3999996 Zyklen: ldi R25, $24 WGLOOP0: ldi R26, $BC WGLOOP1: ldi R27, $C4 WGLOOP2: dec R27 brne WGLOOP2 dec R26 brne WGLOOP1 dec R25 brne WGLOOP0 ; ----------------------------- ; warte 3 Zyklen: ldi R25, $01 WGLOOP3: dec R25 brne WGLOOP3 ; ----------------------------- ; warte 1 Zyklus: nop ; ============================= .endmakro testlauf: sbis PINB,0 rjmp hoch rjmp testlauf hoch: add r21, r18 ; addieren +1 cp r3, r18 ; vergleichen brsh minuten ; wenn 60, springe zu minuten warten1 ; ansonsten warten rjmp testlauf ; zurück minuten: clr r18 ; sekunden clearen add r21, r19 ; addieren +1 cp r3, r19 ; vergleichen brsh stunden ; wenn 60, springe zu stunden warten1 ; ansonsten warten rjmp testlauf ; zurück stunden: clr r18 ; sekunden clearen clr r19 ; minuten clearen add r21, r20 ; addieren +1 cp r4, r20 ; vergleichen brsh clearen ; wenn 24, springe zu clearen warten1 ; ansonsten warten rjmp testlauf ; zurück clearen: clr r18 clr r19 clr r20 rjmp testlauf