比较精确的延时收集于网络用C语言写出来程序非常的简练,它是一种模块化的语言,一种比汇编更高级的语言,但是就是这样一种语言也还是有它不足之处:它的延时很不好控制,常常很难知道一段延时程序它的精确延时到底是多少,这和汇编延时程序没法比。但有时后写程序又不得不要用到比较精确的延时,虽然说可以用混合编程的方式解决,但这种方式不是每个人都能掌握,且写起来也麻烦。所以,通过测试给大家提供一个延时子程序模块,并以此给一个出经常用到的延时的数据表格。(注意:表格中的数据只适合此延时模块,对其它的延时程序不适用,切忌!!!)延时模块:其中问号代表要填的数,要延时多少,到表格中去找数据,然后填上就OK!切忌3条FOR语句不能颠倒顺序voidDelay(){unsignedchara,b,c;for(a=0;a<?;a++)for(b=0;b<?;b++)for(c=0;c<?;c++);}延时时间a的值b的值c的值延时误差(us)10us 1 1 1 - 1 1 8 030us 1 1 15 + 2 1 9 050us 1 1 28 060us 1 1 35 + 1 1 42 +180us 1 1 48 090us 1 1 55 + 1 1 61 - 1 1 128 0300us 3 1 63 + 2 1 129 0500us 5 1 63 + 6 1 63 0700us 7 1 63 - 1 3 175 + 9 1 63 - 1 3 219 - 2 3 220 +33ms 3 3 220 +3Xms X 3 220 +3(X的范围为2到255)基本上平时用到的延时都在这里了,每种延时的误差都很小,最大也不过3us,有的甚至没有误差,已经很精确了,如果想延时1秒钟,可以连续调用延时250ms的程序4次,总共延时误差12us,这样的误差已经不算误差了,用汇编语言编写还达不到这个程度。现在就不再为延时不精确担忧了,参照表中的数据写延时,想延时多少就能延时多少。再次重申:此表格是根据此延时模块编写,这也是大多数朋友都习惯用的一个模块,如果用其它模块或是改动了此模块,延时都不准的,不信大家可以试试!!!KeilC51程序设计中几种精确延时方法延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。1>使用定时器/、12MHz或6MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1μs和2μs,便于精确延时。本程序中假设使用频率为12MHz的晶振。最长的延时时间可达216=65536μs。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其它定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间的延时。使用定时器/计数器延时从程序的执行效率和稳定性两方面考虑都是最佳的方案。但应该注意,、PUSHPSW、语句,执行时占用了4个机器周期;如程序中还有计数
比较精确的延时 来自淘豆网m.daumloan.com转载请标明出处.