一个单片机晶振为12MHZ,要让单片机延时100ms怎么计算

供稿:hz-xin.com     日期:2025-01-13
一个单片机晶振为12MHZ,要让单片机延时100ms怎么计算

写个
delay函数
能实现软件延时
void
delay(int
ms)
{
int
z,a;
for(z=ms;z>0;z--)
for(a=110;a>0;a--);
}
要延时多长时间
ms
赋值多少就OK了
当然
软件延时只是大概算出来的
不可能非常准确
要是需要很准确用定时器
也很简单
不过一般应用
软件延时就够了

写个 delay函数 能实现软件延时
void delay(int ms)
{
int z,a;
for(z=ms;z>0;z--)
for(a=110;a>0;a--);
}

要延时多长时间 ms 赋值多少就OK了 当然 软件延时只是大概算出来的 不可能非常准确 要是需要很准确用定时器 也很简单 不过一般应用 软件延时就够了

一个机器周期=12时钟周期
不管时钟多少,都按一个机器周期=12时钟周期计算 //**** 关键 ****//
12MHZ时钟换过来就是1M机器周期(1M/S)
1ms就是1000机器周期;
6MHZ时钟换过来就是0.5M机器周期(0.5M/S)
1ms就是500机器周期

8位计数器最高范围是65536,
如果我们要记时1s,可以以10ms为单位,循环记时100次

现在就是初始化,10ms为例
TL0=-10000; //对T0计数初始化赋值,用12M的JT,10ms也就是机器周期计数10000
TH0=-10000>>8;
这就是初始化,一次溢出10ms
(若用6M的JT,10ms也就是机器周期计数5000)
当然这只是其中一部分,具体还有比如TR0(1)的设置
溢出中断允许等!

上面两句等价于
TL0=55536;//(65536-10000)
TH0=55536>>8;
相当于从55536开始数,
数10000次(10ms)后溢出,为一个记数周期
10次后就是100ms
100ms,delay延时程序为:

DELAY: MOV R3,#64H ;延时子程序
DEL2: MOV R4,#07BH
DEL1: NOP
DJNZ R4,DEL1
DJNZ R3,DEL2
RET

f=12MHZ时,一个机器周期为1us
DEL: MOV R7,#X ;1us 1
DEL1: MOV R6,#Y ;1us X
DJNZ R6,$ ;2us X×Y
DJNZ R7,DEL1 ;2us X
RET ;2us
全部指令执行时间为
1+X+2XY +2X+2=3+3X+2XY个机器周期。
对于延时时间为100ms的延时程序,可以选择X=200,Y=250。这样,这个子程序的全部执行时间为(2+3×200+2×200×250)=100.62ms。
当然X、Y值选择恰当,能更好地满足精度要求。

指令周期T=4*时钟周期=4*1/12=1/3us
采用2重循环比较好,以下是程序
DELAY100MS MOVLW D'44'
MOVWF 20H
LOOP1 MOVLW D'251'
MOVWF 21H
LOOP2 DECFSZ 21H,1
GOTO LOOP2
DECFSZ 20H,1
GOTO LOOP1
RETURN

我举得用2的溢出计数计时是比较好的。。

一个51单片机,晶振为12MHz,让前三个LED灯分别以1ms,1s,5s的频率闪烁...
要实现51单片机上的三个LED灯分别以1ms, 1s, 5s的频率闪烁,可以通过定时器来控制。首先,我们设定定时器0为16位定时模式,计时50ms。然后设置一个变量进行定时器中断计数,当计数达到10(即0.5s)时,LED2的状态取反;当计数达到5000(即2.5s)时,LED3的状态取反。这样,LED1将以1ms的频率闪烁...

一个单片机晶振为12MHZ,要让单片机延时100ms怎么计算
6MHZ时钟换过来就是0.5M机器周期(0.5M\/S)1ms就是500机器周期 8位计数器最高范围是65536,如果我们要记时1s,可以以10ms为单位,循环记时100次 现在就是初始化,10ms为例 TL0=-10000; \/\/对T0计数初始化赋值,用12M的JT,10ms也就是机器周期计数10000 TH0=-10000>>8;这就是初始化,一次溢...

一个单片机晶振为12MHZ,要让单片机延时100ms怎么计算
void delay(int ms){ int z,a;for(z=ms;z>0;z--)for(a=110;a>0;a--);} 要延时多长时间 ms 赋值多少就OK了 当然 软件延时只是大概算出来的 不可能非常准确 要是需要很准确用定时器 也很简单 不过一般应用 软件延时就够了

单片机晶振为12MHZ,要让单片机延时100ms怎么计算
晶振为12M,说明一个机器周期为1微秒,100毫秒就是100 000个机器周期。mov r7,#X;3周期 loop:mov r6,#Y;3X周期 djnz r6,$;2XY周期 djnz r7,loop;2X周期 也就是3+5x+2xy=100 000。可取x=194,y=255。此时共延时99 913,即99.913毫秒。

一个单片机晶振为12MHZ,要让单片机延时100ms怎么计算采用汇编语言要具体...
12M,那每个机器周期是1US。程序我写在这里了 这是软延时最精确的程序了,理论上差1US(非常符合要求了)DELAY: MOV R7,#100 DD0: MOV R6,#48 NOP DJNZ R6,DJNZ R7,DD0 RET

已知单片机的晶振频率为12MHz,要求用T1工作方式1完成60ms定时,同时让T0...
void Timer1Init(void)\/\/60毫秒@12.000MHz { AUXR &= 0xBF;\/\/定时器时钟12T模式 TMOD &= 0x0F;\/\/设置定时器模式 TMOD |= 0x10;\/\/设置定时器模式 TL1 = 0xA0;\/\/设置定时初值 TH1 = 0x15;\/\/设置定时初值 TF1 = 0;\/\/清除TF1标志 TR1 = 1;\/\/定时器1开始计时 } ...

设MCS51单片机的晶振频率12MHz,请编程使得P1.0端输出频率为20kHz的方波...
20KHz,周期T=50us,半周期 t=25us;标准51单片机,12MHz晶振,机械周期为 1us,足以满足25us需求。使用定时器定时 25us,每次中断取反输出(P1.0)。小贴士:25us时间短,可以采用定时器的 8位自重装模式,程序就不需要在中断中继续赋初值了。

晶振是12MHZ。要使定时器的时间为5ms,求初始值,TH0,TL0?(要求解题过程...
解:机器周期=12\/f=12\/12MHz=1μs (1)求方式0时的x:(2的13次幂-X)*1μs=500μs 求出X即可。

若51单片机的晶振频率为12MHz,要使定时器TO以方式0工作的定时时间为1m...
如图所示,TH0=0xD1,TL0=0x20。望采纳。。。

单片机晶振为12mhz,要求定时器t1工作方式1,分别实现5ms10ms100ms1s的...
可能你要汇编语言,但你看C语言更简洁明了 TMOD=0X10;TL1=(65535-5000)%256;\/\/5ms的定时,低8位对256求余 TH1=(65535-5000)\/256;\/\/高8位对256求模 10ms时减10000 100ms 1s的定时,没法一次完成,因最大定时值是65.535mS 可通过定时50MS 累计2次和20次实现 ...