Gast
#1154894
Hallo, ich programmiere einen PIC16F887 mit dem freien HI-Tech C. Funktioniert eigentlich alles prima - bis auf das laden der Timer. Bin mit meinem Latein am Ende und frage mich ob andere das gleiche Problem haben und ob es überhaupt eine Lösung dafür gibt. Mein Timer0 läuft mit 1:2 Teiler von (internen) 4 MHz, d.h. bis zum Überlauf und setzen des Flags vergehen 512 uS. Das kann ich auch an folgendem Programm mit der Ausgabe an PORTD gut am Oszi nachverfolgen - es stimmt exakt. Sowie ich den Zähler von Timer0 lade, entsteht allerdings ein Offset von ca. 30 - 40 uS (d.h. wenn ich den Timer mit 0 lade vergehen 550uS, wenn ich ihn mit 127 lade, vergehen 296uS statt 256uS). Vielen Dank!!! #include <htc.h> __CONFIG(INTCLK & WDTDIS & PWRTDIS & MCLRDIS & UNPROTECT & DUNPROTECT & BORDIS & IESODIS & FCMDIS & LVPDIS); __CONFIG(BORV40); void interrupt interrupt_service(void) { if (T0IE && T0IF) { PORTD = 0xFF; // High // TMR0 = 0b00000000; // laden des Timer0Counters T0IF = 0; // rücksetzen des Überlaufs } } void main() { TRISD = 0x00; OPTION = 0b10000000; // Timer0 konfigurieren Bit 2:0 bestimmen Teiler von Timer0 [000 entspricht 2] T0IF = 0; // Überlauf - Flag löschen T0IE = 1; // Interrupt enable ei(); // Globales Interrupt enable (GIE) while(1) { PORTD = 0x00; } // Low }