Gast
#90308
Hallo, ich habe den Timer2 beim PIC16F873 eingeschaltet und mit Vor-/und Nachteiler jeweils 1:16 versehen. Bei einem Takt von 4MHz müßte also alle 64ms (PR2=250) die Interruptroutine durchlaufen werden. Dies habe ich kontrolliert, indem ich in der Interruptroutine jeweils einen Port umschalte und dies mit dem Oszit nachmesse. Hier komme ich auf 64ms. Nun möchte ich aber nicht alles 64ms sondern alle 640ms einen Interrupt haben. Deshalb habe ich eine globale Variable xy definiert und in der Interruptroutine zähle ich diese hoch und wenn diese 10 ist, wird die eigentliche Aktion ausgeführt. Leider funktioniert dies nicht so ganz. Im Debugmodus von MPLAP / ICD2 mit CC5X passt es einwandfrei aber im Realtime-Modus messe ich am Pin alle 64ms ein umschalten - unabhängig von meiner if-Abfrage. Was könnte das sein? Wer kann mir helfen? ===Codeausschnitt:=== char xy; #pragma origin 4 interrupt InterruptRoutine(void) { int_save_registers if (TMR2IF) { xy++; if(xy >= 10) { PORTA.0 ^= 0x01; TMR2IF = 0; aktion=1; timebase=0; } } int_restore_registers }