请问各位大神这个c51延时程序怎么写写

  及C51和汇编的混合编程的资料嘟是从前辈那儿偷来的先谢谢各位前辈的分享!:)
众所周知,在编程时很难掌握程序运行的时间所以编写时很难做到很精确,解决嘚方式有插入汇编语句但总觉得汇编用起来不是那么顺手,还可以用定时器来做但只是一个很小的延时程序而已,不必小题大作其實办法还是有的,下面介绍一下常用的几种延时程序  1、us级延时程序  常用的一个函数如下:  void   因为汇编中的DJNZ 语句是先减一洅判断的,和-xx的算法一致所以--x和x--相差了很多。上述函数只适合x的范围是0-255如果需要延时大于255*2+5us,则可以连续调用几次函数  2、ms的延时程序  常用的一个函数:  void 101311  可见,精度不“精”随着x值的增大,延时误差越大只适合在延时不要求很准确的地方使用。於是想到对程序进行一些修改想到125是不是取的太大了,假如把它变为可变不同的x值取值不同,就可以对延时时间进行一些修正把程序改为如下:  void delayms(unsigned int x,unsigned   for(j=0;j<y;j++){;}  }  }  对不同的延时时间取不同的y值,发现一个“怪”现象当取y=123时,延时时间的误差是一个固定值:  x us  1 1017  2 即不管x为多大都只有16us的误差精度大幅度提高,可以满足大多数的需要!

例如要写一个延迟10ms的delay函数:(12M晶振)

原理:3层for循环,循环次数是 NUM = 4X5X248 = 4960次由每次循环都有条件判断(如 i >0)和自减语句(如 i--),因此每次循环又耗费两个机器周期

//当计数器未溢出只须用 计数

//当计數器溢出则须用 计时器上限值+计数器实时变化的值-其初始值

定时器定时一次最大是 65536 us。

本回答由诸城市宏邦自动化机械厂提供

本回答被提問者和网友采纳

没写主函数;自己调用应该就行了

器使用"|"符号可以在使用多

没试过 不知行不行!!!

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

我要回帖

更多关于 延时程序怎么写 的文章

 

随机推荐