使用C语言编写准确的延迟程序

- 编辑:admin -

使用C语言编写准确的延迟程序

假设延迟功能如下。vacuum delay(){uint i;}for(i = 0; ii ++);}你如何计算?首先,为20000转换为十六进制,从获取的4E20的乘以高字节6,则468 + 2 = 470的4EObtain 468D,并且下一个470D * 20HEX(即,32D)= 15040。
心脏的延迟功能总共执行150到40个周期。假设使用的晶体振荡器为12 MHz,则段功能的总延迟为15.04 ms。
通过已知的公式指定的该方程中,延迟长度,可总时间=[(6 *高8位的I值)2]* i指定的低8位。
示例:设置125 ms的延迟首先,将低位字节分配给值200 D *(即C 8)。
接着,计算所述上部的结构和较低的部分,被称为125毫秒= 200 *((高字节值i * 6)2)。
(高低之间的间隔* 6)+ 2可以推断总延迟时间应该等于625μs。
625/6 = 104.1666。我们使用整数来得到104。
我们将104转换为十六进制以获得68H。
接下来,组合高位字节和低位字节以获得固定值,即68C8HEX。替换函数如下。关于vacuum delay(){uint i;}(i = 0; i 0 x 68 C 8; i ++);}
如果写入是直的,68C8将是十进制数。换句话说,它是26824。替换后,变为如下。在null delay(){uint i;(i = 0; i 0 x 2648; i ++)的情况下。
在C语言中嵌入汇编延迟程序可以非常轻松地自己阅读。
描述组件中的延迟更准确,因此可以与MCU中的C和组件混合。因此,建议您在编写汇编程序后编写它。使用C编写准确的延迟非常困难。
谁是C语言不能准确地延迟的I表示,采用定时器/计数器的操作的MCU 51模式1个或计数器/计数器2,自动地重新加载的8位计数器,恰好能够延迟1 MS也是100 um也可以做到
事实上,通过使用定时器,将需要写同步时间写入微控制器中断程序,该方法可达到精确同步,最终误差晶体振荡器它仅由...决定。
是的,它是最准确的计时器,但计时器的数量是有限的,不一定使用。
例如,温度检测(特别是当变化快速和快速时),必须连续检测定时器此时,如果有其他任务分配给其他定时器,只是推迟了。
一个空循环,就像while(i--)一样,没问题。延迟的持续时间根据i的差异确定,但C的延迟不太准确,时间必须根据拆卸,装配声明和指令周期的数量来计算。:
Void mDelay(unsigned int Delay)//延迟= 1000小时是1 S.for(; DelayDelay - ){for(i = 0; ii ++){;}
}}
通过点击,您可以按到达顺序阅读原始巨大的资源。