历史上的今天
今天是:2024年12月13日(星期五)
2018年12月13日 | 不用定时器和汇编语言,只用C语言实现精确无误的延时
2018-12-13 来源:eefocus
对于51定时器,却是有点少,有时候不经意间就被用完了,而实现定时又TM神坑了!一般的解决方案有直接上汇编,一条语句的执行时间就是一个机器周期,所以多写几个就实现了完美的定时功能。可是可是……..又有多少学51的会汇编呢?呵呵哒
所以来分享一个神好用的方法,C语言的while和nop结合使用实现精确延时
上调试代码:
#include
#include
#define TIME 164//此处是需要不断调节的改变时间的数值
//164是少4个机器周期,165是多了2个机器周期
/* ∵晶振=12MHz ∴一条指令用时=1/(12/12)=10^(-6)s=1us */
//想办法补偿,而不是减少
void delay1ms(void)
{
char i=TIME;
while(i--);
// _nop_(); //一个nop一个机器周期
// _nop_();
// _nop_();
// _nop_(); //还少4个机器周期,所以加上4个nop补偿一?
}
int main()
{
while(1)
{
delay1ms();
P1=0;
}
}
①设置软件的晶振值(12M为例)
先看164

②进入debug查看TIME分别为164、165的值


很明显164的时候差了4个机器周期
来看165


可以看出除了1ms还多出了2个机器周期
拿164补偿
补偿4个nop,刚好就是4个机器周期

okay,到此结束完毕!
PS:注意一些小问题,比如你重新改了数值之后要记得重新编译一下
史海拾趣
|
初学者, 想去 示波器,以及电源器 刚才淘宝上看到一处买示波器, 有几种价格,便宜的三四百, 不知道能不能用, 各价格有什么区别,懂的人看看 http://store.taobao.com/shop/xshop/wui_page-cat-35391858-36790672-ob7Eo8Tiyr6yqMb3ob8=.htm ...… 查看全部问答> |
|
苹果的每一次举动,似乎都成了暴力拆解的对象,其中的芯片,也自然成了大家关注的焦点。 随着苹果iPad平板电脑的发布,有关其内部集成的自产处理器Apple A4的信息也逐渐浮出了水面, BSN 网站报道称这款处理器是一款集成了ARM Cortex A9架构多 ...… 查看全部问答> |
|
关于欧姆龙PLC与变频器的通讯,我使用的是欧姆龙的C200HE系列,现在控制电机需要变频调速~打算选择安川的变频器,他们的通讯协议啊~方式是什么?… 查看全部问答> |
|
我们机房有一台惠普DL380 G6服务器:双E5530cpu,4根2gddr3内存,6块300g sas硬盘,双电源,此服务器的标配是单E5530cpu,3根2g内存, 在标配情况下服务器正常使用,但是用我们现有的配置机器就会无规律重启,寻找原因中,请高手帮忙… 查看全部问答> |
|
我要做个电池驱动,就去看了看common下的电池驱动。首先想知道下电池驱动是不是就上纯粹的和其他流驱动一样只是提供一些接口,还是有其他一些扯不清的关系,因为我看完后觉的有点糊涂。我不知道为什么要这样做,我把代码帖出来,希望大家帮忙说说, ...… 查看全部问答> |
|
pic串行输出信号有一段是跳动的是怎么回事,是连到lcd驱动芯片的,lcd显示的是一串稳定的数字,示波器看到的信号由一段是跳动的,什么原因?请高人解释,谢谢… 查看全部问答> |
|
现在除了太阳能是可以再生能源之外,LED照明也成为了可以迅速的有效降低二氧化碳的排放。有报道说,如果将LED照明代替传统的照明灯泡,可以在20年内为世界减少一半的二氧化碳排放量,还有研究说,LED照明可以省下很多的电费,而且减少很多能源的 ...… 查看全部问答> |
|
写了个看门狗程序,可是却不工作,不知何原因,大家指点一二。/******************************************************************************** Function Name : IWDG_Configuration* Description & ...… 查看全部问答> |




