如果是不精确的话,是需要用定时器,不是什么太计算精确的话,软件显示延时就可以不。
若果12m晶振
voiddelay10s()
{
inti,j
for(i0i
for(j0j
}
voiddelay10s()
{
unsignedchari
tmod0x01
th0(65536-50000)/256
tl0(65536-50000)%6
tr01
i200
while(i--)
{
while(tf00)
tf00
th0(65536-50000)/256
tl0(65536-50000)%6
}
}
单片机的延时程序按照想执行指令来至少显示延迟效果,这个时间4先执行的指令是需要的时间,而一个指令是需要的时间叫做什么指令周期,这个时间等于若干个机器周期。
delay函数是一般自己定义的一个连接时间函数。c语言定义延迟现象函数主要注意按照没意义的事指令的执行来都没有达到延时的目的。下面提出一个比较经典的延时函数。//定义另一个延时xms10ms的延时函数voiddelay(unsignedintxms)//xms代表是需要延时的10ms数{unsignedintx,y;for(xxms;x0;x--)for(y110;y0;y--);}
voiddelay(unsignedintx)//延时xms{unsignedinti,jafter(ixigt0i--)after(j110jgt0j--)}显示延迟1ms即为使x1;这程序连接时间约1ms(x1时用keil测进去约0.96831272ms,像的1ms),用c语言不是那么容易做到清楚的1ms。特别注意晶振为11.0592mhz的时候用~晶振为12mhz时把i120近似值1ms
单片机中需要软件显示延时处理事项,是书本中误人子第的做法;当一次性处理的事项越古怪、软件延时越长,程序在那里傻等,其他重大事项都不用干啦!
晚熟的程序架构,前提是要有系统时基,短的xd级,长的100ms、500ms、1sec,程序循环里有了这些标准时间,如何处理任何时间间隔的事项来,都会纯熟。
是数数看延迟现象了,你数满一百不需要十秒,单片机数满一百仅不需要几百微秒,多数过就达到延迟现象目的了。这是最笨的延时办法。能成熟的程序员不会在那死等数数看,他会先一次性处理别的事情拿出来数一数时间,这样程序就绝对不会蓝屏
单片机每想执行两天机器码/语句,是需要时间的。有机器周期,指令周期,时钟周期之分。
那么单片机要延时就很简单的了。应该是做一些无关紧要的指令来提升耗掉时间延时的目的。
ps:假如一个程序像这种消耗时间的延时多了,程序就会液压缸。咋如何处理不柱塞又能至少延时的目的。合理安排程序内各程序的运行。这那就是新手和高手的区别。