用51单片机定时器实现延时1ms函数
时间: 2023-05-16 11:04:48 浏览: 320
可以使用以下代码实现:
void delay_ms(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<110;j++);
}
其中,n表示需要延时的毫秒数,i和j是循环计数器,通过嵌套循环实现延时。
相关问题
C51单片机定时器1延时程序
C51单片机定时器1延时程序的实现步骤如下:
1. 设置定时器1的计数初值,使其开始计数。
2. 等待定时器1计数到指定的值,即延时时间。
3. 定时器1计数到指定值后,清零计数器,并结束延时程序。
下面是一个简单的C51单片机定时器1延时程序的例子:
```c
#include <reg52.h>
void timer1_delay(unsigned int ms)
{
unsigned int i, j;
TMOD &= 0x0F; // 设置定时器1为16位定时器
TMOD |= 0x10;
TH1 = 0xFC; // 设置定时器1的计数初值,使其开始计数
TL1 = 0x18;
TR1 = 1; // 启动定时器1
for (i = 0; i < ms; i++) // 等待定时器1计数到指定的值,即延时时间
{
for (j = 0; j < 125; j++);
}
TR1 = 0; // 停止定时器1
}
void main()
{
while (1)
{
P1 = 0xFF; // 点亮LED
timer1_delay(1000); // 延时1秒
P1 = 0x00; // 熄灭LED
timer1_delay(1000); // 延时1秒
}
}
```
在上面的例子中,我们使用定时器1来控制LED的闪烁,每隔1秒交替点亮和熄灭LED。其中,timer1_delay()函数用来实现延时功能,参数ms表示要延时的时间,单位为毫秒。在函数内部,我们使用了一个简单的for循环来等待定时器1计数到指定的值,即延时时间。
需要注意的是,定时器的计数值需要根据系统时钟频率和所需的延时时间来计算。在上面的例子中,我们使用了11.0592MHz的晶振,并将定时器1的计数初值设置为0xFC18,这样定时器1每计数65536次(0xFFFF+1),就会产生一个1秒的中断。因此,我们在for循环中等待的时间是125次,即125ms。
51单片机定时器延时750ms
根据引用[1]中的代码,可以使用以下函数来实现51单片机定时器延时功能:
```c
void delay_ms(uint16_t t) {
uint16_t count = 0;
TMOD |= 0x01;
TH0 = 0xFC;
TL0 = 0x66;
TR0 = 1;
while (1) {
if (TF0 == 1) {
count++;
TF0 = 0;
TH0 = 0xFC;
TL0 = 0x66;
}
if (count >= t) {
break;
}
}
}
```
根据引用[3]中的代码,可以使用以下代码来实现延时750ms:
```c
#include <REGX51.H>
void main() {
unsigned int a = 0;
unsigned code led[] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f}; // 低电平发光
TMOD &= 0xf0;
TMOD |= 0x01; // 定时器配置
TL0 = 0x18;
TH0 = 0XFC; // 初值1ms
TR0 = 1;
P1 = led[0];
while (1) {
static unsigned int T0count;
if (TF0 == 1) // 中断溢出
{
TF0 = 0;
TL0 = 0x18;
TH0 = 0xfc;
T0count++;
if (T0count >= 750) {
T0count = 0;
a++;
if (a >= 8)
a = 0;
P1 = led[a];
break;
}
}
}
}
```
这段代码会在P1口上循环显示led数组中的元素,每个元素显示750ms。