一些朋友提出运用C言语编写51单片机延时程序的精度不行,事实上确实如此,由于C言语终究要编译成汇编言语运转,因而,汇编程序会很大,然后影响到延时的精度,在此,贴出一些网上材料供咱们参阅学习。
以下位转载内容: 51单片机 Keil C 延时程序的简略研讨 by: InfiniteSpace Studio/isjfk, 1.21.2004 任何人都能够在注明原作者和出处的前提下随意转载这篇文章,但不得用于商业意图。 运用单片机的时分,常常会遇到需求短时刻延时的状况。需求的延时时刻很短,一般都是几十到几百奇妙(us)。有时分还需求很高的精度,比方用单片机驱动DS18B20的时分,差错容许的规模在十几us以内,否则很简略犯错。这种状况下,用计时器往往有点小题大做。而在极点的状况下,计时器乃至现已悉数派上了其他用处。这时就需求咱们另想其他办法了。 |
51单片机 Keil C 延时程序的再次研讨!
作者: SEE 来历:www.waveshare.net 剖析:假定外挂12M(之后都是在这基础上评论) 见上可得可调度为2us,而最大差错为6us。 但这个程序的最大延时是为518us,明显不能满意实践需求,由于许多时分需求推迟比较长的时刻。 那么,接下来评论将t分配为两个字节,即uint型的时分,会呈现什么状况。 Void delay8(uint t) 假如把这个程序的可调度看为8us,那么最大差错为263us,但这个延时程序仍是不能满意要求的,由于延时最大为524.551ms。 那么用ulong t呢? 那么怎么得到比较小的可调度,可调规模大,并占用比较少得RAM呢?请看下面的程序: /*—————————————————————— 我编译了下,传了些参数,并看了汇编代码,调查记录了下面的数据: 赫赫,延时50ms,差错只是22us,作为C言语现已是能够承受了。再说要求再准确的话,就算是用汇编也得改用定时器了。 /*—————————————————————— 赫赫,延时50s,差错只是2.978ms,能够承受! 上面程序没有选用long,也没选用3层以上的循环,而是将延时分拆为两个程序以进步精度。应该是比较好的做法了。 假如想要得到更高精度的延时,能够这么做: |
关于C51准确延时问题
一些朋友提出使用C语言编写51单片机延时程序的精度不够,事实上的确如此,由于C语言最终要编译成汇编语言运行,因此,汇编程序会很大,从而…
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/319771.html