十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
/*-----------------------------------------------
10年积累的做网站、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有监利免费网站建设让你可以放心的选择与我们合作。
名称:delay1ms()
功能:延时1ms
晶振:12MHz 机器周期1us
时间计算:t=2+1+995+2=1000us =1.000ms
-----------------------------------------------*/
void delay1ms(void) //延时1ms子程序
{
unsigned char i,j;
for(i=5;i0;i--)
for(j=98;j0;j--);
}
对应汇编
/*-----------------------------------------------
名称:delay1ms
功能:延时1ms
晶振:12MHz 机器周期1us
时间计算:t=2+1+995+2=1000us =1.000ms
-----------------------------------------------*/
LCALL DELAY1MS ;2us
DELAY1MS:
MOV R6,#5 ;1us
DEL1: MOV R7,#98 ;1us
DJNZ R7,$ ;2*98=196us
DJNZ R6,DEL1 ;2us DLE1执行完所用时间(1+196+2)*5=995us。
RET ;2us
这个程序应该是板子上延时的程序。
a就是需要延迟的毫秒数(也可能是其他单位)。
就是说,执行 for(i=0;i600;i++);的时间应该是一个单位长度(可能为1ms);
这样,你在调用的时候,赋值给a多少值,实际就是延时多少毫秒。
例如,延时10ms,就用
delay(10);
延时1ms,就用
delay(1);
delay函数是一般自己定义的一个延时函数。
C语言定义延时函数主要通过无意义指令的执行来达到延时的目的。
关于单片机C语言的精确延时,网上很多都是大约给出延时值没有准确那值是多少,也就没有达到精确高的要求,而本函数克服了以上缺点,能够精确计数出要延时值且精确达到1us,本举例所用CPU为STC12C5412系列12倍速的单片机,只要修改一下参数值其它系例单片机也通用,适用范围宽。
ms=1时,第一个for循环进入,然后在第二个for循环中执行100次
再回到第一个for循环中进行第二次循环.
就这样
你可以进入编辑器,添加断点,自行查看代码执行过程