hallo! HILFE!!!! folgender Code läuft in einer endlosschleife PORTC.4 = 1; OPTION = 2; TMR0 = 246; while(TMR0); PORTC.4 = 0; OPTION = 2; TMR0 = 246; while(TMR0); das oszilloscop zeigt leider unterschiedliche Zeiten zwischen HI und LOW warum??? ich habe einen PIC der mit FOSC von 4MHz läuft. Aalso wirkt 1MHz/prescaler auf den TMR0 warum so unterschiedliche Zeiten??
Kann es sein, dass der Compiler etwas wegoptimiert? Ich würde mal ins Assemblerlisting schauen, ob die Schleifen dort auch gleich lang sind.
Wie hoch ist dein Prescaler? Wenn der Timer zu schnell läuft, kann dein
1 | while(TMR0); |
schon mal den Moment verpassen, in dem TMR0 == 0 ist. Dann wartets nochmal nen ganzen Timerdurchlauf. Schau mal nach obs da nicht ein Overflow-Bit o.ä. gibt, was du stattdessen abfragen kannst.
Bei Timerzugriffen die Timer-enable Bits abschalten. Führt auch als zu Ausführungsproblemen. Un wie schon gesagt, das Overflow-Bit abfragen und danach löschen.
> while(TMR0);
wird nur unterbrochen, wenn genau bei der abfrage von TMR0 eben TMR0 ==
0 ist. die chance, dass das nicht der fall ist, ist sehr hoch. in einem
solchen fall zählt der timer0 noch eine runde und vielleicht ist dann
beim zeitpunkt TMR0 = 0 eventuell die abfrage TMR0 == 0, eventuell auch
diesmal nicht -> noch ne runde usw.
wenn schon dann:
TMR0 = 246;
while(TMR0 >= 246);
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.