在写一些有些时序的程序时,要用到准确的延时时间,以下是使用Keil软件的反汇编来计算延时的。
程序如:
void delayns(uchar t)
{ uchar k,i,j;
for(k=0;k
for(i=0;i<14;i++)
for(j=0;j<237;j++);
}
经过汇编后计算的结果为
(3*j*i+5*i+10)*k+4=10024*k+5 us;这个10us的延时还行
他的反汇编程序是:
CLR A 1
MOV R6,A 1
?C0008:
MOV A,R6 1*k
CLR C 1*k
SUBB A,R7 1*k
JNC ?C0017 2*k
; for(i=0;i<14;i++)
CLR A 1*k
MOV R5,A 1*k
?C0011:
; for(j=0;j<237;j++);
CLR A 1*i*k
MOV R4,A 1*i*k
?C0014:
INC R4 1*j*i*k
CJNE R4,#0EDH,?C0014 2*j*i*k #0EDH为j
?C0013:
INC R5 1*i*k
CJNE R5,#0EH,?C0011 2*i*k #0EH为i
?C0010:
INC R6 1*k
SJMP ?C0008 2*k
; }
?C0017:
RET 2
; END OF _delayns
关键字:延时程序 Keil软件 反汇编
引用地址:
精确延时程序
推荐阅读最新更新时间:2024-03-16 14:27
C51 延时程序两种方案
在keil2中修改晶振为22.1184,然后可以测试得到如下两种毫秒延时和秒延时。 方法一: /*实现功能:在22.1184MHZ下的毫秒延时*/ void dmsec (u16 count) { unsigned int i; while (count) { i =230; while (i 0) i--; count--; } } 方法二: /*实现功能:在22.1184MHZ下的大约1秒延时*/ for(i=0;i 1000;i++) { for(j=0;j 230;j++) { ; } } 方法三: /*实现功能:在22.1184MHZ下的大约1秒延时,stc
[单片机]
关于单片机延时程序中参数类型对延时的影响
今天别人问了一个关于天祥延时程序的问题。 void delay(unsigned int z) { unsigned int x,y; for(x=z;x 0;x--) for(y=110;y 0;y--); } 对于此延时函数中,系统时钟为11.0592MHz,当z取1时,延时时间大约为1ms,即当z去m,其延时时间就m ms.但是,当把x和y的类型都修改为char型时,z同样取1,其延时却变为0.2ms,为原来的1/5。刚开始一直没想明白,原以为两种定义类型都应该是一样的,但实际却不是如此。经过多方打探,觉得下面的解释还比较好。由于
[单片机]
Keil的软件仿真和硬件仿真
一、软件仿真 Keil有很强大的软件仿真功能,通过软件仿真可以发现很多将要出现的问题,Keil的仿真可以查看很多硬件相关的寄存器,通过观察这些寄存器值的变化可以知道代码有没有正常运行。这样可以避免频繁下载程序,延长单片机Flash寿命。 开始仿真之前,先配置一些选项。 1.在工程设置里设置好芯片型号和晶振频率。 2.在“Debug”选项卡中选择“Use Simulator”,表示使用软件仿真;选择“Run to main()”则表示跳过汇编代码,直接跳转到main函数开始仿真。设置下面的“Dialog DLL”项为“DARMSTM.DLL”和“TARMSTM.DLL”;parameter项为“-p
[单片机]
Keil C51软件使用方法
Keil简明使用方法共分6步: 第0步、 新建文件夹:在您喜欢的合适位置,新建一个用于存放您的工程文件的文件夹(如:d:\chinadpj1-1)。 第1步:打开 Keil C51调试软件,打开后界面参考图1所示。 第2步: 新建一个工程文件: ⑴、点击进入“新建一个工程文件(Project\New Project)”菜单,如图1。 ⑵、输入相关信息:如图2。 ①、选择工程文件要存放的路径(如:d:\chinadpj1-1)。 ②、输入工程文件名(如:chinadpj1-1)。 ③、单击“保存”。 ⑶、在弹出的对话框中选择 CPU 厂商(STC单片机也可以选Atmal,不影响编译),如图3。 ⑷、选择好相应的型
[单片机]
MSP430的软硬件C延时程序设计
MSP430是超低功耗16位单片机,越来越受到电子工程师亲睐并得到广泛应用。C程序直观,可读性好,易于移植和维护,已被很多单片机编程人员所采用。MSP430集成开发环境(如IAR Embedded Workbench和AQ430)都集成了C编译器和C语言级调试器C SPY。但是C语言难以实现精确延时,这一直困扰着很多MSP430单片机程序员。笔者在实际项目开发过程中,遇到很多需要严格时序控制的接口器件,如单总线数字温度传感器DSl8820、实时时钟芯片PCF8563(需要用普通]/o模拟12C总线时序)、三线制数字电位器AD8402、CF卡(Compact Flash Card)等都需要 s级甚至纳ns级精确延时;而一些慢速设备只需
[单片机]
STM32-Keil软件仿真和硬件仿真/在线仿真
软件仿真和硬件仿真什么区别?软件仿真就是没有硬件参与的仿真,完全是模拟实现的。硬件仿真是将程序下载到控制芯片的FLASH或RAM中,直接在硬件上实现仿真。【有什么问题欢迎联系讨论,一起解决问题】 仿真这种东西,因为涉及到信任问题,用的好觉得好用,用不好可能会徒增麻烦——“还不如直接在硬件上调试靠谱”。但是总体上,仿真还是比较有用的,比如在排查软件问题(寄存器配置等)的时候,使用软件仿真是非常靠谱的。而如果涉及到硬件的问题(比如你的板子代码需要读取外部信号,或者输出信号等),可能需要用到硬件仿真,或者说在线仿真。关于仿真,网上的资料说的还是挺全的,这里只做总结。 一、软件仿真 1.1 仿真配置 首先确定仿真的硬件环境。点击魔
[单片机]
从零开始51单片机教程——连载6 延时程序分析
掌握汇编中的延时程序 上一次课中,我们已经知道,程序中的符号R7、R6是代表了一个个的RAM单元,是用来放一些数据的,下面我们再来看一下其它符号的含义。 DELAY: MOV R7,#250 ;(6) D1: MOV R6,#250 ;(7) D2: DJNZ R6,D2 ;(8) DJNZ R7,D1 ;(9) RET ;(10) 〈单片机延时程序〉 MOV:这是一条指令,意思是传递数据。说到传递,我们都很清楚,传东西要从一本人的手上传到另一本人的手上,也就是说要有一个接受者,一个传递者和一样东西。从指令MOV R7,#250中来分析,R7是一个接
[单片机]
keil c51程序设计中集中精确延时方法
1使用定时器/计数器实现精确延时 单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达216=65 536 μs。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。 在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间的延时。使用定时器/计数器延时从程序的执行效率和稳定性两方面考虑都是最佳的方案。但应该注意,C51编写的中断服务程序编译后会自动加上
[单片机]