我也遇到这个困惑过,推荐你看一篇**
网址是:
http://hi.baidu.com/txz01/blog/item/868ad8d4aeea8309a08bb79c.html
你可能遇到网页上的图片显示不出来,这时你需要登陆百度空间,申请个号码大概要花费1分钟。
**是长了点,希望楼主能耐心看下去...
**的大体意思是说
前提是Keil编译器
就单单是
delay()
{
}
里面是空函数的话,这个需要花费4个时钟周期
下面是该空语句的的汇编
NAME DELAY
?PR?delay?DELAY SEGMENT CODE
PUBLIC delay
RSEG ?PR?delay?DELAY
delay:
RET
END
如果delay()里面加语句的话
例如
#define uchar unsigned char
void delay(void)
{ uchar i;
for(i=100,i>0,i--);
}
其汇编如下
NAME DELAY
?PR?delay?DELAY SEGMENT CODE
PUBLIC delay
RSEG ?PR?delay?DELAY
delay:
mov r7,#100 //1个时钟周期
djnz r7,$ //2*100
RET
END
时间计算如下 4+1+2*100+1 答案需要206个时钟周期
作者的启动TR0中断和关闭TR0中断,这个耗时1个周期,最后一个1就是这个意思
不要管那些名字前加?,这个就是标示,编译器怕重名,就整出这个东西...看的是挺别扭的...
|