前提:选用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
谢谢!!! |