① 怎样用单片机精确延时500ms以上
几个精确延时程序:在精确延时的计算当中,最容易让人忽略的是计算循环外的那部分延时,在对时间要求不高的场合,这部分对程序不会造成影响。
500ms延时子程序程序:(晶振12MHz,一个机器周期1us。)
void delay500ms(void)
{
unsigned char i,j,k;
for(i=15;i>0;i--)
for(j=202;j>0;j--)
for(k=81;k>0;k--);
}
(1)单片机如何程序延时扩展阅读
实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。
在电子技术中,脉冲信号是一个按一定电压幅度,一定时间间隔连续发出的脉冲信号。脉冲信号之间的时间间隔称为周期;而将在单位时间(如1秒)内所产生的脉冲个数称为频率。
频率是描述周期性循环信号(包括脉冲信号)在单位时间内所出现的脉冲数量多少的计量名称;频率的标准计量单位是Hz(赫)。电脑中的系统时钟就是一个典型的频率相当精确和稳定的脉冲信号发生器。
51单片机的指令有单字节、双字节和三字节的,它们的指令周期不尽相同,一个单周期指令包含一个机器周期,即12个时钟周期,所以一条单周期指令被执行所占时间为12*(1/ 晶振频率)= x μs。常用单片机的晶振为11.0592MHz,12MHz,24MHz。
其中11.0592MHz的晶振更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。
② 用单片机8051如何做一个定时器的一秒延时
使用单片机8051实现一秒延时的基本思路是通过循环等待定时器的中断,或者通过软件方式循环等待一定次数。这里提供一个简单的软件延时方法。
首先,我们需要在程序中定义两个存放延时期数的寄存器,这里用30H和31H来表示。具体数值需要根据晶振频率来确定。
接下来是延时程序的实现:
MOV 30H,#一个数
MOV 31H,#一个数
LOOP:DJNZ 30H,LOOP1
LOOP1:DJNZ 31H,LOOP
这段代码的意思是先将一个延时期数写入30H,再将另一个延时期数写入31H。然后进入一个循环,先检查30H中的数值是否为0,如果不为0则继续循环,直到30H中的数值为0,跳转到LOOP1标签处。在LOOP1标签处,再次检查31H中的数值是否为0,如果不为0则继续循环,直到31H中的数值为0,再返回到LOOP标签处继续循环。
这样的设计思路是基于8051单片机的内部定时器工作原理,通过软件循环等待的方式实现延时。
需要注意的是,具体延时期数的数值需要根据实际使用的晶振频率来计算,通常晶振频率为12MHz或6MHz时,可以利用8051的机器周期来计算延时期数。例如,对于12MHz的晶振,每个机器周期为1/12us,那么要实现一秒延时,就需要等待1000000个机器周期。
具体计算方法可以参考8051单片机的数据手册,或者使用在线的单片机延时计算工具进行计算。
总之,通过上述代码实现的延时方法虽然简单,但适用于8051单片机的基本开发和实验。对于更复杂的应用场景,可能需要考虑使用硬件定时器或更精确的延时算法。