单片机C51延时时间怎样计算.docx
《单片机C51延时时间怎样计算.docx》由会员分享,可在线阅读,更多相关《单片机C51延时时间怎样计算.docx(8页珍藏版)》请在知海网上搜索。
单片机的延时程序通过执行指令来达到延时的效果。
这个时间等于执行指令所需的时间,一条指令所需的时间称为指令周期,等于几个机器周期。
第一步:标记延时程序失败后指令的机器周期。
步骤在机器周期之后乘以指令的周期数。
第三步:计算使用的机器周期总数。
第四步:计算总延迟时间。
你可以通过keil模拟找到这个值,试几次。
1、/2微秒,执行142次,for(a=2;a0;A-)为4微秒,即2*(142*;for(c=1;c0;C-)/2微秒,执行一次,即2*(142*=1136微秒;B=125,1000/8=125,扣除其他通话时间,B的值应该不超过125。
2、可以用KEIL软件计算时间,在while的起始位置和结束位置加红点(双击);然后左边的SEC后面是执行时间。
3、j=t*100如果删除这句话,你的程序会延迟100ms,delay(会延迟一秒。
使用KeilC51中的反汇编工具计算延迟时间。
4、在反汇编窗口中,目标应用程序可以显示在源程序和汇编程序的混合代码或汇编代码中。
5、编号:时间:2021年X月X日这是一条通往书籍之山的道路,学习永无止境页码:第8页,共8页在C程序中,不同类型的变量可用于延迟设计。
6、实验结果表明,使用unsignedchar类型比unsignedint有更优化的代码,使用时应使用unsignedchar作为延迟变量。
以一个带12MHz晶振的单片机为例。
晶振为12MHz,即一个机器周期为1us。
7、500毫秒延迟子程序程序:无效延迟500毫秒(无效)无符号字符I,j,k;for(I=15;I0;我-)for(j=202;j0;j-)for(k=81;k0;k-);计算分析:程序中有三个循环。
一级循环n:R5*2=81*2=162usDJNZ2us。
8、二级循环m:R6*(n+=202*165=33330usdjnz2us+R5赋值1us=3us。
三层循环:r7*(m+=15*33333=499995usdjnz2us+R6赋值1us=3us。
循环外:5us子程序调用2us+子程序,返回2us+R7赋值1us=5us。
总延迟时间=三层周期+外周期=499995+5=500000us=500ms。
计算公式:延迟时间=(2*R5+*R6+3*R7+5。
200毫秒延迟子程序程序:无效延迟200毫秒(无效)无符号字符I,j,k;for(I=5;I0;我-)for(j=132;j0;j-)for(k=150;k0;k-);10ms延迟子程序程序:无效延迟10ms(无效)无符号字符I,j,k;for(I=5;I0;我-)for(j=4;j0;j-)for(k=248;k0;k-);1s延迟子程序程序:无效延迟1s(无效)无符号字符h,I,j,k;for(h=5;h0;h-)for(I=4;I0;我-)for(j=116;j0;j-)for(k=214;k0;k-);参考链接:摘要在实际单片机应用系统的开发中,由于程序功能的需要,经常要编写各种延时程序,延时时间从几微秒到几秒不等,这对于很多C51开发人员,尤其是初学者来说,很难编写出非常精确的延时程序。
从实际应用出发,讨论了几种实用的编制精确延时程序和计算程序执行时间的方法,并给出了每种方法的详细使用步骤,以便读者很好地掌握和理解。
关键词KeilC51精确延时程序执行时间介绍单片机因其体积小、功能强、成本低、易于实现分布式控制而有着非常广泛的应用1。
单片机开发人员在编写各种应用程序时,经常会遇到实现精确延时的问题,如按键抖动、数据传输等。
,在程序中插入一个或几个延时,时间从几十微秒到几秒不等。
有时,需要高精度。
例如,使用单总线芯片DS18B20时,允许的误差范围小于十微秒2,否则,芯片将无法工作。
用51汇编语言写程序,这个问题很容易解决。
目前开发嵌入式系统软件的主流工具是C语言,用C51写延时程序需要一些技巧3。
为此,本文在多年单片机开发经验的基础上,介绍了几种编制精确延时程序和计算程序执行时间的实用方法。
延迟的实现方式通常有两种:一种是硬件延迟,利用定时器/计数器,可以提高CPU的工作效率,实现精确延迟;另一种是软件延时,主要是通过循环进行的。
1使用定时器/计数器实现精确延迟。
一般在单片机系统中常用0592MHz、12MHz或6MHz晶体振荡器。
第一种更容易产生各种标准的波特率,后两种分别有1s和2s的机器周期,方便精确延时。
假设频率为12MHz的晶体振荡器用于此程序。
最长延迟时间可达216=65536s,如果定时器工作在模式2,可以在极短的时间内实现精确延迟;如果使用其他计时方法,应考虑重新加载计时初始值的时间(重新加载计时器初始值需要2个机器周期)。
在实际应用中,经常采用中断方式,如通过适当的循环可以实现几秒甚至更长的延时。
就程序的执行效率和稳定性而言,使用计时器/计数器延迟是最好的方案。
但需要注意的是,C51编写的中断服务程序,编译后会自动添加PUSHACC、PUSHPSW、POPPSW、POPACC语句,执行时占用4个机器周期。
如果程序中有一个计数值加1语句,就会占用另一个机器周期。
这些语句所消耗的时间应该在计算计时初始值时考虑进去,并从初始值中减去,以达到误差最小的目的。
2软件延迟和时间计算很多情况下,定时器/计数器往往被用于其他用途,此时只能用软件的方法来延迟。
下面介绍几种软件延时的方法。
1次短暂延迟通过使用函数with_NOP_()语句,可以在C文件中定义一系列不同的延迟函数,如Delay10us()、Delay25us()和Delay40us(),并存储在自定义的C文件中,需要时可以在主程序中直接调用。
例如,延迟时间为10s的延迟函数可写为:Delay10us()函数中有6条_NOP_()语句,每条语句的执行时间为1s,主函数调用Delay10us()时,先执行一条LCALL指令(2s),然后执行6条_NOP_()语句(6s),最后执行一条RET指令(2s),所以执行上述函数需要10s。
这个函数可以看作是一个基本的延迟函数,可以在其他函数中调用,也就是嵌套调用4来实现长时间的延迟;但需要注意的是,如果在Delay40us()中直接调用4次Delay10us()的函数,延迟时间将是42s而不是40s这是因为执行Delay40us()时,先执行LCALL指令(2s),然后执行第一个Delay10us(),执行最后一个Delay10us()时,直接返回主程序。
以此类推,如果是两层嵌套调用,比如Delay80us()中调用Delay40us()两次,需要先执行LCALL指令(2s),再执行Delay40us()函数(84s)两次,那么实际延迟时间为86s,总之只有最里面的函数执行RET指令。
该指令直接返回上级函数或主函数。
如果在Delay80s()中直接调用delay10us()8次,此时的延迟时间为82s,通过修改基本延迟函数和适当的组合调用,上述方法可以实现不同的时间延迟。
2在C51中嵌入汇编程序段实现延时C51中预处理指令#pragmaasm和#pragmaendasm可以嵌套汇编语言语句。
用户编写的汇编语言紧跟在#pragmaasm之后,在#pragmaendasm之前结束。
例如#pragmaasm汇编语言程序段#实用主义delay函数可以设置入口参数,可以定义为无符号char、int或long。
根据参数和返回值的传递规则,参数和函数的返回值位于RR7RR7R6R5中。
应用时应注意以下几点:#pragmaasm和#pragmaendasm不允许嵌套;预处理指令#pragmaasm应加在程序的开头,在此指令之前只能有注释或其他预处理指令;使用asm语句时,编译系统不输出目标模块,只输出汇编源文件;asm只能使用小写字母。
如果asm是大写写的,编译器会把它当作普通变量;#pragmaasm、#pragmaendasm和asm只能在函数内使用。
将汇编语言与C51相结合,发挥各自的优势,无疑是单片机开发者的最佳选择。
3用示波器确定延迟时间熟悉硬件的开发人员也可以使用示波器来测量延时程序的执行时间。
方法如下:写一个函数实现延时,在函数开始时将一个I/O口线如P0置为高电平,函数结束时将P0清零为低电平。
延迟功能的执行时间可以通过在主程序中循环调用延迟功能,并用示波器测量P0引脚上的高电平时间来确定。
该方法如下:将P0连接到示波器并运行上述程序。
你可以看到P0的输出波形是一个周期为3ms的方波,其中高电平为2ms,低电平为1ms,也就是for循环结构“for(j=0;j4使用拆卸工具计算延迟时间。
对于不熟悉示波器的开发人员,可以使用KeilC51中的反汇编工具计算延迟时间,并使用源程序和汇编程序的混合代码或汇编代码在反汇编窗口显示目标应用。
为了说明这种方法,“for(I=0;我可以看出,从0x000F0x0017共有8条语句。
通过分析语句,可以发现并不是每个语句都执行了DlyT次。
核心循环只包含0x00110x0017的6条语句,总共8个机器周期。
在第一个循环中执行“CLRA”和“MOVR6A”需要2个机器周期,每个循环需要8个机器周期,但最后一个循环需要5个机器周期。
DlyT子核循环语句消耗(2+DlyT8+个机器周期。
当系统使用12MHz时,精度为7s使用while(DlyT-)循环时,DlyT的值存储在R7中。
对应的汇编代码如下:5使用性能分析器计算延迟时间。
很多C程序员可能不熟悉汇编语言,尤其是每条指令的执行时间很难记住。
因此,本文给出了另一种利用KeilC51的性能分析仪计算延迟时间的方法。
这里也是for(I=0;我。
- 下载必读:
1、word格式文档无特别注明外均可编辑修改;预览文档经过压缩,下载后原文更清晰!
2、纯PPT格式课件,可能不包含音视频文件,无法播放。请谨慎下单,否则后果自负。
3、试题类资料,若没标明(含答案),则可能不含答案。对于标明含答案的试题,其主观题也可能无答案。请谨慎下单,否则后果自负。- 版权声明:
该资料为 【上传人(卖家):盘川A】主动上传,所获收益归该上传人。本站对所上传内容,不做编辑和修改!知海网作为网络服务提供商,仅对该作品提供存储保护!我们不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 c51 延时 时间 怎样 怎么 怎么样 计算
- 本文标题:
单片机C51延时时间怎样计算.docx
- 链接地址:
https://www.zhwenku.com/edit/40056.html
最新DOC
最新PPT
- 日常防火巡查内容及方法
- 火场逃生十二诀总结
- 电气火灾的原因、预防及扑救方法
- 9.4.3深部真菌病曲霉病儿科学人卫版第10版教材PPT课件下载龙殿法第十版
- 9.4.2深部真菌病隐球菌病儿科学人卫版第10版教材PPT课件下载龙殿法第十版
- 9.4.1深部真菌病假丝酵母菌病儿科学人卫版第10版教材PPT课件下载龙殿法第十版
- 9.3.3小儿急性粟粒性肺结核儿科学人卫版第10版教材PPT课件下载龙殿法第十版
- 9.3.4结核性脑膜炎儿科学人卫版第10版教材PPT课件下载龙殿法第十版
- 9.3.2小儿原发性肺结核儿科学人卫版第10版教材PPT课件下载龙殿法第十版
- 9.3.1小儿结核病概述儿科学人卫版第10版教材PPT课件下载龙殿法第十版
- 9.2.1猩红热儿科学人卫版第10版教材PPT课件下载龙殿法第十版
- 9.2.2-流行性脑脊髓膜炎儿科学人卫版第10版教材PPT课件下载龙殿法第十版
- 安全风险分级管控和事故隐患排查治理双重预防机制建设
- 安全漫画-作业现场违章分析
- 安全生产应知应会