延时程序_免费下载bitLED = P1^0; //定义一个管脚(延时测试用)unsignedinti=3; //注意i,j的数据类型,unsignedcharj=3; //不同的数据类型延时有很大不同//-----------------各种精确延时语句-----------------------------------while((i--)!=1); //延时10*i个机器周期i=10;while(--i); //延时8*i+2个机器周期i=10;while(i--); //延时(i+1)*9+2个机器周期j=5; while(--j); //延时2*j+1个机器周期j=5; while(j--); //延时(j+1)*6+1个机器周期i=5; while(--i) //延时i*10+2个机器周期,在i*10+2个机器周期if(LED==0) break;//内检测到LED管脚为低电平时跳出延时i=5;while(LED) //每隔10个机器周期检测一次LED管脚状态,当LEDif((--i)==0)break;//为低时或者到了10*i+2个机器周期时跳出延时//--------------------------------------------------------------------例如18b20的复位函数(12M晶振)://***********************************************************************//函数功能:18B20复位//入口参数:无//出口参数:unsignedcharx:0:成功1:失败//***********************************************************************unsignedcharow_reset(void){unsignedcharx=0; //12M晶振1个机器周期为1usDQ=1; //DQ复位j=10; while(--j);//稍做延时(延时10*2+1=21个机器周期,21us)DQ=0; //单片机将DQ拉低j=85; while(j--);//精确延时(大于480us)85*6+1=511usDQ=1; //拉高总线j=10; while(j--);//精确延时10*6+1=61usx=DQ; //稍做延时后,returnx; //如果x=0则初始化成功x=1则初始化失败j=25; while(j--);//精确延时25*6+1=151us}//*********************************************************************************再如红外解码程序:(先说传统红外解码的弊端:程序中用了while(IR_IO);while(!IR_IO);这样的死循环,如果管脚一直处于一种状态,就会一直执行while,造成“死机”现象。当然这种情况很少,但我们也的考虑到。而用以下程序则不会,在规定的时间内没有正确的电平信号就会返回主程序,这样就不会出现“死机”了)//***************************外部中断0****
延时程序 免费下载 来自淘豆网m.daumloan.com转载请标明出处.