51单片机1ms延时函数
时间: 2023-12-06 21:38:06 浏览: 515
根据提供的引用内容,可以得知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++);
}
}
}
```
相关问题
编写一段51单片机1ms延时函数
在51单片机中编写一个简单的1ms延时函数通常会利用定时器T0的功能。这里提供一种常见的C语言实现方法,使用中断延迟法:
```c
#include <reg52.h> // 包含51单片机的标准头文件
// 定义一个标志位用于计数
unsigned char flag = 0;
void delay_ms(unsigned int ms)
{
unsigned long i; // 使用长整型防止溢出
TCON = 0x01; // 启动定时器T0,工作模式2(13MHz晶振下,16位计数)
for (i = ms * 16 + 1; i > 0; i--)
if (flag == 0) { // 当计数满时,将flag置1,然后清零
TMOD &= ~0x01; // 关闭定时器
TH0 = 0xFD; // 设置初始值,大约等于1ms的延时期间
TL0 = 0xFC;
flag = 1;
}
}
// 如果需要在程序中调用1ms延时
void call_1ms()
{
flag = 0; // 确保当前不是延时过程中
delay_ms(1);
}
51单片机255ms延时函数
51单片机中通常没有内置的255毫秒直接延时函数,因为其内部时钟频率较低,如8MHz,所以我们需要通过定时器来间接实现延时。一种常用的做法是利用Timer0的中断功能,设置好定时器预设值和溢出标志位,当定时器计数到预定值时,触发中断并清除溢出标志,然后退出延时。
下面是一个简单的例子,假设我们使用的是C语言,并且已经初始化了Timer0为模式1(8位自动重装载模式):
```c
#include <reg52.h>
void delay_ms(unsigned int ms) {
unsigned int count = ms * 8; // 一个机器周期大约等于1μs,255ms约等于255000个机器周期
TMOD = 0x01; // 设置Timer0为模式1
TH0 = count >> 8; // 高8位放入TH0寄存器
TL0 = count & 0xFF; // 低8位放入TL0寄存器
ET0 = 1; // 开启外部中断0
EA = 1; // 全局中断使能
TR0 = 1; // 启动Timer0
while((TF0 == 0) && !TF1); // 等待Timer0溢出,同时检查是否有其他中断发生
TF0 = 0; // 清除溢出标志
}
阅读全文