1、比较死板的方法是自己写一个delay函数,里面用for,while等做一些循环,下面是1ms的延时函数。
void delay1ms(void) 。
unsigned char i,j; 。
for(i=0;i<10;i++)。
for(j=0;j<33;j++);。
具体算法是//(3j+2)*i=(3×33+2)×10=1010(us),但精确度不高,如果想准确点可以调节相应的参数用示波器来实。
现,上面的函数适用于程序简单,对时间性要求不高,如:点led灯,单个按键操作等等。
2,就是用定时器中断里面设定标志位来产生延时的方法,比如你可以把定时器设定为每1ms进一次中断,在中断里面。
把一个标志位(如flag)置一。
当你需要1ms延时的时候你可以先初始化定时器,然后查询标志位是否置一,置一则执行if后面的语句,即if(fla{};。
当你需要10ms延时时,你可以把flag设置为uchar,中断里面flag++;外面查询用if(10==flag){};。
以此类推,上面的方法精确度高适用地方。
delay通常是延时程序,其参数为100,一般这个参数都是delay基本延时的倍数,也就是100倍,至于基本延时时长需要给出具体程序,例如:
delay(int time)
{ int i;
for (i=0;i<time;i++);。
扩展资料:
函数名: delay
功 能: 将程序的执行暂停一段时间(毫秒)。
(该函数是TC下特有的函数,VC下应使用Sleep()函数)
用 法: void delay(unsigned milliseconds);。
单片机在电子技术中的开发,主要包括CPU开发、程序开发、 存储器开发、计算机开发及C语言程序开发,同时得到开发能够保证单片机在十分复杂的计算机与控制环境中可以正常有序的进行。
参考资料来源:百度百科-单片机。
参考资料来源:百度百科-delay()。
这是个延时子程序,延时1000个时钟周期,至于到底延时多长时间,要取决于单片机的晶振频率。
该程序的延时是靠 内部循环(DJNZ R6,D2),该句执行“R6”次即250次循环,在内循环的外面还要进行“R7”即250次外循环(DJNZ R7,D1),所以一共执行250*250次循环,根据你晶振的频率算出机器周期后,再结合循环次数就可以得出时间了。。。。自己需要设定其他值的话,修改R6,R7的值就可以了!
比如说:
void delay ()。
int x;
char y;
for(x=1000;x>0;x--)。
{ for(y=100;y>0;y--)};。
}
x每减一次,y减100次,x一共减少1000次。
这个子程序的延时时间是:
1000*100=100ms(默认时间是us)。
如果想更精确的话,可以用软件进行调试。
for语句下面的{}还可以省略。
有不清的可以多交流
原文地址:http://www.qianchusai.com/delay%E5%BB%B6%E6%97%B6%E5%AD%90%E7%A8%8B%E5%BA%8F.html