Hallo Siro,

Zitat von
Siro
count = TimerCount+20; /* warte 20 Mikrosekunden */
while (Timercount < count) ;
mit while blockierst du wieder den µC. Wenn der PIC in der Wartezeit noch andere Sachen tun soll, geht das nur über kooperatives Multitasking. Für Routinen, die "nebenbei" laufen sollen, könnte man eine Schrittkette nach folgendem Muster verwenden:
Code:
void DoJob1(void){
static unsigned short Evt = 0;
static char step = 0;
// getaktete Schrittkette
if((TMR0 - Evt) < 0x7fff ) {
Evt = TMR0 + 1000; // nächter Schritt in mind. 1ms
switch (step){
case 0:
// Do Something
step ++;
break;
case 1:
// Do Something
step ++;
break;
case 2:
// Do Something
Evt = TMR0 + 5000; // nächter Schritt in 5ms
step = 0;
break;
}
}
}
mit Timer0 konfiguriert mit 1MHz und 16Bit Breite auf PIC18F. Die Funktion muss mindestens alle 30ms gepollt werden. Wenn die Zeit "reif" ist, wird ein Schritt ausgeführt und der Zeitwert für den nächsten Schritt gesetzt.
Lesezeichen