1使用定时器T0采用方式2定时在P10引脚输出周期为400μs占空比为4:1的矩形脉冲要求在P10引脚接有虚拟示波器观察P10引脚输出的矩形脉冲波形。以下是代码实现:c#include reg52hsbit LED = P1^0;unsigned int count = 0;void main TMOD = 0x01; 定时器T0方式2 TH0 = 0xFC; 计数初值为65536
,而非方式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 著作权归作者所有。请勿转载和采集!