历史上的今天
返回首页

历史上的今天

今天是:2025年01月02日(星期四)

正在发生

2018年01月02日 | KEIL单片机C语言精确延时值的计算

2018-01-02 来源:eefocus

关于单片机C语言的精确延时,网上很多都是大约给出延时值没有准确那值是多少,也就没有达到精确高的要求,而51hei给出的本函数克服了以上缺点,能够精确计数出要延时值且精确达到1us,本举例所用CPU为STC12C5412系列12倍速的单片机,只要修改一下参数值其它系例单片机也通用,适用范围宽。
 
共有三条延时函数说明如下:
函数调用分两级:一级是小于10US的延时,二级是大于10US的延时
//
//----------微秒级延时---------
延时时间=(3+5*X)/12   提示(单位us,  X不能大于255)
 
//
{
    uchar data i;
    for(;Ms>0;Ms--)                       
for(i=26;i>0;i--);
}
i=[(延时值-1.75)*12/Ms-15]/4
如想延时60US则  i=[(60-1.75)*12/6-15]/4=25.375≈26; 修改i的值=26,再调用上面的【10US级延时函数】Delay10us(6); 则就精确延时60US;
如果想延时64US可以用这二种函数组合来用: Delay10us(6); for(i=9;i>X;i--)  共延时64US
 
//==============对于大于20Ms的可用中断来实现程序运行比较好===============
中断用定时器0, 1Ms中断:
{                                                             
    TL0=(0xffff-1000+2)%0x100;TH0=(0xffff-1000+2)/0x100; //每毫秒执行一次
    if(DelayMs_1>0)DelayMs_1--;//大于20Ms延时程序 
}
函数调用
{
    DelayMs_1=a;
    while(DelayMs_1);
}
如果延时50Ms则 函数值为  DelayMs(50)
//+++++++++++++++++++++++++公式推算来由++++++++++++++++++++++++++++
二级延时C语言反汇编见上传图1:


 指今               时间(1us)               指今               时间(1us)
MOV   A   Rn       1                        SETB  C             1
MOV   Rn  #data     2                        SUBB  A   #data     2 
DJNZ  Rn  rel       4
Dec   Rn            3                         SJMP  rel            3
JC    rel            3                         MOV   Rn direct      4      
Lcall addr16          6                         RET                 4  
//--------------
JNZ                 3                         XRL                 2
SUBB               3  
 
使用Delay10us(uchar Ms) 最多能延时21995.5us;
其中循环外函数调用与返回用的时间=(6+4)进入+退出(1+1+2+3+,4)=10+11=21/12=1.75us;
循环内函数时间 MS= Ms*(1+1+2+3,+2+4*I+3+3)/12=Ms*(15+4*I)/12 ;
所以如果延时60us时用【10US级延时函数】I的值为:
60=循环外时间+循环内时间=1.75us+ Ms*(15+4*I)/12;
则i=[(60-1.75)*12/6-15]/4=25.375≈26即如果Ms=6, i=26;
本算法中的12是STC12单片机与普通标准速率比。


推荐阅读

史海拾趣

Anachip公司的发展小趣事

品质一直是Anachip公司非常重视的一环。为了确保产品的稳定性和可靠性,公司建立了严格的品质管理体系,从原材料采购到生产过程的每一个环节都进行严格控制。同时,公司还加大了品牌建设的力度,通过广告宣传、赞助活动等方式提升品牌知名度。这些举措不仅提升了公司的市场竞争力,也赢得了客户的信任和忠诚。

振华新云(CEC)公司的发展小趣事

背景:为了进一步扩大市场份额和提高品牌影响力,振华新云积极开展市场拓展和国际合作。

内容:公司积极参加国内外电子展会和论坛等活动,加强与国内外客户的沟通和交流。同时,积极寻求与国际先进企业的合作机会,共同开展技术研发和市场推广等活动。

成果:通过市场拓展和国际合作,振华新云的产品逐渐走向世界舞台,赢得了广大客户的信赖和好评。同时,公司也积累了宝贵的国际化经验和资源,为未来的国际化发展奠定了坚实基础。

Excelics [Excelics Semiconductor, Inc.]公司的发展小趣事

为了进一步拓展国际市场,Excelics Semiconductor积极寻求与国际知名企业的合作。他们与欧洲一家领先的芯片制造商签订了战略合作协议,共同开发新一代的智能芯片。这一合作不仅提升了Excelics Semiconductor的技术实力,也为其在国际市场上赢得了更多的份额。

Hantronix公司的发展小趣事

随着业务的不断增长,HANBIT Electronics意识到全球化布局的重要性。2010年,公司在韩国本土之外的首个生产基地——中国东莞分公司正式成立。这一举措不仅有效降低了生产成本,还大大缩短了产品交付周期,提高了对亚洲市场的响应速度。同时,公司还积极在欧洲和美国等地设立研发中心和销售网络,实现了从研发、生产到销售的全球化布局。这一战略调整极大地增强了HANBIT Electronics在全球电子市场的竞争力。

Gore公司的发展小趣事
通过改进控制算法,如采用中点电位平衡控制策略,实时监测并调整中点电位,使其保持在合理范围内。
HCH Co公司的发展小趣事

背景:随着全球经济一体化的加速推进,HCH Co公司意识到必须加快全球化步伐以拓展更广阔的市场空间。公司制定了详细的全球化战略,包括在海外设立研发中心、生产基地和销售网络等。

发展:通过全球化战略的实施,HCH Co公司成功进入了多个国际市场,并与当地的企业和机构建立了紧密的合作关系。公司的品牌影响力不断提升,产品销量也实现了快速增长。同时,全球化战略还为公司带来了更多的技术、人才和市场资源,为公司的长期发展奠定了坚实基础。

问答坊 | AI 解惑

半导体晶圆产品又增加了两种新技术

2007年结束的时候,合同制造市场状况不稳。虽然当年营业额增长情况不错,但iSuppli公司修正后的合同制造产业预测显示,该产业的增长速度将在长期内放缓。 合同制造市场由电子制造服务(EMS)提供商与原始设计制造(ODM)公司构成,该市场2007年增长了15 ...…

查看全部问答>

经典的Internet Explorer 7.0 for XP SP2 VISTA简体中文版

IE7中文版支持中文域名,包含了许多重大安全改进的Internet Explorer 7终于发布了最新正式版本。 微软通过其官方下载中心放出了Internet Explorer 7.0浏览器的升级版,版本号7.0.5730.13,支持Windows XP和Windows Server 2003。 据了解,新版IE7 ...…

查看全部问答>

但片机控制步进马达

要求能输入数据.按启动后马达按输入数运行.LCD能显示运行数字. 联系人潘军13922952043 panjun6@126.com…

查看全部问答>

那个刚才有人发了个NEC的DF系列芯片的网址(免费)

本帖最后由 paulhyde 于 2014-9-15 09:30 编辑 那个家伙太TM狠了,把网址写在记事本里,整个压缩文件,然后收费!鄙视你 http://www.necel.com/cgi-bin/nesdis/o003_e.cgi?article=DF781235 这个就是那个记事本里的网址  …

查看全部问答>

急求FPGA设计的多功能波形发生器的目标芯片

小女子做的课题,初次接触FPGA的设计 用的是Quartus2的平台运行,综合编译已通过,但是时序仿真出了错:说是目标芯片不适用。 求各位大侠能指点指点,给出合适波形发生器的芯片型号,先在此谢过 下为VHDL开头部分程序: library ieee; use ie ...…

查看全部问答>

CE5+2440的IIC问题

小弟做的IIC读取温度的应用程序。运行我的应用程序后,系统拖死了,用示波器监测IIC波形是一直都在发送数据。但是运行网上下的IIC调试助手IICMgr_CE5.0.exe后,我的应用程序就正常了。即使把IICMgr_CE5.0.exe关了,再运行我的应用程序也正常的。 ...…

查看全部问答>

GetRotatedBitmap( HANDLE hDIB, float radians, COLORREF clrBack )

我在网上搜到个用来旋转位图的函数 HANDLE   GetRotatedBitmap(   HANDLE   hDIB,   float   radians,   COLORREF   clrBack   )  ; 可第一个参数 ...…

查看全部问答>

2440嵌入LINUX做MIDI播放器

不知道有人做过没有?要求软解码,关键是读音色库,网上找不到开放文件结构的音色库,请问有其他好的思路吗各位? 求助...    …

查看全部问答>

关于DSP2812正交编码问题

各位师兄师姐大牛大家好: 小弟刚开始接触DSP2812,还没有入门,真心求大家领路,真心希望大家指点迷津。我不要现成代码,有了方法,我自己来实现。 说一下我的工程背景,我在电力行业,做开关断路器机械特性的在线监测。现在要捕获欧姆龙旋转编 ...…

查看全部问答>

runtime libraries 是什么?

在下载IAR5.51时无论30天的限制版本还是4k的限制版本都说与正式版本的区别是不含有“Source code for runtime libraries ”,这个是什么?在使用时有没有这个有什么区别吗?…

查看全部问答>