51单片机,晶振为6M请帮忙写一个10ms的延时程序,能有详细解释的。因为我还不知道这个延时的时间是怎么算 5

 我来答
LYQGXH
2010-11-24 · TA获得超过409个赞
知道小有建树答主
回答量:314
采纳率:100%
帮助的人:229万
展开全部
延时有很多种方法,有一种是让单片机去做无聊的循环,
还有一种是用定时器。
我本身也是菜鸟所以只能粗略的讲一下。
第一种的算法是
晶振的周期T1=1/f; 这里f=6MHz 所以T1=1/6 us;(微秒)
单片机花12个T1去执行一个指令,
所以一个机器周期等于12个晶振周期,
T2=12*T1=2us
10ms=1000 0us
所以你要得到10ms的延时就要想办法让机器去做5000条“无聊的指令”
所以
DEL: MOV R5,#05H
F1: MOV R6,#05H
F2: MOV R7,#32H
F3: DJNZ R7,F3
DJNZ R6,F2
DJNZ R5,F1
RET
这种方法是用于对时间要求不高的地方,我说的是其思想,程序中可能有错的地方
用定时器的方法我不太会就不误人了 (补充一下就是这个是用汇编写的,你在主程序中用ACALL DEL调用就延时了。
烟不易冷
2010-11-24 · 超过14用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:0
展开全部
选取时钟源计算时钟周期,然后用定时器来自动从装方式等通过计算一次溢出是多少时钟周期死算出多少时间溢出一次,然后根据你需要的时间延时算出需要多少次循环溢出,具体操作自己去看相关寄存器等。最好找个例子,例子很多的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
HWQ0757
2010-11-24 · TA获得超过639个赞
知道小有建树答主
回答量:310
采纳率:100%
帮助的人:319万
展开全部
您好:
void delay()
{
uchar i,j;
for(i=0;i<5;i++)
for(j=0;j<114;j++);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
谁明浪子心1376
2012-03-23
知道答主
回答量:1
采纳率:0%
帮助的人:1634
展开全部
DEL MOV R5#50
AA; MOV R6#20
BB; MOV R7#248
DJNZ R7$
DJNZ R6 D2
DJNZ R5 D2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式