So, wenn ich das Umschalten von PB2 in die Interrouptroutine mache, hör ich kein Piepen mehr. Nur wenn ich das Umschalten so mache, wie wir das bei dem "Lichtschalter" gemacht haben.
Hier der Code:
Finds irgendwie komisch :/Code:.include "m8def.inc" .equ time0_1 = 256-2 ;Damit wird der Timer vorgeladen .equ Summer = PB2 ;Summer an B.2 .def tmp = r16 ;Mein Universallregister .def statusreg = r17 ;Mein Statusregister ;.def zaehler = r18 ;Mein Zählregister .org 0x000 rjmp reset ;Interruptvektor "reset:" .org OVF0addr rjmp pruefZaehler ;Interruptvektor für Timer0 Überlauf, hier springt ;das Programm hin, wenn der Timer überläuft reset: ;Stack einrichten ldi tmp, HIGH(RAMEND) ;HIGH-Byte der obersten RAM-Adresse out SPH, tmp ldi tmp, LOW(RAMEND) ;LOW-Byte der obersten RAM-Adresse out SPL, tmp sbi DDRB, Summer ;B.2 als Ausgang sbi PORTB, Summer ;B.2 auf HIGH stellen ;Timer Register werden belegt, hier Timer 0 ldi tmp, (1<<CS02) ;prescaler ist 512 out TCCR0, tmp ;Register TCCR0 ist für den Prescaller zuständig ldi tmp, (1<<TOIE0) ;Hier werden Interrupts nach Timer0 Überlauf eingeschaltet out TIMSK, tmp ;Register TIMSK ist dafür zuständig ldi tmp, time0_1 ;Hier wird der Timmer vorgelaen und zwar mit 255-90 out TCNT0, tmp ;Er läuft 90 mal durch, bevor ein Interrupt auftritt sei ;Interrupts zulassen loop: rjmp loop ;immer wieder zu "loop:" springen pruefZaehler: in statusreg, SREG ;SREG sichern sbis PINB, Summer ;überspringe, wenn B.2 = 0 ist cbi PORTB, Summer ;wenn B.2 = 1 ist, dann auf 0 setzen sbic PINB, Summer ;überspringe, wenn B.2 = 1 ist sbi PORTB, Summer ;wenn B.2 = 0 ist, dann auf 1 setzen ldi tmp, time0_1 ;Hier wird der Timer vorgeladen out TCNT0, tmp out SREG, statusreg ;SREG wiederholen reti ;wieder zurück, wo du hergekommen bist







Zitieren

Lesezeichen