.include "tn12def.inc" .def A = R16 .def B = R17 .def C = R18 .def D = R19 .equ Time1 = 158 ;100ms .equ Time2 = 10 ;Frequenzteiler auf Time2*100ms .org 0x0000 rjmp main ; Reset Handler .org 0x001 rjmp trigger .org OVF0addr rjmp timer0_overflow main: ldi A,0x01 out DDRB, A ldi A,0x1E out PORTB, A ldi A, 0b00000000 ; Timer deaktivieren out TCCR0, A ldi A, 0b00000010 ; TOIE0: Interrupt bei Timer Overflow out TIMSK, A ldi A, 0b00000011 ;Timer Konfigurieren out MCUCR, A ldi A, 0b01000000 ;INT0 aktivieren out GIMSK, A sei ;Interrupts aktivieren loop: rjmp loop ;Warten trigger: clr A % out GIMSK, A ;INT0 deaktivieren in A, PINB ;Wert einlesen andi A, 0b00111100 ;Maskieren lsr A ;2x rechtshift nop lsr A nop inc A ;A inc MOV D, A ldi A,0b00000101 out TCCR0,A ;Timer aktivieren ldi A, Time1 ;siehe oben^ out TCNT0, A ;Zeit einstellen ldi A,0x3F out PORTB, A ;Ausgang setzen ldi B, Time2 ;Wert übergeben clr C ;C löschen ldi A, 0b00000000 reti timer0_overflow: ; Timer 0 Overflow Handler ldi A, Time1 ;siehe oben^ % out TCNT0, A ;Zeit einstellen dec B ;B decrementieren brne ww ;solange B nicht 0 ist weiterwarten inc C ;C inc ldi B, Time2 ;B zurücksetzten cp C, D brlt ww ;solange C kleiner als D zu ww springen ldi A,0x3E ;Ausgang rücksetzen out PortB, A ldi A, 0b00000000 out TCCR0,A ;Timer deaktivieren ldi A, 0b01000000 % out GIMSK, A ;INT0 aktivieren ww: reti ;ende -> zurück um zu warten