打印
[STC单片机]

关于if等指令消耗的时间请教

[复制链接]
2855|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
前提:选用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)是因为操纵系统帮你做了,单片机没有人帮你的,必须要有主循环,不然程序就顺着跑下去了。

使用特权

评论回复
5
airwill| | 2014-12-3 23:20 | 只看该作者
楼主很细心, 支持一下.
你数的指令周期数是没有问题的, 问题在于调速器啊.
软件做的不够准确, 将就着吧.

使用特权

评论回复
6
ayb_ice| | 2014-12-4 08:10 | 只看该作者
不可能,

晶掁设置对了没有

使用特权

评论回复
7
ayb_ice| | 2014-12-4 08:18 | 只看该作者
0.00017520-0.00017480=0.0000004

未命名1.PNG (23.93 KB )

未命名1.PNG

未命名.PNG (23.37 KB )

未命名.PNG

使用特权

评论回复
8
ayb_ice| | 2014-12-4 08:19 | 只看该作者
有个图发错了

未命名.PNG (23.85 KB )

未命名.PNG

使用特权

评论回复
9
慢慢学|  楼主 | 2014-12-4 09:24 | 只看该作者
airwill 发表于 2014-12-3 23:20
楼主很细心, 支持一下.
你数的指令周期数是没有问题的, 问题在于调速器啊.
软件做的不够准确, 将就着吧. ...

你的意思是Keil软件的问题??

使用特权

评论回复
10
慢慢学|  楼主 | 2014-12-4 09:34 | 只看该作者
ayb_ice 发表于 2014-12-4 08:10
不可能,

晶掁设置对了没有

晶振设置的是30MHz的,你选的芯片是不一样的吧!!指令看起来都不一样啊!!

使用特权

评论回复
11
ayb_ice| | 2014-12-4 09:37 | 只看该作者
慢慢学 发表于 2014-12-4 09:34
晶振设置的是30MHz的,你选的芯片是不一样的吧!!指令看起来都不一样啊!! ...

选的AT89C52,频率30M
编译小模式

使用特权

评论回复
12
慢慢学|  楼主 | 2014-12-4 09:40 | 只看该作者
NE5532 发表于 2014-12-3 22:31
单片机的C和TC不一样,TC不用写while(1)是因为操纵系统帮你做了,单片机没有人帮你的,必须要有主循环, ...

谢谢,

使用特权

评论回复
13
ayb_ice| | 2014-12-4 09:41 | 只看该作者
来个大模式的

未命名1.PNG (30.35 KB )

未命名1.PNG

未命名.PNG (31.17 KB )

未命名.PNG

使用特权

评论回复
14
ayb_ice| | 2014-12-4 09:44 | 只看该作者
0.00018560-0.00018280=0.0000028

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

使用特权

评论回复
15
慢慢学|  楼主 | 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

粉丝