Keil仿真及软件延时语句的精确计算

合集下载

Keil_C51_for循环精确延时

Keil_C51_for循环精确延时

for循环实现C语言精确延时(晶振12MHz,一个机器周期1us.)2ms延时子程序void delay2ms(void){uchar i,j,k;for(i=5;i>0;i--)for(j=8;j>0;j--)for(k=25;k>0;k--);}10ms延时子程序程序:void delay10ms(void){uchar i,j,k;for(i=5;i>0;i--)for(j=4;j>0;j--)for(k=248;k>0;k--);}产生的汇编C:0x0800 7F05 MOV R7,#0x05C:0x0802 7E04 MOV R6,#0x04C:0x0804 7DF8 MOV R5,#0xF8C:0x0806 DDFE DJNZ R5,C:0806C:0x0808 DEFA DJNZ R6,C:0804C:0x080A DFF6 DJNZ R7,C:0802C:0x080C 22 RET20ms延时子程序程序:void delay20ms(void){uchar i,j,k;for(i=5;i>0;i--)for(j=8;j>0;j--)for(k=248;k>0;k--);}200ms延时子程序程序:void delay200ms(void){uchar i,j,k;for(i=5;i>0;i--)for(j=132;j>0;j--)for(k=150;k>0;k--);}产生的汇编C:0x0800 7F05 MOV R7,#0x05C:0x0802 7E84 MOV R6,#0x84C:0x0804 7D96 MOV R5,#0x96C:0x0806 DDFE DJNZ R5,C:0806C:0x0808 DEFA DJNZ R6,C:0804C:0x080A DFF6 DJNZ R7,C:0802C:0x080C 22 RET500ms延时子程序程序:void delay500ms(void){uchar i,j,k;for(i=15;i>0;i--)for(j=202;j>0;j--)for(k=81;k>0;k--);}产生的汇编:C:0x0800 7F0F MOV R7,#0x0FC:0x0802 7ECA MOV R6,#0xCAC:0x0804 7D51 MOV R5,#0x51C:0x0806 DDFE DJNZ R5,C:0806C:0x0808 DEFA DJNZ R6,C:0804C:0x080A DFF6 DJNZ R7,C:0802C:0x080C 22 RET计算分析:程序共有三层循环一层循环n:R5*2 = 81*2 = 162us DJNZ 2us二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值1us = 3us 三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值1us = 3us循环外: 5us 子程序调用2us + 子程序返回2us + R7赋值1us = 5us 延时总时间= 三层循环+ 循环外= 499995+5 = 500000us =500ms计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5在精确延时的计算当中,最容易让人忽略的是计算循环外的那部分延时,在对时间要求不高的场合,这部分对程序不会造成影响.1s延时子程序程序:void delay1s(void){uchar 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--);}产生的汇编C:0x0800 7F05 MOV R7,#0x05 C:0x0802 7E04 MOV R6,#0x04 C:0x0804 7D74 MOV R5,#0x74 C:0x0806 7CD6 MOV R4,#0xD6 C:0x0808 DCFE DJNZ R4,C:0808 C:0x080A DDFA DJNZ R5,C:0806 C:0x080C DEF6 DJNZ R6,C:0804 C:0x080E DFF2 DJNZ R7,C:0802 C:0x0810 22 RET。

在单片机KeilC开发环境中设计精确的延时函数

在单片机KeilC开发环境中设计精确的延时函数

第22卷第8期徐州工程学院学报2007年8月Vol.22No.8Journal of Xuzhou Institute of Technology AU G12007在单片机Keil C开发环境中设计精确的延时函数张 宏,邢文生(焦作大学, 河南 焦作 454000) 【摘 要】 Keil C语言是开发单片机系统常用的语言,但不能象汇编语言一样预测代码执行的指令周期,对外围元件实现精确的延时控制比较困难.文章从Keil C的编译原理出发,分析几种延时函数,实现了精确的延时效果.【关键词】 单片机;Keil C语言;延时【中图分类号】 TP368.1 【文献标识码】A【文章编号】167320704(2007)0820064204单片机的编程语言有汇编语言和Keil C语言等.相对汇编来说,Keil C具有代码编写方便、易于维护、便于理解的优点,适合编写大的项目,已被广泛使用.但它不能够象汇编代码那样直接计算出每条语句的执行周期,无法预测代码执行的指令时间,在实时性方面不易保证.如果某个外围元件需要比较精确的延时,用计时器会浪费宝贵的单片机资源,那么如何在Keil C语言中编写出可以实现精确延时的延时函数就具有很重要的实用意义.1 单片机工作原理及Keil C语言实现延时的机制51单片机系统由单片机、晶振、外围元件等组成.使用时需要在单片机的时钟引脚XTAL1、XTAL2接上石英晶振或有源晶振,晶振的作用是向单片机提供外部的振荡脉冲.单片机内部有指令寄存器PC,在晶振脉冲的作用下单片机一步步地执行指令寄存器所指的命令,这就是单片机语言的执行过程.单片机延时程序就是让单片机执行许多空操作.单片机Keil C语言实现延时程序的实现机制如图1所示.由图1可以看出,Keil C编译器翻译器的功能是将标准的Keil C语言生成单片机能够认识的汇编指令. Keil C环境中,如果想查看Keil C语言生成的汇编指令,需要在程序编译成功后,启动菜单下Debug命令下的start/stop debug session项,系统就会出现编译后对应的汇编语句,并可以根据汇编语句计算出延时的时间.51单片机机器周期的是晶振频率的1/12,每条汇编指令执行使用的所占的机器周期不同.延时时间的计算公式是:总机器周期数×晶振频率/12.为了计算方便,假定本系统使用的晶振是12M Hz.2 Keil C语言实现延时程序分析2.1 常见的延时代码的分析Keil C语言实现延时一般使用循环语句,下面是经常使用的延时代码:void delay(unsigned char i){for(;i!=0;i--);}Keil C将循环体for(;i!=0;i--)转换成的汇编代码及其机器周期数如表1.收稿日期:2007203221作者简介:张 宏(19662),男,河南焦作人,副教授,主要从事计算机自动控制技术研究.图1 Keil C 语言延时的实现机制Fig.1 The delay f unction with Keil C表1 循环体for (;i !=0;i --)转换成的汇编代码Table 1 The ASM code of loop “for (;I >0i --)”编译成的汇编代码功能描述机器周期数MOV A ,R7加载循环体循环个数1J Z C如果循环个数为0,结束延时2DEC R7否则循环个数减一1S J MP delay 进行下一轮循环2可以看出,完成一次主循环的需要6个机器周期,在循环次数分别是0、1、2、3……情况下,延时函数所需的机器周期分别是3、9、15、21…….如果要调用该延时函数,需要使用delay (x )语句,其中x 是延时函数主循环的次数,决定了延时时间的长短.该语句经Keil C 转换后成的汇编代码如表2.表2 调用该延时函数转换成的汇编代码Table 2 The ASM code of calling the f unction生成的汇编代码功能描述机器周期数MOV R7,#data将总循环个数送寄存器1LCALL delay 转入执行延时函数2分析该语句可知,调用延时函数需要3个时钟周期来完成.如果调用延时函数时设定循环的处始值是i ,可以得该延时函数的延长时间6i +3+3.该循环延时函数的延时精度是6个机器周期.假如系统使用的晶振是12M Hz ,则延时时间是(6i +6)/12微秒.同样道理,循环体是for (a =i ;a !=0;a --)的延时函数与此类似.2.2 使用while (--i )语句实现精度为2微秒级的延时函数如果要实现微秒级的延时精度,可以使用下面的函数代码:void delay1(unsigned char i ){while (--i );}循环体while (--i )生成的汇编源代码以及机器周期数如表3.可以看出,完成一次主循环的需要2个机器周期,在循环次数分别是0、1、2、3……情况下,延时函数所需的机器周期分别是2、4、6、8…….要调用该延时函数,由表2可知需要3个时钟周期.如果调用延时函数时设定循环个数的初始值是i ,可张宏,等:在单片机Keil C 开发环境中设计精确的延时函数徐州工程学院学报 2007年第8期以得该延时函数的延长时间2i+2+3.假定系统使用的晶振是12M Hz,则延时时间是(2i+5)/12微秒.该循环延时函数的的延时精度是2个机器周期.表3 while(--i)生成的汇编代码Table3 The ASM code of loop“while(--i)”生成的汇编代码功能描述机器周期数DJ NZ R7,delay将寄存器R7内容减1,如果不为0继续循环23 使用nop()语句设计任意延时精度的延时函数nop()语句是Keil C语言中自己带的一个函数,其功能是相当于汇编语句中的NO P指令.该语句的功能是,例如有下面C语言语句:......nop();nop();......则编译成的汇编代码为:......NO P NO P......如果在第一个延时函数中加入nop()语句,就可以增加主循环的运行周期.因此将nop()语句与延时循环程序结合起来,可以设计任意的延时时间.分析下面实例代码:void delay(unsigned char i){for(;i!=0;i--){nop();nop();}}该代码是在延时函数代码的循环体里面加入两个nop()语句,编译生成的汇编代码以及机器周期数如表4.表4 加入两个nop()语句后的延时函数汇编代码Table4 The ASM code added two nop()line生成的汇编代码功能描述机器周期数MOV A,R7加载循环个数1J Z C如果循环个数为0,结束延时2NOP执行一次空操作1NOP执行一次空操作1DEC R7循环个数减11S J MP delay进行下一轮循环2可以看出,因为C语言循环体加入两个nop()语句,因此汇编代码比原来多两个机器周期,完成一次主循环需要8个机器周期,在循环次数分别是0、1、2、3……情况下,延时函数所需的机器周期分别是3、11、19、27…….调用该延时函数,由表2可知需要3个时钟周期.假设调用延时函数时设定循环的初始值是i,可以得该延时函数的延长时间8i+3+3.该循环延时函数的的延时精度是8个机器周期.假定系统使用的晶振是12M Hz,则延时时间是(8i+6)/12微秒.通过灵活使用nop()函数,可以灵活设计出任意精度延时函数,达到满意的延时效果.在Keil C语言中,使用nop()语句需要在程序的前面加上“#include<IN TRINS.h>”语句.每一个nop()语句编译后需要一个字节的程序空间.4 结语上面程序在Keil uVision7.0版本中实现.对Keil C的编译原理的深入理解,通过恰当的语法运用,合理的语句运用,Keil C语言是可以达到满意的延时效果的.这样既可以发挥C语句的优点,又可以对外围元件进行实时的控制.张宏,等:在单片机Keil C开发环境中设计精确的延时函数参 考 文 献[1]李建忠.单片机原理及应用[M].西安:西安电子科技大学出版社,2003.[2]金炯泰等.如何使用KEIL8051C编译器[M].北京:北京航空航天大学出版社,2002.[3]范风强.单片机语言C51应用实战集锦[M].北京:电子工业出版社,2003.[4]徐爱钧.Keil Cx51V7.0单片机高级语言编程与uVision2应用实践[M].北京:电子工业出版社,2004.Precisely Programmed Delay Function B ased on MCU Language K eil CZHAN G Hong,XIN G Wen2sheng(Jiaozuo University,Jiaozuo454003,China)【Abstract】 As a commo nly used language in developing MCU system,Keil C is unable to predict t he p recise process time as t he assembly language,and is in difficulty in achieving accurate delay control over accessories.Based on some compiling principles of Keil C,t his paper analyzes some delay f unctions and a2 chieves precise delay p urpose.【K ey w ords】 MCU;Keil C;delay(责任编辑 曹 晨) (上接第18页)On Two Inequalities for g ExpectationZHU Hong2yan,SUO Xin2li,J IAO lin(China University of Mining and Technology,Xuzhou221008,China)【Abstract】 It is proven t hat J ensen’s inequality of bivariate convex f unction for g expectation holds if and only if g is a linear generator.And an equivalent condition and a sufficient condition of Markov ine2 quality for g expectation are accordingly arrived at.【K ey w ords】 backward stochastic differential equation(BSD E);g expectation;inequality(责任编辑 崔思荣)。

延时1us程序12mhz晶振c语言,51单片机KeilC延时程序的简单(晶振12MHz,一。。。

延时1us程序12mhz晶振c语言,51单片机KeilC延时程序的简单(晶振12MHz,一。。。

延时1us程序12mhz晶振c语⾔,51单⽚机KeilC延时程序的简单(晶振12MHz,⼀。

⼀. 500ms延时⼦程序void delay500ms(void){unsignedchari,j,k;for(i=15;i>0;i--)for(j=202;j>0;j--)for(k=81;k>0;k--);}产⽣的汇编:C:0x0800 7F0F MOV R7,#0x0FC:0x0802 7ECA MOV R6,#0xCAC:0x0804 7D51 MOV R5,#0x51C:0x0806 DDFE DJNZ R5,C:0806C:0x0808 DEFA DJNZ R6,C:0804C:0x080A DFF6 DJNZ R7,C:0802C:0x080C 22 RET计算分析:程序共有三层循环⼀层循环n:R5*2 = 81*2 = 162us DJNZ 2us⼆层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值1us = 3us三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值1us = 3us循环外: 5us⼦程序调⽤2us +⼦程序返回2us + R7赋值1us = 5us延时总时间=三层循环+循环外= 499995+5 = 500000us =500ms计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5⼆. 200ms延时⼦程序void delay200ms(void){unsignedchari,j,k;for(i=5;i>0;i--)for(j=132;j>0;j--)for(k=150;k>0;k--);}产⽣的汇编C:0x0800 7F05 MOV R7,#0x05C:0x0802 7E84 MOV R6,#0x84C:0x080C 22 RET三. 10ms延时⼦程序void delay10ms(void){unsignedchari,j,k;for(i=5;i>0;i--)for(j=4;j>0;j--)for(k=248;k>0;k--);}产⽣的汇编C:0x0800 7F05 MOV R7,#0x05C:0x0802 7E04 MOV R6,#0x04C:0x0804 7DF8 MOV R5,#0xF8C:0x0806 DDFE DJNZ R5,C:0806C:0x0808 DEFA DJNZ R6,C:0804C:0x080A DFF6 DJNZ R7,C:0802C:0x080C 22 RET四. 1s延时⼦程序void delay1s(void){unsignedcharh,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--); }对1s延时的验证:1.设置仿真的晶振为12MHz2.在延时函数设置断点3.单步运⾏程序,到达延时函数的⼊⼝4.先记下进⼊延时函数的时间5.step out跳出函数,记下此时时间,两个时间相减即为延时函数运⾏时间函数运⾏时间=1.00041400-0.00041600≈1s产⽣的汇编C:0x0808 DCFE DJNZ R4,C:0808C:0x080A DDFA DJNZ R5,C:0806C:0x080C DEF6 DJNZ R6,C:0804C:0x080E DFF2 DJNZ R7,C:0802C:0x0810 22 RET在精确延时的计算当中,最容易让⼈忽略的是计算循环外的那部分延时,在对时间要求不⾼的场合,这部分对程序不会造成影响. void mDelay(unsigned int Delay) //Delay = 1000 时间为1S{unsignedinti;for(;Delay>0;Delay--){for(i=0;i<124;i ){;}}}void waitms(inti){charm;for( ; i ;i--){for(m = 203; m ; m--){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}}}延时1ms的函数时钟频率12MHzunsigned intsleepTime;unsingedchar inSleep = 0;void sleepService(void)}void isr_timer(void) //假定定时器中断1ms 中断⼀次。

keil里面时间的精确延时

keil里面时间的精确延时

51单片机 Keil C 延时程序的简单研究61.54.42.*1楼51单片机 Keil C 延时程序的简单研究作者:InfiniteSpace Studio/isjfk51单片机 Keil C 延时程序的简单研究by: InfiniteSpace Studio/isjfk, 1.21.2004任何人都可以在注明原作者和出处的前提下随意转载这篇文章,但不得用于商业目的。

应用单片机的时候,经常会遇到需要短时间延时的情况。

需要的延时时间很短,一般都是几十到几百微妙(us)。

有时候还需要很高的精度,比如用单片机驱动DS18B20的时候,误差容许的范围在十几us以内,不然很容易出错。

这种情况下,用计时器往往有点小题大做。

而在极端的情况下,计时器甚至已经全部派上了别的用途。

这时就需要我们另想别的办法了。

以前用汇编语言写单片机程序的时候,这个问题还是相对容易解决的。

比如用的是12MHz晶振的51,打算延时20us,只要用下面的代码,就可以满足一般的需要:mov r0, #09hloop: djnz r0, loop51单片机的指令周期是晶振频率的1/12,也就是1us一个周期。

mov r0, #09h需要2个极其周期,djnz也需要2个极其周期。

那么存在r0里的数就是(20-2)/2。

用这种方法,可以非常方便的实现256us以下时间的延时。

如果需要更长时间,可以使用两层嵌套。

而且精度可以达到2us,一般来说,这已经足够了。

现在,应用更广泛的毫无疑问是Keil的C编译器。

相对汇编来说,C固然有很多优点,比如程序易维护,便于理解,适合大的项目。

但缺点(我觉得这是C的唯一一个缺点了)就是实时性没有保证,无法预测代码执行的指令周期。

因而在实时性要求高的场合,还需要汇编和C的联合应用。

但是是不是这样一个延时程序,也需要用汇编来实现呢?为了找到这个答案,我做了一个实验。

用C语言实现延时程序,首先想到的就是C常用的循环语句。

利用Keil调试精确实现软件延时

利用Keil调试精确实现软件延时
整个执行时间的比例,点击相应的函数名,可以在该窗口的状态栏看到更详细的数据,如下图:
图2 值得注意的是,用性能分析窗口来观察延时函数的执行时间要求被观察的延时函数中不能再调用其他任何子函数,被测函数只能由C的 基本语句组成,否则观测到的时候并不是整个函数的运行时间。 采用上述方法,得到了以下几个延时程序: /* * 延时400毫秒 */ void Delay400Ms(void){
while(s--){ delay_1_s();
} }
但是我碰到一个比较奇怪的问题:在实现N秒延时函数中,我不调用delay_1_s()这个延时1秒函数,而用delay_1_s()中的语句来替 换delay_1_s(),改后的函数如下:
void delayNs(uchar s) {
uchar loop=10; unint j; while(s--){
比如我需要一个400ms的延时,随便写了个两重循环,外层循环5次,内层循环暂且设为5000: void Delay400Ms(void){
uchar i=5;
unint j; while(i--){
j=5000; while(j--);
//通过keil调试来确定循环次数
} }
在main函数中调用Delay400Ms(): void main()
loop=10; //注意,不能忘了此句 while(loop--){
j=8375; while(j--); } }
}
{ while(1){ P1=0; Delay400ms();
P1=1; }
} 进入uVersion的调试状态,按F10进行单步,当黄色箭头指向Delay400ms()这条语句时记下左边窗中Sys->sec的值,如图, 是0.00042426。

关于51精确延时及keil仿真延时时间

关于51精确延时及keil仿真延时时间

关于51精确延时及keil仿真延时时间
有时候需要精确的延时,比如18B20 温度传感器对时序要求非常严格,必
须精确到微秒级别
一、用NOP 函数
在keil C51 中,直接调用库函数:
#include // 声明了void _nop_(void);
_nop_(); // 产生一条NOP 指令
作用:对于延时很短的,要求在us 级的,采用“_nop_”函数,这个函数相当
汇编NOP 指令,延时几微秒。

NOP 指令为单周期指令,可由晶振频率算出延
时时间,对于12M 晶振,延时1uS。

(若为11.0592MHz,延时为12*(1/11.0592) =1.085uS)。

对于延时比较长的,要求在大于10us,采用C51 中的循环语句来
实现。

二、用for 和while 实现
在选择C51 中循环语句时,要注意以下几个问题
第一、定义的C51 中循环变量,尽量采用无符号字符型变量。

第二、在FOR 循环语句中,尽量采用变量减减来做循环。

第三、在do…while,while 语句中,循环体内变量也采用减减方法。

这因为在C51 编译器中,对不同的循环方法,采用不同的指令来完成的。

下面举例说明:
unsigned char i;
for(i=0;iunsigned char i;
for(i=255;i>0;i--);
其中,第二个循环语句C51 编译后,就用DJNZ 指令来完成,相当于如下指。

用Keil C语言实现精确延时的技术研究

用Keil C语言实现精确延时的技术研究

嵌 入式 汇编 , 即在 C语 言程 序 中嵌入 一段 汇编语
言程序 ; 二是 汇 编程序 部 分作 为 c语 言程 序的 一
个 子 函数 , 过 调 用 汇 编子 函数 实 现相 应 操 作 。 通 这两种 方法都 涉 及 到 C语 言与 汇 编 语 言混 合 编 程 的 问题 。混 合 编程 的关 键 主要有 两点 : 1 5 )C 1函数 名 的转换 及 其命 名规 则 ;
宏 的执行 时 间 以及 每 段 子程 序 加 调 用 语 句 所 消 耗 的 时间[ 。在 Ke 5 1 ] iC 1的 C编译 系统 中 , l C语
直接 采用 c语 言 实现 延 时的方 法 , 就是 通 过 C 1 5 编译 器预 先编译 c语 言程 序 , 后研 究它 生成 的 然
邓 全 李 磊 彭凤超
中 国电子 科技 集 团公 司第二 十七研 究所 郑 州 4 0 1 50 5

要: 针对 C语言如何有效实现精确延时 的问题 , 介绍了两种基 于 Ke iC语言环境 的解决方 法 , 结合 l 并
工 程 实 践 , 证 了本 文 方 法 的 有 效 性 。 验
反汇 编语 言代码 , 而保 证延 时 准确性 的方 法 。 从
在汇 编程 序 中 实 现 1 / 0 s延 时 , 常 采用 的  ̄ 通
汇编 代码 为 :
M 0V , R7 #0 H 5 DEL Y:DI Z R7 DELAY A N ,
言程序 能够 和汇 编程 序 实 现方 便 灵 活 的接 口, C
为程序 调试 提 供 必 要 的符 号 信 息 。在 使 用 汇 编
Kel 5 iC 1编译器 S l模式 下 进 行 编译 , 时 程 mal 这

Keil C51精确延时程序(C语言)

Keil C51精确延时程序(C语言)

Keil C51精确延时程序程序说明如下:振荡频率:12MHz机器周期=12/振荡频率=12/12000000=1us#include <reg52.h>void delay1(unsigned char i){ while(--i);}说明:delay1程序为:延时时间=(2*i+2)*机器周期。

i=1~255。

void delay2(unsigned char i){ while(i--);}说明:delay2程序为:延时时间=(6*i+2)*机器周期。

i=1~255。

void main (void){unsigned char m;delay1(10); //赋值并调延时程序delay1说明:本句为赋值并调用Delayus1:延时时间=(1+2)*机器周期。

全部延时时间为:延时时间=(1+2+2*i+2)*机器周期。

i=1~255。

本例:延时时间=(1+2+2*10+2)*1us=25usdelay2(10); //赋值并调延时程序delay2说明:本句为赋值并调用Delayus2:延时时间=(1+2)*机器周期。

全部延时时间为:延时时间=(1+2+6*i+2)*机器周期。

i=1~255。

本例:延时时间=(1+2+6*10+2)*1us=65usm=10; //赋值,m=1~255while(--m) ; //计算,延时时间=2*m*机器周期说明:本两句为赋值并计算。

全部延时时间为:延时时间=(1+2*m)*机器周期。

m=1~255。

本例:延时时间=(1+2*10)*1us=25uswhile(1);}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Keil仿真及延时语句的精确计算
1、编写程序:
2、点击工程设置对话框,弹出
将晶振的默认值修改为实验板上的晶振频率,eg:11.0592,单击“确定”,完成设置3、单击窗口上的调试按钮,进入软件模拟调试模式。

:将程序复位到主函数的最开始处,准备重新运行程序;
:全速运行,运行程序时中间不停止;
:停止全速运行
:进入子函数内部
:单步执行代码,不进入子函数内部,可直接跳过函数
:跳出当前进入的函数
:程序直接运行至当前光标所在行;
:显示/隐藏编译窗口,可以查看每句C语言编译后对应的汇编代码
:显示/隐藏变量观察窗口,可以查看各个变量值的变化状态
4、查看硬件IO口电平变化:
选择IO口
查看IO状态:
5、查看变量的变化:
十进制显示:
十六进制显示:
十-----十六进制转换:
寄存器窗口:
其中sec 0.00042209=422.09us,程序启动执行到目前停止位置所花的所有时间,(这个时间是累积的)
A:单步执行所花的时间:
423.18-422.09=1.09us,恰好是51单片机在11.0592晶振频率下,一个机器周期(12个时钟周期)所花费的时间
B:延时语句的精确计算
在延时语句的两头设置端点:
点击全速运行,运行到第一个断点处,记录
再点击全速运行,运行到第二个断点处,记录968.31272ms 两个sec之差约为1s。

相关文档
最新文档