求问这段汇编语言的延时程序怎么计算延时函数延时时间计算

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
性格沉稳、爱好运动、喜欢结交朋友
LOFTER精选
阅读(206)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'51单片机的精确延时程序分析(C语言和汇编语言程序)',
blogAbstract:'&
一、C51程序
在晶振为11.0592的情况下,如下程序能实现ms级的比较精确的延时:
1 void Delayms(unsigned int n)
3 &&& unsigned int i,j;
4 &&& for(j=n;j&0;j--)
5 &&& for(i=112;i&0;i--);
用keil可以看出这个延时的时间,我们先延时1ms,即Delayms(1)。
进入Delayms前,sec=0.s
blogTag:'',
blogUrl:'blog/static/3',
isPublished:1,
istop:false,
modifyTime:7,
publishTime:3,
permalink:'blog/static/3',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'性格沉稳、爱好运动、喜欢结交朋友',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}9451系列单片机延时程序运行时间的计算
上亿文档资料,等你来发现
9451系列单片机延时程序运行时间的计算
能不能得到充分利用,可以在工程化生产应用中适当降;参考文献;[1]MAXIMAppNotes:Underst;temPerformanceApr24,2001;taUnderstandingHowADCErr;Apr24,2001.[3]MAXIMAppNo;High2PerformanceADCsandR;作者简介:吴绍炜(1974-),男,硕士研究生,;
能不能得到充分利用,可以在工程化生产应用中适当降低采样时钟指标以获取较高的经济性能,基于该设计的电路已经成功运用于Outwit9028型无线通信分析仪。□参考文献[1]MAXIMAppNotes:UnderstandingHowADCErrorsAffectSys2temPerformanceApr24,2001.[2]MAXIMAppNotes:DesignaLow2JitterClockforHighSpeedDa2taUnderstandingHowADCErrorsAffectSystemPerformanceApr24,2001.[3]MAXIMAppNotes:DynamicPerformanceRequirementsforHigh2PerformanceADCsandRFComponentsinDigitalReceiverApplications作者简介:吴绍炜(1974-),男,硕士研究生,主要研究方向:测试计量技术与仪器;肖莉(1976-),女,软件系统工程师,主要研究方向:数字信号处理和数字通信。收稿日期:(8186)文章编号:08)05-0102-0251系列单片机延时程序运行时间的计算彭志刚(湖南工业职业技术学院电气工程系,长沙410082)摘要:软件延时在检测和控制领域使用广泛,延时时间的准确性和误差尤为重要。本文分析了单片机延时程序运行时间的详细计算过程,并采用工具软件使延时程序的运行时间计算显得更加快捷、准确。关键词:单片机;延时程序;机器周期;时间中图分类号:TP368.1  文献标识码:B1 引言在由单片机构成的检测与控制系统中,经常需要实现延时控制。实现延时主要有3种方法:(1)硬件延时,如555集成电路外接RC构成延时电路;(2)用单片机的定时器/计数器实现延时;(3)由于在单片机应用系统中,,特,,所以,延。由于51系列单片机常用汇编语言和C51,因此,对应的延时程序也可以用这两种语言编程,其运行时间的分析计算方法也各不相同。2 汇编语言延时程序运行时间的计算汇编语言编写的延时程序用循环结构及嵌套实现,延时程序常以子程序的形式出现。其运行时间与指令的执行时间、循环次数及单片机的晶振频率有关。若单片机的晶振频μs,即T=率为12MHz,则一个机器周期(用T表示)的时间为1μs,延时程序的总机器周期数用N表示,延时程序的运行时1间用t表示,则t=N×T。现以应用较多的双重循环和三重循环结构的延时程序为例来分析计算其运行时间。2.1 双重循环结构的延时程序机器周期数D10MS:MOVR7,#14H1 D1:MOVR6,#0F8H1NOP1DJNZR6,$2DJNZR7,D12RET2内循环:由DJNZR6,$指令构成,执行此循环所用的机器周期数为248×2=496。外循环:由第二条指令至第五条指令构成,执行此循环所用的机器周期数为(1+1+248×2+2)×20=10000。该段程序总的机器周期数为N=1+10000+μs2=10003,所以该段程序的运行时间为t=N×T=10003×1μs。=10003102 2.2 三重循环结构的延时程序机器周期数DL:MOVR5,#0AH1DL0:MOVR6,#0C8HDL1:MOVR7,#0F8HR7,2R5,DL02RET2内循环:由DJNZR7,$指令构成,执行此循环所用的机器周期数为248×2=496。中间循环:由第三条指令至第六条指令构成,执行此循环所用的机器周期数为(1+1+248×2+2)×200=100000。外循环:由第二条指令至第七条指令构成,执行此循环所用的机器周期数为(1+)×10=1000030。该段程序总的机器周期数为N=1+=1000033,所以该段程序的运行时间为t=N×T=1000033×μs=1000033μs1≈1s。3 C51语言延时程序运行时间的计算用C51语言编写的延时程序以函数的形式出现,通常不能直接计算其运行时间,常用采用如下两种方法计算延时时间。3.1 C51程序转化为汇编语言程序将用C51编写的延时函数转换为汇编语言程序,该转换过程可用Keil软件完成,通过计算汇编语言程序的运行时间便可得到该延时函数的运行时间。现举例分析,延时函数如下://delay.c#include&reg51.h&voiddelay(unsignedcharn){ n=10; while(n--) {for(i=0;i&200;i++); }}该延时函数转换成的汇编语言程序如下:C:0X0000MOVR7,#0X0A欢迎光临本刊网站.cnC:0X0002MOVR5,0X07C:0X0004DECR7C:0X0005MOVA,R5C:0X0006JZC:8CLRAC:0X0009MOVR6,AC:0X000AMOVA,R6C:0X000BCLRCC:0X000CSUBBA,#0XC8C:0X000EJNCC:0INCR6C:0X0011SJMPC:000AC:0X0013RET该段汇编程序的运行时间和前面介绍的汇编语言延时程序计算方法一样,此处不再详细分析,设晶振频率为12MHZ,则一μs。该段汇编语言程序为双重循环结构,总的机个机器周期为1器周期数为N=(8×200+13)×10+6+1+2=16139,运行时间μs=16139μs。采用此方法计算时间非常精确。t=N×13.2 用Keil软件调试程序时记录运行时间有如下程序:#include&reg51.h&#include&intrins.h&voiddelayms() { unsignedchari,n;n=10;while(n--){for(i=0;i&200;i++); } }voidmain(){unsignedcharoutdata=for(;;) {outdata=_crol_(1);  P1=  delayms();}}程序中需要计算延时函数voiddelayms()的执行时间,可以使用观察程序执行时间的方法来计算延时函数的运行时间。进入调试状态后,窗口左侧是寄存器和一些重要的系统变量的窗口(见图1),其中有一项是sec,即统计从开始执行程数值,然后按下F10,执行完delayms()后再次观察sec值,这里前后两次观察到的值分别是:0.000403s和0.016545s,其差值为0.016142s,此差值即为延时函数voiddelayms()的运行时间。由于主程序中需要采用函数调用占用时间,所以此方法存在一点小误差。4 用Emu51Form软仿真计时器计算延时程序的运行时间Emu51Form是计算延时时间的工具软件,计算时间时方便、快捷,其准确度高,误差极小,用汇编语言和C51语言编写的延时程序都能适用于该软件,此方法计算时间非常准确。将Emu51Form嵌入Keil软件下便可使用,该工具软件的使用步骤如下:(1)打开Keil\tools.ini文件,在它的C51栏中加入AGSI9=Emu51Form.DLL(&delaysimulation&),然后存盘。(2)将Emu51Form.dll文件复制到Keil\c51\bin中。(3)新建一个工程,编写一个延时程序编译通过后,调试时在peripherals菜单下有Emu51Form选项,点击后就可使用了,见图2。Emu51Form计算用C51编写的延时程序执行情况如下:使用时先在keil软件中设置单片机的晶振频率,点击图3Fom1窗口中的Clear按钮清零,然后点击Run按钮,延时程序的运行时间便显示在文本框中。图3中左边延时程序的运行μs,和前面的分析计算结果一致。□时间是16139参考文献[1]潘新民.王燕芳.微型计算机控制技术[M].北京;人民邮电出版社,1999.[2]徐仁贵.单片微型计算机应用技术[M].北京;机械工业出版社,2000.[3]徐爱钧.单片机高级语言c51Windows环境编程与应用[M].北京;电子工业出版社,2002.[4]戴佳.戴卫恒.51单片机C语言应用程序设计实例精讲[M].北京;电子工业出版社,2007.[5]楼然苗,李光飞.单片机课程设计指导[M].北京;北京航空航天大学出版社,2007.图1 观察sec确定延时时间序到目前为止用去的时间。按功能键F10,以过程单步的形式执行程序,在执行到delayms()这一行之前停下,查看sec的值(把鼠标停在sec后的数值上即可看到完整的数值),记下该欢迎订阅欢迎撰稿欢迎发布产品广告信息作者简介:彭志刚(1974-),男,湖南石门人,讲师,研究方向:电子技术应用。收稿日期:(8098) 103 包含各类专业文献、生活休闲娱乐、各类资格考试、应用写作文书、专业论文、文学作品欣赏、9451系列单片机延时程序运行时间的计算等内容。
  51系列单片机延时程序计算的分析(汇编)_信息与通信_工程科技_专业资料。51系列单片机延时程序计算的分析(汇编)51系列单片机延时程序计算的分析(汇编)...  数秒不等, 对于许多 C51 开发者特别是初学者编制非常精确的延时程序有一定难度...单片机开发经验的基础上,介绍几种实用的编制精确延时程序和计算程序执行时间的方法...   51单片机汇编延时程序算... 2页 免费 51单片机C语言精确延时程... 2页 ...2 .指令周期是指单片机执行一条指令所需要的时间,一般利用单片机的机器周期来计...   单片机C51延时时间怎样计算_信息与通信_工程科技_专业资料。单片机C51延时时间怎样计算单片机 C51 延时时间怎样计算? C 程序中可使用不同类型的变量来进行延时设计....   单片机延时计算_信息与通信_工程科技_专业资料。单片机延时时间计算,51单片机延时计算,单片机延时延时时间怎样计算? 单片机 C51 延时时间怎样计算? C 程序中可使用...   单片机C51延时时间怎样计算_信息与通信_工程科技_专业资料。单片机 C51 延时时间怎样计算 C 程序中可使用不同类型的变量来进行延时设计。经实验测试,使用 unsigned...   精确延时计算公式: 延时时间=[(2*第一层循环+3)*第二层循环+3]*第三层...在单片机延时程序中应考虑所使用的晶振的频率,在 51 系列的单片机 中我们常用的...  延时时间怎样计算? 单片机 C51 延时时间怎样计算? C 程序中可使用不同类型的...调用需要 2 个时钟周期的 lcall,所以 delay time 比从函数代码的执行时间多 2...  51 单片机的几种精确延时实现延时通常有两种方法:一...2 软件延时与时间计算 在很多情况下,定时器/计数器...器确定延时时间 利用示波器来测定延时程序执行时间。...延时时间计算65
上亿文档资料,等你来发现
延时时间计算65
单片机C51延时时间怎样计算?;[日期:][来源:本站原创作;C程序中可使用不同类型的变量来进行延时设计;一.500ms延时子程序;程序:;voiddelay500ms(void);unsignedchari,j,k;;for(i=15;i&0;i--);for(j=202;j&0;j--);for(k=81;k&0;k
单片机C51延时时间怎样计算?[日期: ] [来源:本站原创 作者:admin] [字体:大 中 小]
(投递新闻)C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。 以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。一. 500ms延时子程序程序:void delay500ms(void){unsigned char i,j,k;for(i=15;i&0;i--)for(j=202;j&0;j--)for(k=81;k&0;k--);}计算分析:程序共有三层循环一层循环n:R5*2 = 81*2 = 162us
2us二层循环m:R6*(n+3) = 202*165 = 33330us
2us + R5赋值 1us = 3us三层循环: R7*(m+3) = 15*33333 = 499995us
2us + R6赋值 1us = 3us循环外:
子程序调用 2us + 子程序返回 2us + R7赋值 1us
= 5us延时总时间 = 三层循环 + 循环外 =
= 500000us =500ms计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5二. 200ms延时子程序程序:void delay200ms(void)
{unsigned char i,j,k;for(i=5;i&0;i--)for(j=132;j&0;j--)for(k=150;k&0;k--);
}三. 10ms延时子程序程序:void delay10ms(void)
{unsigned char i,j,k;for(i=5;i&0;i--)for(j=4;j&0;j--)for(k=248;k&0;k--);
}四. 1s延时子程序程序:void delay1s(void){unsigned char h,i,j,k;for(h=5;h&0;h--)for(i=4;i&0;i--)for(j=116;j&0;j--)for(k=214;k&0;k--);
}参考链接:/news/6.htmkeilc51程序设计中几种精确延时及延时的计算、确定软件用法(如protues、keil、Word)
12:04:54 阅读340 评论0 字号:大中小摘要实际的单片机应用系统开发过程中,由于程序功能的需要,经常编写各种延时程序,延时时间从数微秒到数秒不等,对于许多C51开发者特别是初学者编制非常精确的延时程序有一定难度。本文从实际应用出发,讨论几种实用的编制精确延时程序和计算程序执行时间的方法,并给出各种方法使用的详细步骤,以便读者能够很好地掌握理解。引言单片机因具有体积小、功能强、成本低以及便于实现分布式控制而有非常广泛的应用领域[1]。单片机开发者在编制各种应用程序时经常会遇到实现精确延时的问题,比如按键去抖、数据传输等操作都要在程序中插入一段或几段延时,时间从几十微秒到几秒。有时还要求有很高的精度,如使用单总线芯片DS18B20时,允许误差范围在十几微秒以内[2],否则,芯片无法工作。用51汇编语言写程序时,这种问题很容易得到解决,而目前开发嵌入式系统软件的主流工具为C语言,用C51写延时程序时需要一些技巧[3]。因此,在多年单片机开发经验的基础上,介绍几种实用的编制精确延时程序和计算程序执行时间的方法。 实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。 1 使用定时器/计数器实现精确延时 单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达216(2的16次方,因为TH1,TH0共为16位)=65 536 μs。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。 在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间的延时。使用定时器/计数器延时从程序的执行效率和稳定性两方面考虑都是最佳的方案。但应该注意,C51编写的中断服务程序编译后会自动加上PUSH ACC、PUSH PSW、POP PSW和POP ACC语句,执行时占用了4个机器周期;如程序中还有计数值加1语句,则又会占用1个机器周期。这些语句所消耗的时间在计算定时初值时要考虑进去,从初值中减去以达到最小误差的目的。 2 软件延时与时间计算 在很多情况下,定时器/计数器经常被用作其他用途,这时候就只能用软件方法延时。下面介绍几种软件延时的方法。2.1 短暂延时 可以在C文件中通过使用带_NOP_( )语句的函数实现,定义一系列不同的延时函数,如Delay10us( )、Delay25us( )、Delay40us( )等存放在一个自定义的C文件中,需要时在主程序中直接调用。如延时10 μs的延时函数可编写如下: Delay10us( )函数中共用了6个_NOP_( )语句,每个语句执行时间为1 μs。主函数调用Delay10us( )时,先执行一个LCALL指令(2 μs),然后执行6个_NOP_( )语句(6 μs),最后执行了一个RET指令(2 μs),所以执行上述函数时共需要10 μs。
可以把这一函数当作基本延时函数,在其他函数中调用,即嵌套调用\[4\],以实现较长时间的延时;但需要注意,如在Delay40us( )中直接调用4次Delay10us( )函数,得到的延时时间将是42 μs,而不是40 μs。这是因为执行Delay40us( )时,先执行了一次LCALL指令(2 μs),然后开始执行第一个Delay10us( ),执行完最后一个Delay10us( )时,直接返回到主程序【因为最后一个(其实每一个都有)Delay10us( )中最后已有RET指令,不需要在Delay40us( )函数中最后再执行RET指令,省去了2vs】。依此类推,如果是两层嵌套调用,如在Delay80us( )中两次调用Delay40us( ),则也要先执行一次LCALL指令(2 μs),然后执行两次Delay40us( )函数(84 μs),所以,实际延时时间为86 μs。简言之,只有最内层的函数执行RET指令。该指令直接返回到上级函数或主函数。如在Delay80μs( )中直接调用8次Delay10us( ),此时的延时时间为82 μs。通过修改基本延时函数和适当的组合调用,上述方法可以实现不同时间的延时。 2.2 在C51中嵌套汇编程序段实现延时 在C51中通过预处理指令#pragma asm和#pragma endasm可以嵌套汇编语言语句。用户编写的汇编语言紧跟在#pragma asm之后,在#pragma endasm之前结束。 如:#pragma asm…汇编语言程序段…#pragma endasm 延时函数可设置入口参数,可将参数定义为unsigned char、int或long型。根据参数与返回值的传递规则,这时参数和函数返回值位于R7、R7R6、R7R6R5中。在应用时应注意以下几点: ◆ #pragma asm、#pragma endasm不允许嵌套使用;◆在程序的开头应加上预处理指令#pragma asm,在该指令之前只能有注释或其他预处理指令;◆当使用asm语句时,编译系统并不输出目标模块,而只输出汇编源文件;
◆ asm只能用小写字母,如果把asm写成大写,编译系统就把它作为普通变量;◆ #pragma asm、#pragma endasm和 asm只能在函数内使用。 将汇编语言与C51结合起来,充分发挥各自的优势,无疑是单片机开发人员的最佳选择。 2.3 使用示波器确定延时时间 熟悉硬件的开发人员,也可以利用示波器来测定延时程序执行时间。方法如下:编写一个实现延时的函数,在该函数的开始置某个I/O口线如P1.0为高电平,在函数的最后清P1.0为低电平。在主程序中循环调用该延时函数,通过示波器测量P1.0引脚上的高电平时间即可确定延时函数的执行时间。方法如下:包含各类专业文献、文学作品欣赏、幼儿教育、小学教育、高等教育、行业资料、专业论文、延时时间计算65等内容。 
  UPS延时时间计算公式计算_信息与通信_工程科技_专业资料。UPS延时时间计算公式计算UPS 延时时间计算公式计算: 其中: T:UPS 蓄电池放电时间 Ue:蓄电池电压 Ah:蓄...  因此,在多年单片机开发经验的基础上,介绍几种实用的编制精确延时程序和计算程序执行时间的方法。 实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种...   延时时间计算_电子/电路_工程科技_专业资料。单片机 C51 延时时间怎样计算? [日期: ] [来源:本站原创 作者:admin] [字体:大中小] (投递新闻) ...  RC 延时电路的延时时间计算公式计算公式: 延时时间= ― R*C*ln((E-V)/E) 其中: “―”是负号; 电阻 R 和电容 C 是串联,R 的单位为欧姆,C 的单位为...   单片机延时计算_信息与通信_工程科技_专业资料。单片机延时计算延时时间怎样计算? 单片机 C51 延时时间怎样计算? C 程序中可使用不同类型的变量来进行延时设计。 ...   单片机延时计算_信息与通信_工程科技_专业资料。单片机延时时间计算,51单片机延时计算,单片机延时延时时间怎样计算? 单片机 C51 延时时间怎样计算? C 程序中可使用...   UPS延时时间计算,电池容量计算公式_电力/水利_工程科技_专业资料。根据以往工作经验所得,此公式较为准确电池容量计算公式: 平均电流= 【功率 / UPS 效率 0.9】...   RC延时电路延时时间计算_电子/电路_工程科技_专业资料。RC延时电路延时时间计算计算公式: 延时时间= ― R*C*ln((E-V)/E) 其中: “―”是负号; 电阻 R ...   单片机C51延时时间怎样计算_信息与通信_工程科技_专业资料。单片机 C51 延时时间怎样计算 C 程序中可使用不同类型的变量来进行延时设计。经实验测试,使用 unsigned...延时时间计算_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
&&¥2.00
&&¥3.00
喜欢此文档的还喜欢
延时时间计算
阅读已结束,如果下载本文需要使用
想免费下载本文?
文档免下载券下载特权
全站付费文档8折起
千本精品电子书免费看
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢单片机汇编语言延时计算_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
&&¥3.00
&&¥3.00
喜欢此文档的还喜欢
单片机汇编语言延时计算
单​片​机​编​程​时​ ​汇​编​语​句​的​延​时​计​算​,​很​精​确​,​一​步​一​步​的​教​你​计​算​。
阅读已结束,如果下载本文需要使用
想免费下载本文?
文档免下载券下载特权
全站付费文档8折起
千本精品电子书免费看
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢}

我要回帖

更多关于 中考物理计算题汇编 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信