51单片机1ms延时程序
时间: 2023-09-09 18:10:11 浏览: 361
以下是基于STC89C52单片机的1ms延时程序:
```
#include<reg52.h>
void delay_ms(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<125;j++)
{
// 使用定时器产生1ms延时
TMOD=0x01; //设置定时器0为模式1
TH0=0xFC; //给定时器赋初值,定时1ms
TL0=0x66;
TR0=1; //启动定时器
while(TF0==0); //等待定时器溢出
TR0=0; //关闭定时器
TF0=0; //清除计时标志
}
}
}
void main()
{
// 在此处调用delay_ms()函数即可
}
```
该程序使用定时器产生1ms延时,每个延时周期为125个机器周期(因为单片机的晶振频率为12MHz,每个机器周期为1/12MHz=0.083us,125个机器周期为1ms),在延时期间单片机无法执行其他任务。可以通过调节循环次数n来实现不同的延时时间。
相关问题
请写一段51单片机100MS延时程序,用汇编语言
以下是51单片机100MS延时程序的汇编代码:
```
DELAY_100MS:
MOV R2, #0BCH ; 设置计数器初值为188
MOV R1, #0FFH ; 设置内部计时器初值为255
LOOP1:
MOV R0, #0FFH ; 设置内部计时器初值为255
LOOP2:
DJNZ R0, LOOP2 ; 内部计时器减一,直到为0
DJNZ R1, LOOP1 ; 外部计时器减一,直到为0
DJNZ R2, DELAY_100MS ; 计数器减一,直到为0
RET
```
这段程序的原理是利用了51单片机的定时器,通过不断减小计数器的值来实现延时。在这里,我们设置了一个计数器初值为188,内部计时器初值为255,这样就可以大概实现100ms的延时。
51单片机1ms延时函数
根据提供的引用内容,可以得知51单片机的1ms延时函数有两种实现方式,分别是用于产生较长延时的`Delay1ms(unsigned int i)`函数和用于产生短暂延时的`delayms(unsigned char x)`函数。
以下是两种函数的实现方法:
1. `Delay1ms(unsigned int i)`函数
```c
void Delay1ms(unsigned int i)
{
unsigned char j, k;
while (i--)
{
for (j = 0; j < 4; j++)
{
for (k = 0; k < 113; k++);
}
}
}
```
2. `delayms(unsigned char x)`函数
```c
void delayms(unsigned char x)
{
unsigned char i, j;
while (x--)
{
for (i = 0; i < 13; i++)
{
for (j = 0; j < 200; j++);
}
}
}
```
阅读全文