[STC单片机] 关于if等指令消耗的时间请教

[复制链接]
3231|14
 楼主| 慢慢学 发表于 2014-12-3 21:23 | 显示全部楼层 |阅读模式
前提:选用Keil4软件,AT89C52单片机,30MHz晶振

单指令时间为:0.4us

简单编写了一个程序:
#include"reg52.h"
unsigned char Timer=0;
void main()
{
        Timer++;
        if(Timer==2)
                P1=0XFE;
         if(Timer==3)
                P1=0XFc;

然后用Debug看Timer++和if语句消耗的时间,
Timer++的汇编指令包括:
C:0x008F    900000   MOV      DPTR,#C_STARTUP(0x0000)   //2指令周期
C:0x0092    E0       MOVX     A,@DPTR                    //2指令周期
C:0x0093    04       INC      A                           //1指令周期
C:0x0094    F0       MOVX     @DPTR,A                     //2指令周期
if汇编指令:
C:0x0095    E0       MOVX     A,@DPTR                //2指令周期
C:0x0096    FF       MOV      R7,A                    //1指令周期
C:0x0097    B40203   CJNE     A,#0x02,C:009D           //2指令周期

我计算下来的时间为Timer++:3.2us,if:1.2us
但为什么Debug观察的时候,Timer++执行完后时间增加了280us,if判定完成后时间增加了120us

谢谢!!!
dirtwillfly 发表于 2014-12-3 22:04 | 显示全部楼层
奇怪的代码,竟然不写个循环
 楼主| 慢慢学 发表于 2014-12-3 22:15 | 显示全部楼层
dirtwillfly 发表于 2014-12-3 22:04
奇怪的代码,竟然不写个循环

C语言 while循环不是可以不写吗??

我这个只是简单的看一下,时间而已,!!
NE5532 发表于 2014-12-3 22:31 | 显示全部楼层
慢慢学 发表于 2014-12-3 22:15
C语言 while循环不是可以不写吗??

我这个只是简单的看一下,时间而已,!! ...

单片机的C和TC不一样,TC不用写while(1)是因为操纵系统帮你做了,单片机没有人帮你的,必须要有主循环,不然程序就顺着跑下去了。
airwill 发表于 2014-12-3 23:20 | 显示全部楼层
楼主很细心, 支持一下.
你数的指令周期数是没有问题的, 问题在于调速器啊.
软件做的不够准确, 将就着吧.
ayb_ice 发表于 2014-12-4 08:10 | 显示全部楼层
不可能,

晶掁设置对了没有
ayb_ice 发表于 2014-12-4 08:18 | 显示全部楼层
0.00017520-0.00017480=0.0000004

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
ayb_ice 发表于 2014-12-4 08:19 | 显示全部楼层
有个图发错了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 慢慢学 发表于 2014-12-4 09:24 | 显示全部楼层
airwill 发表于 2014-12-3 23:20
楼主很细心, 支持一下.
你数的指令周期数是没有问题的, 问题在于调速器啊.
软件做的不够准确, 将就着吧. ...

你的意思是Keil软件的问题??
 楼主| 慢慢学 发表于 2014-12-4 09:34 | 显示全部楼层
ayb_ice 发表于 2014-12-4 08:10
不可能,

晶掁设置对了没有

晶振设置的是30MHz的,你选的芯片是不一样的吧!!指令看起来都不一样啊!!
ayb_ice 发表于 2014-12-4 09:37 | 显示全部楼层
慢慢学 发表于 2014-12-4 09:34
晶振设置的是30MHz的,你选的芯片是不一样的吧!!指令看起来都不一样啊!! ...

选的AT89C52,频率30M
编译小模式
 楼主| 慢慢学 发表于 2014-12-4 09:40 | 显示全部楼层
NE5532 发表于 2014-12-3 22:31
单片机的C和TC不一样,TC不用写while(1)是因为操纵系统帮你做了,单片机没有人帮你的,必须要有主循环, ...

谢谢,
ayb_ice 发表于 2014-12-4 09:41 | 显示全部楼层
来个大模式的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
ayb_ice 发表于 2014-12-4 09:44 | 显示全部楼层
0.00018560-0.00018280=0.0000028

也才2.8US嘛,也才几条指令,有不对吗
 楼主| 慢慢学 发表于 2014-12-4 09:53 | 显示全部楼层
ayb_ice 发表于 2014-12-4 09:44
0.00018560-0.00018280=0.0000028

也才2.8US嘛,也才几条指令,有不对吗

对对!!明白了!!

我也是这么算的,我直接用的560-280,然后就直接加了单位us,,

谢谢!辛苦!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:没事就给程序谢谢注释 <img src="static/image/smiley/comcom/28.gif" class="vm ...

18

主题

140

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部