stc89c52单片机延时问题

void TempDelay (unsigned char idata us)
{
while(us--);
}
语句 TempDelay(80);为什么延时是530us啊?(12M晶振)怎么算出来的,为什么不是:2+2+1+2*80=165us?

你可以用KEIL看看其汇编就可以理解了:

C:0x09A2 EF MOV A,R7
C:0x09A3 1F DEC R7
C:0x09A4 7001 JNZ C:09A7
C:0x09A6 1E DEC R6
C:0x09A7 14 DEC A
C:0x09A8 4E ORL A,R6
C:0x09A9 70F7 JNZ delay(C:09A2)
C:0x09AB 22 RET
明白了吧,C处理程序与你用汇编编的差别很大的,呵呵呵,算一下就知道了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-06
向推荐一个软件:
单片机小精灵
这个可以快速的写好各个模块程序的汇编和c代码。
可以快速的配置中断等;
很好用。
第2个回答  2013-03-05
可以用keil软件模拟运行查看运行时间追问

我试了,但是单步执行的时候,黄色箭头总是指向START……ASI,ceshi.c中没有黄色箭头,怎么回事啊

追答

可以在延时语句前一句和后一句加入断点

追问

那个断点设置,算时间的时候,黄色箭头所指的语句执行了没有,是执行之前还是之后啊?

追答

黄色箭头代表即将执行的语句

相似回答