关于51单片机延时一毫秒的程序设计问题。

[复制链接]
 楼主| neillan 发表于 2009-11-2 09:44 | 显示全部楼层 |阅读模式
刚从模拟电路的工作转换到数字电路,我这个菜鸟对单片机一点也不了解那位大侠能帮我解释一下我对这段代码的理解误区//后面为我的疑问。
为了延时1ms所写的延时子程序 (晶振的频率为12M)C语言版,
void delayms(uint ms)
{

uchar i;


while(ms--)


{


for(i=0;i<120;i++);  // 机器周期为1us 为什么循环120次,就能延长时间1ms呢?


}

}

汇编编版程序
//MOV R5,#50 ;延时子程序
D1: MOV R6,#40
D2:MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
END
lyjian 发表于 2009-11-2 12:25 | 显示全部楼层
for(i=0;i<120;i++);  
这可不是光执行一条指令,怎么可能是1us
 楼主| neillan 发表于 2009-11-2 13:59 | 显示全部楼层
呵呵,谢谢楼上。
ppsen 发表于 2009-11-2 22:23 | 显示全部楼层
最好用定时器
xcs_1211 发表于 2009-11-3 10:05 | 显示全部楼层
YS10:
MOV TMOD,#01H ;
MOV TH0,#0FCH ;1m延时初值置入
MOV TL0,#18H
SETB TR0 ;
JNB TF0,$ ;
CLR TF0 ;
CLR TR0 ;
RET ;
zydlyq 发表于 2009-11-3 21:00 | 显示全部楼层
还得执行while(ms--)这条语句,用定时器吧,准确。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

14

帖子

0

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