下面是我在UART试验里粘过来的一段延时子程序,不理解,特别是第二个个if语句里东西,那两个算式不明白从何而来,而且延时为什么要用看门狗定时器有关呢? 请高手指点一下! static int delayLoopCount=400;
void Delay(int time) { int i,adjust=0; if(time==0) { time=200; adjust=1; delayLoopCount=400; rWTCON=((MCLK/1000000-1)<<8)|(2<<3); // 1M/64,Watch-dog nRESET interrupt disable rWTDAT=0xffff; //自动重载到rWTCNT中 rWTCNT=0xffff; //第一次rWTCON中的值不能重载到此处,所以第一次要赋初值,默认值为0x8000 rWTCON=((MCLK/1000000-1)<<8)|(2<<3)|(1<<5);// 1M/64,Watch-dog enable,nRESET interrupt disable } for(;time>0;time--) for(i=0;i<delayLoopCount;i++); if(adjust==1) { rWTCON=((MCLK/1000000-1)<<8)|(2<<3); i=0xffff-rWTCNT; // 1count/16us? delayLoopCount=8000000/(i*64); //400*100/(i*64/200) } } |