Hallo Siro,
Zitat Zitat von Siro Beitrag anzeigen
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.