一个51单片机软件延时问题
12M晶振voiddelayms(unsignedintms){unsignedchari;while(ms--){for(i=0;i<120;i++);}}上面的程序可...
12M晶振
void delayms(unsigned int ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
上面的程序可以延时1ms,为什么?
编译成汇编程序(看图)。怎么加都没有1ms啊……
貌似所有的指令为4周期都不会有1ms啊……
实验结果好像比较接近1ms。真搞不懂…… 循环乘上120也没有那么多啊…… 展开
void delayms(unsigned int ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
上面的程序可以延时1ms,为什么?
编译成汇编程序(看图)。怎么加都没有1ms啊……
貌似所有的指令为4周期都不会有1ms啊……
实验结果好像比较接近1ms。真搞不懂…… 循环乘上120也没有那么多啊…… 展开
4个回答
展开全部
DLE1: MOV R0,#10
DLE2: MOV R1,#100
DJNZ R1,DLE2
DJNZ R0,DLE2
你看这是1ms的汇编程序10x100x1us+4us=1ms
好像你不太懂汇编。不是说语句少就不够1ms因为其中有循环。
DLE2: MOV R1,#100
DJNZ R1,DLE2
DJNZ R0,DLE2
你看这是1ms的汇编程序10x100x1us+4us=1ms
好像你不太懂汇编。不是说语句少就不够1ms因为其中有循环。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
程序看的不是很明白,但是我看到一共循环120次,每次需要8个指令周期,12M晶振的51一个指令周期是1uS 所以实际是120*8*1=960uS,再加上子程序调用的时间占用,大约在1mS的样子。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询