Hallo,
ich bin schon frustriert genug, dass ich einen Pic (PIC18F4550) in einem
Projekt verwenden muss. Nun benötige ich eine Int.-Routine, die alle 125
Befehlszyklen (25 µs) ausgelöst wird. Den Timer0 kann ich alle 255
Befehlszyklen auslösen. So dachte ich mir nun: Setzt du in der
Int.-Routine einfach den Zähler auf einen höheren Startwert. Denkste!
Ich lande bei über 400 Zyklen!
1 | // ----- INCLUDES
|
2 | #include <p18f4550.h>
|
3 | #include "delays.h"
|
4 | #include "timers.h"
|
5 |
|
6 | /* Auf EINEN Interrupt gekürzt */
|
7 | #pragma code vector=0x08
|
8 | #pragma interrupt interrupt
|
9 | void interrupt(void) {
|
10 | INTCONbits.TMR0IF = 0;
|
11 | Nop();
|
12 | WriteTimer0(20); // Zum Beispiel
|
13 | }
|
14 |
|
15 | void main(void)
|
16 | {
|
17 | // Interrupts aktivieren
|
18 | OpenTimer0(TIMER_INT_ON & T0_8BIT & T0_SOURCE_INT & T0_PS_1_1);
|
19 | INTCONbits.GIE = 1; // Enables(1)/Disables(0) all unmasked interrupts
|
20 | INTCONbits.PEIE = 0; // Enables(1)/Disables(0) all unmasked peripheral interrupts
|
21 | INTCONbits.INT0IE = 0; // En(1)/Disables(0) the INT0 external interrupt
|
22 | INTCON2bits.INTEDG0 = 1; // rising(1)/falling(0) edge of int0
|
23 |
|
24 | // ----- Hauptschleife --------------------
|
25 | while (1) {
|
26 | }
|
27 | }
|
Kennt sich hier jemand damit aus wie ich den Timer beschleunigen kann?
Ich meine 40kHz sollten doch bei 20MHz Betriebsfrequenz nicht zu viel
sein...
Grüße!