Hallo, meiner Meinung nach, müsste der Timer sofort nachdem das Programm gestartet wurde, die 2 LEDs an PORTB wieder ausschalten, aber sie bleiben komischerweise an. Vielleicht hat jemand einen Hinweis, was ich falsch gemacht habe. Vielen Dank im voraus! Gruß Philipp .include "m8def.inc" .def temp = r16 ;----------------- ;Interrupt-Tabelle ;----------------- .org 0x000 rjmp reset .org 0x009 rjmp timer0 ;----------------- timer0: ldi temp, 0b11111111 out PORTB, temp reti reset: ;---------------------- ;Interrupts ausschalten ;---------------------- cli ;---------------------- ;-------------- ;Stack anlgegen ;-------------- ldi temp, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse out SPL, temp ldi temp, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse out SPH, temp ;-------------- ;---------------------- ;Interrupts einschalten ;---------------------- sei ;---------------------- ;----------------- ;PortB als Ausgabe ;----------------- ldi temp, 0xFF out DDRB, temp ;----------------- ;--------------------- ;beide LEDs anschalten ;--------------------- ldi temp, 0b11111100 out PORTB, temp ;-------------------- ;---------- ;Timer-Init ;---------- in temp, TIMSK sbr temp, 0b00000001 out TIMSK, temp ldi temp, 0 out TCNT0, temp ; Startwert des Timers ldi temp, 0b00000101 out TCCR0, temp ; Timer starten mit Vorteiler 1024 ;---------- main: rjmp main
Hallo Arno, das ist komisch! Ich hab es auf den MC übertragen, aber es leuchten beide LEDs weiter. :/ Gruß Philipp
Könnte es sein das mit dem Takt was nicht stimmt? Laut Studio vergehen 65.538,25 µs. Wenn dein Takt zu langsam ist, dauert es eventuell lange.
Nun weiss ich woran es liegt. In deinem listing steht inklude m8dev.inc, deshalb habe ich zuerst mit mega8 simuliert. Für den mega16 stimmt aber dann der Interruptvector nicht. Schreib mal statt .org 0x009 , OVF0adr oder .org 0x012. Dann geht es.
Hallo...?? Mir ist da noch was aufgefallen....? Eigentlich sollte der TIMER inizialisiert werden während die Interrupt's ausgeschaltet sind???? sO Hab ichs bisher in allen anderen Listings gesehen.. Hier werden die Interupt's aber nur während der Stack Initialisierung ausgeschaltet...
Hallo, da es sich hier nur ein Testprogrammchen handelte habe ich nichts dazu gesagt. Der Befehl "sei" ist dort wo er jetzt steht nicht nötig, da das int-Flag nach dem Reset gelöscht ist. Den Befehl sollte man direkt nach dem Start des Timers setzen. ldi temp, 0b00000101 out TCCR0, temp ; Timer starten mit Vorteiler 1024 sei Aber es war ja nur ein Testprogramm. Gruß, Arno
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.