,而非方式2。方式1是16位定时器,需要手动设置计数初值和计数器的值,而方式2是自动重装载定时器,只需要设置计数初值即可。因此,以下是使用方式2实现的代码:

#include <reg52.h>

sbit LED = P1^0;

void main(){
    TMOD = 0x02; // 定时器T0,方式2
    TH0 = 0xFC; // 计数初值为65536-4000=61536
    TL0 = 0x00;
    TR0 = 1; // 开始计时
    while(1)
    {
        if(TF0 == 1) // 判断是否溢出
        {
            TF0 = 0; // 清除溢出标志
            LED = ~LED; // 取反LED的状态,实现占空比为4:1的矩形脉冲输出
        }
    }
}

与方式1不同的是,在中断处理函数中不需要设置计数器count,直接取反LED的状态即可。另外,由于使用了自动重装载定时器,因此不需要手动重置计数器的值,定时器会自动重新加载计数初值


原文地址: https://www.cveoy.top/t/topic/dHJM 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录