stefan-tiger
12.09.2007, 18:27
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.
Evtl. liegt es ja auch an was ganz anderem?
Anbei der Quellcode.
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.
Evtl. liegt es ja auch an was ganz anderem?
Anbei der Quellcode.