单片机C语言。while(i--)的 执行时间
请问语句while(i--);执行一次循环要多少时间?单片机晶振12MHz注意while后不执行任何语句。我只是想利用while(i--)设计一个精确的延时语句。...
请问语句while(i--);执行一次循环要多少时间?单片机晶振12MHz
注意while后不执行任何语句。我只是想利用while(i--)设计一个精确的延时语句。 展开
注意while后不执行任何语句。我只是想利用while(i--)设计一个精确的延时语句。 展开
展开全部
与i的数据类型有关。
int型2字节
9: while(i--);
C:0x000F EF MOV A,R7 1个指令周期
C:0x0010 1F DEC R7 1个指令周期
C:0x0011 8E83 MOV DPH(0x83),R6 2个指令周期
C:0x0013 7001 JNZ C:0016 2个指令周期
C:0x0015 1E DEC R6 1个指令周期
C:0x0016 4583 ORL A,DPH(0x83) 1个指令周期
C:0x0018 70F5 JNZ C:000F 2个指令周期
9*(r7+1)+(256*9+1)*r6+1个指令周期
char型1字节
12: while(a--);
C:0x0027 AF05 MOV R7,0x05 2个指令周期
C:0x0029 1D DEC R5 1个指令周期
C:0x002A EF MOV A,R7 1个指令周期
C:0x002B 70FA JNZ C:0027 2个指令周期
6*(r5+1)个指令周期
此应用每个指令周期1us。(1e-6s)
已上是keil C 4的编译器的结果。
int型2字节
9: while(i--);
C:0x000F EF MOV A,R7 1个指令周期
C:0x0010 1F DEC R7 1个指令周期
C:0x0011 8E83 MOV DPH(0x83),R6 2个指令周期
C:0x0013 7001 JNZ C:0016 2个指令周期
C:0x0015 1E DEC R6 1个指令周期
C:0x0016 4583 ORL A,DPH(0x83) 1个指令周期
C:0x0018 70F5 JNZ C:000F 2个指令周期
9*(r7+1)+(256*9+1)*r6+1个指令周期
char型1字节
12: while(a--);
C:0x0027 AF05 MOV R7,0x05 2个指令周期
C:0x0029 1D DEC R5 1个指令周期
C:0x002A EF MOV A,R7 1个指令周期
C:0x002B 70FA JNZ C:0027 2个指令周期
6*(r5+1)个指令周期
此应用每个指令周期1us。(1e-6s)
已上是keil C 4的编译器的结果。
追问
哥哥,我看不太懂r5,r7是什么意思,但感觉您说的比较有道理。
您能否直接告诉我:
假如i是char型,执行一次while(i--)要多少个机器周期?
如果是int型呢?
多谢!
追答
r5,r7是寄存器明,51一共有4组寄存器,每组8个,R0~7.
6*(i+1)个机器周期.
展开全部
大约是1us,不过用while设计的不准,你可以用定时器中断函数
比如
void timer0() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
}
比如
void timer0() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果是12m的晶振执行一次上述指令大约需要多长时间?把上述指令改为:
for(i=1;i>o;i--);
for(i=1;i>o;i--);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这要看编译器具体生成的汇编代码
一般是MOV R7,i ;i为具体是数值,执行该句用时1us
DJNZ R7,$ ;该语句用时2us 总延时t=2*i +1
一般是MOV R7,i ;i为具体是数值,执行该句用时1us
DJNZ R7,$ ;该语句用时2us 总延时t=2*i +1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
什么单片机??
看汇编代码,然后查看单片机资料,看看指令执行的周期,知道总线频率就可以计算时间了
看汇编代码,然后查看单片机资料,看看指令执行的周期,知道总线频率就可以计算时间了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询