延时问题

[复制链接]
2664|5
 楼主| beyondhero2008 发表于 2011-11-14 16:21 | 显示全部楼层 |阅读模式
新手求各位大侠帮忙解释一下这个延时程序,还有K=248是怎么得来的
在这谢谢各位大侠

void delay02s(void ) //延时0.2秒子程序
{
unsigned char i,j,k;
for(i=20;i>0;i--)
for(j=20;j>0;j--);
for(k=248;k>0;k--);
}
ayb_ice 发表于 2011-11-14 16:35 | 显示全部楼层
调试出来的
 楼主| beyondhero2008 发表于 2011-11-15 08:20 | 显示全部楼层
谢谢啊,但是不太明白啊
yewuyi 发表于 2011-11-15 08:24 | 显示全部楼层
看反汇编代码计算一共要执行多少调指令,然后算出一个周期内的总指令周期,用0.2秒除就可以了。
killvx 发表于 2011-11-15 09:08 | 显示全部楼层
反汇编代码
C:01BC    MOV R7,#0x14      
C:01BE    MOV R6,#0x14
C:01C0    DJNZ R6,C:01C0
C:01C2    DJNZ R7,C:01BE
C:01C4    MOV  R7,#0xF8
C:01C6    DJNZ R7,C:01C6

MOV 单周期指令
DJNZ 双周期指令
如果单片机机器周期1us
则延时时间计算:
J次循环时间:
  R6*2 = 20*2us = 40 us
i次循环时间:
  (R6*2 + R6赋值 + 2 )*R7  =  (40 + 1 + 2 )*20 =  860
K次循环时间:
  R7*2 + R7赋值= 248*2us + 1us = 497us
总循环时间K次 + J + I +R7赋值 +程序返回 = 497 +40 +860 + 1 + 2 = 1400us
楼主可以看下汇编指令计算一下  对不对
 楼主| beyondhero2008 发表于 2011-11-15 09:53 | 显示全部楼层
谢谢各位大侠
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

19

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部