Hallo
Ich vermute, du verwendest die orginale CD-Library mit dem 72kHz-Timer für Sleep(). Dann sind sleep(72) genau 1 ms und die Rechnung sieht so aus:
21(j)*40(k)*255(sleep)/72(ms)=2975ms
Also passen die 3 Sekunden genau. Dein Rechenfehler: 255/72=3541us oder 3,54ms. Außerdem wird j 21x ausgeführt wegen <=
Gruß
mic
Code:
#include "asuro.h"
uint8_t i, j, k;
int main(void){
i=0;
do{
j=i++;
BackLED(ON,OFF);
for(k=0;k<20;k++) Sleep(255);
BackLED(OFF,ON);
for(k=0;k<20;k++) Sleep(255);
}while(j<=20);
while(1);
return 0;
}
Soweit ich das überblicke werden die beiden k-Schleifen sogar 22x ausgeführt, denn erst wenn j=21 ist wird die do-while-Schleife verlassen.
Lesezeichen