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.