前几天时间在做一个基于51单片机开发板的等精度频率计,用LCD1602液晶显示的,晶振是22.1184MHZ,用得是测频率法,目的是想做到能够测试0--900KHZ的信号。
液晶显示部分花了我好几天才搞定!最后终于能够测量来自信号发生器的脉冲信号啦,可是发现在测高频部分误差很大,精度不高,感觉很不满意,但是估计问题是出在延时函数上面,我是用定时器延时的,地球人都知道用C51语言语言啥都好,就是有个生下来就有的缺点:延时不精确,不好控制,加之本人还处于菜鸟阶段,结果调试延时函数就快把我搞死啦,至少搞了一天,我把睡觉吃饭的时间还都给精简啦!差点崩溃!!
就自爱这个时候我抱着一丝希望去网上搜搜,看看有没有那位大哥有调试延时函数的锦囊妙计,还算走运,找到了一篇很经典的文章,现在本人就将它拿出来同大家分享一下,希望碰到同样问题的单片机爱好者能够看到,少走一些弯路!
Keil C51程序设计中几种精确延时方法
单片机因具有体积小、功能强、成本低以及便于实现分布式控制而有非常广泛的应用领域[1]。单片机开发者在编制各种应用程序时经常会遇到实现精确延时的问题,比如按键去抖、数据传输等操作都要在程序中插入一段或几段延时,时间从几十微秒到几秒。有时还要求有很高的精度,如使用单总线芯片DS18B20时,允许误差范围在十几微秒以内[2],否则,芯片无法工作。用51汇编语言写程序时,这种问题很容易得到解决,而目前开发嵌入式系统软件的主流工具为C语言,用C51写延时程序时需要一些技巧。
实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。
1 使用定时器/计数器实现精确延时
单片机系统一般常选用11.059 2 MHz、12 MH