用51单片机写1ms延时函数C语言
时间: 2024-05-10 21:17:11 浏览: 158
以下是用51单片机写的1ms延时函数C语言代码:
```
void delay_ms(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<121;j++);
}
```
其中,n为需要延时的毫秒数,具体的延时时间可能会有所偏差,需要根据实际情况进行调整。
相关问题
编写一段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);
}
AT89C51单片机用C语言写1ms基准延时程序
在 AT89C51 单片机上,可以使用定时器来实现基准延时。下面是使用 C 语言编写的 1ms 基准延时程序:
```c
#include <reg51.h>
void delay_ms(unsigned int ms)
{
unsigned int i, j;
while (ms--)
{
for (i = 0; i < 250; i++)
{
for (j = 0; j < 184; j++);
}
}
}
void main()
{
// 设置定时器
TMOD = 0x01; // 定时器0工作在模式1(16位定时器)下
TH0 = 0xFC; // 定时器初值为0xFC67
TL0 = 0x67;
TR0 = 1; // 启动定时器
// 延时1秒
delay_ms(1000);
// 关闭定时器
TR0 = 0;
while (1);
}
```
上面的程序使用了定时器0,将其设置为 16 位模式,并将初值设为 0xFC67,这样定时器每过 1ms 就会溢出一次。然后在 `delay_ms` 函数中,循环等待定时器溢出,等待 `ms` 次后,1ms 的基准延时就完成了。
需要注意的是,在使用定时器的时候,需要根据实际情况调整初值和计数器的值,以达到精确的延时效果。
阅读全文