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

如题所述

延时有很多种方法,有一种是让单片机去做无聊的循环,
还有一种是用定时器。
我本身也是菜鸟所以只能粗略的讲一下。
第一种的算法是
晶振的周期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调用就延时了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-11-24
选取时钟源计算时钟周期,然后用定时器来自动从装方式等通过计算一次溢出是多少时钟周期死算出多少时间溢出一次,然后根据你需要的时间延时算出需要多少次循环溢出,具体操作自己去看相关寄存器等。最好找个例子,例子很多的
第2个回答  2010-11-24
您好:
void delay()
{
uchar i,j;
for(i=0;i<5;i++)
for(j=0;j<114;j++);
}
第3个回答  2012-03-23
DEL MOV R5#50
AA; MOV R6#20
BB; MOV R7#248
DJNZ R7$
DJNZ R6 D2
DJNZ R5 D2

...能有详细解释的。因为我还不知道这个延时的时间是怎么算
晶振的周期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...

已知单片机系统晶振频率为6mhz,若要求定时值为10ms时,定时器T0工作方...
单片机系统晶振频率为6mhz,系统时钟频率 (也是计时脉冲频率)为500KHZ,一个脉冲周期2us ,10ms是5000个脉冲,因此 TMOD=0X01;TH0=(65536-5000)\/256;TL0=(65536-5000)%256;

单片机51软件延时1s 晶振6M的编程
DJNZ R1,DEL1 RET 没有做具体计算,要准确的定时1s的话可以稍微改动一下R1R2R3的值。6M晶振则机器周期为2us,一条指令执行为2个机器周期,由此得出其延时时间 最好的方式是使用定时器中断来做延时,更精确

51单片机求10微秒的延时函数 C语言(晶振11.0592MHz)
1、下面几个是单片机的延时程序(包括asm和C程序,都是我在学单片机的过程中用到的),在单片机延时程序中应考虑所使用的晶振的频率,在51系列的单片机中我们常用的是11.0592MHz和12.0000MHz的晶振,而在AVR单片机上常用的有8.000MHz和4.000MH的晶振所以在网上查找程序时如果涉及到精确延时则应该注意晶振...

单片机的系统晶振频率6MHz,,要求定时值为10ms,定时器T0工作在方式1时...
定时值为10ms时,定时器T0工作在方式1时,定时器T0对应的初值是1388H TMOD的值是00000001B,TH0=13H;TL0=88H。晶振频率为6M,则机器周期为2us,定时10ms,溢出值为5000,TMOD可以设置为方式0或者1,一般设置为1,初始设置如下:TMOD=0x01 TH0=(65536-5000)\/256 TL0=(65536-5000)%256 ...

51单片机中的汇编代码延时有点搞不清楚,请详细解释下子这个延时子程序...
程序在执行指令的时候是要占用时间的,DJNZ为双字节指令,晶振为12MHZ的单片机执行这一条指令为24个震荡周期,也就是2微秒,通过不断让它循环来达到延时的目的。

单片机中断里的程序可以有个10ms的延时么
可以作定时器中断方式延时10ms , 举例说明如下:51系统单片机晶振频率12MHz,机器周期T =12\/Fosc =12\/(12x10^6Hz) = 1μs 计数值 =10ms\/1μs =10000,使用T1定时\/计数器,工作方式1,是16位计数器 计数初值 =2^16 -10000 =65536-10000 =55536 =D8F0h, h是十六进制数后缀 初始化程序如下...

求一个10ms的单片机C语言延时程序《p1按键按下p1-1灯亮延时10秒p1-1灭...
10ms 用晶振频率换算一下10ms的延时 用定时器 65536减一下 就可以设计10秒的 循环次数 然后将p1键连一个单片机I\/0口 设置 此口有按下信号 便做让 p1-1端口 所连另一个I\/0口亮灯10s的流程 便可以 实现

请问51单片机定时器延时的调用是怎么调用的我有点不明白,谢谢
1 使用定时器\/计数器实现精确延时 单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分 别为1 μs和2 μs,便于精确延时。本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达216=65 536 μs。若定时器工作在方式2,则...

单片机晶振为6MHz,编写100ms延时程序
51单片机在使用6MHz晶振时 1个机器周期=12\/6MHz=2us 可以编写100ms延时子程序 调用子程序YS100MS 就可以延时100ms YS100MS: MOV R7,#100 L1: MOV R6,#250 DJNZ R6,$;DJNZ R7, L1 RET 延时时间=(R6*2*2us)×R7=(250*2*2us)×100=100000us=100ms 呵呵 满意 就...

相似回答
大家正在搜