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

[复制链接]
查看11 | 回复4 | 2010-11-24 19:36:25 | 显示全部楼层 |阅读模式
延时有很多种方法,有一种是让单片机去做无聊的循环,还有一种是用定时器。我本身也是菜鸟所以只能粗略的讲一下。第一种的算法是晶振的周期T1=1/f; 这里f=6MHz 所以T1=1/6 us;(微秒)单片机花12个T1去执行一个指令,所以一个机器周期等于12个晶振周期,T2=12*T1=2us10ms=1000 0us所以你要得到10ms的延时就要想办法让机器去做5000条“无聊的指令”所以DEL: MOV R5,#05HF1: MOV R6,#05HF2: MOV R7,#32HF3: DJNZ R7,F3
DJNZ R6,F2
DJNZ R5,F1RET这种方法
回复

使用道具 举报

千问 | 2010-11-24 19:36:25 | 显示全部楼层
选取时钟源计算时钟周期,然后用定时器来自动从装方式等通过计算一次溢出是多少时钟周期死算出多少时间溢出一次,然后根据你需要的时间延时算出需要多少次循环溢出,具体操作自己去看相关寄存器等。最好找个例子,例子很多的
回复

使用道具 举报

千问 | 2010-11-24 19:36:25 | 显示全部楼层
您好:void delay(){
uchar i,j;
for(i=0;i<5;i++)
for(j=0;j<114;j++);}
回复

使用道具 举报

千问 | 2010-11-24 19:36:25 | 显示全部楼层
DELMOV R5#50AA; MOV R6#20BB; MOVR7#248
DJNZ R7$
DJNZ R6 D2
DJNZ R5 D2
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行