Grundlegendes Problem mit Port-Zugriff und Timer-Interrupts
Hallo,
verwende zur Zeit nen PIC18F2550 und Piklab + SDCC.
Ich verwende auch den USB-Bootloader von Sprut.
LEDs hängen an RC0, RC1 und RC2.
Quarz ist 4 MHz, Fosc ist 48 Mhz (wegen PLL).
In Grunde funktioniert das schon.
Jetzt hab ich aber ein seltsames Problem.
Ich habe zuerst ein Programm geschrieben, daß in main() in einer Endlos-While-Schleife die LEDs nacheinander ein und ausschaltet und dazwischen Zeit vergeudet in dem es drei geschachtelte for-Schleifen durchläuft.
Danach wollte ich das selbe mit Timer-Interrupts machen. Ich lasse den Timer alle 1500 Schritte mit dem 1/8 Prescaler überlaufen, d.h. der Interrupt tritt alle 1 ms auf.
Ich zähle die Interrupts mit, und alle 500 mal, toggle ich die 2. LED.
Das funktioniert, alle 500ms ändert die 2. LED ihren Zusand.
Jetzt das Problem: Wenn ich beide Varianten zusammen betreiben möchte, also LED 1 und 3 in der main() und LED2 in der isr ansteruen, dann funktioniert das nicht wie gewünscht.
Die LED2 blinkt dann korrekt, währen die LED1 und 3 flackern.
Woran könnte das liegen?
MIr ist irgendwie sowas in den Sinn gekommen wie: beim Einsprung in die ISR werden die Ports gesichert und danach wieder hergestellt. Aber ich weiß nicht wonach ich da genau suchen kann.
Lesezeichen