我的C51延时程序

这篇博客介绍了基础的C51延时程序,这些程序经过严谨计算以确保精度,适用于日常应用中的各种延时需求,通过调用基础延时函数,能够实现微小误差的延时效果。
摘要由CSDN通过智能技术生成

基础延时程序经过了严格计算得出的,保证精准。

#include <intrins.h>

/********************************
*            基础延时           *
********************************/

//适用于12MHz晶振,如果不需要请注释掉
void delay1s(void)   //延时1秒 误差 0us
{
    unsigned char a,b,c;
    for(c=46;c>0;c--)
        for(b=152;b>0;b--)
            for(a=70;a>0;a--);
    _nop_();  //if Keil,require use intrins.h
}
void delay1ms(void)   //延时1毫秒 误差 0us
{
    unsigned char a,b;
    for(b=199;b>0;b--)
        for(a=1;a>0;a--);
}

//适用于11.0592MHZ晶振,如果不需要请注释掉
void delay1s(void)   //误差 -0.00000000024us

{
    unsigned char a,b,c;
    for(c=95;c>0;c--)
        for(b=26;b>0;b--)
            for(a=185;a>0;a--);
}
void delay1ms(void)   //误差 -0.651041666667us
{
    unsigned char a,b;
    for(b=4;b>0;b--)
        for(a=113;a>0;a--);
}

 

常用延时才是日常应用的主角,通过调用基础

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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值