Hallo,
ich benutze XC16x und Keil
Mit folgendem Code habe ich versucht, einen Timer im us-Bereich ohne
Interrupts zu machen.
1 | void delay_us(unsigned char number_of_us)
|
2 | {
|
3 | unsigned char us_ticks = 0;
|
4 | GPT1_vLoadTmr_GPT1_TIMER_3(0xFFFB); // Timer Register neu laden
|
5 | while(us_ticks != number_of_us) // wiederholen, bis gewünschte Zeit erreicht ist
|
6 | {
|
7 | if (GPT1_uwReadTmr_GPT1_TIMER_3() == 0) // 0xFFFB, 0xFFFC, 0xFFFD, 0xFFFE, 0xFFFF und 0, genau 1us
|
8 | {
|
9 | us_ticks++;
|
10 | GPT1_vLoadTmr_GPT1_TIMER_3(0xFFFB); // Timer Register neu laden
|
11 | }
|
12 | }
|
13 | }
|
Das Problem ist, diese Funktion dauert einfach zu lang, ca. in ms
Ordnung. Wenn
1 | if (GPT1_uwReadTmr_GPT1_TIMER_3() == 0)
|
durch
1 | if (GPT1_uwReadTmr_GPT1_TIMER_3() - 0xFFFB > 5)
|
ersetzt wird, scheint alles richtig zu sein.
Kann mir jemand den Fehler erklären?
Besten Dank
Owen