89C51单片机输出占空比50,频率30KHz的PWM程序
时间: 2023-05-31 21:06:19 浏览: 112
PWM.zip_C51 PWM 频率_pwm频率可调_单片机产生pwm_可调pwm_频率占空比
5星 · 资源好评率100%
以下是基于Keil C51编译器的89C51单片机输出占空比50%、频率30KHz的PWM程序:
```c
#include <reg51.h>
sbit PWM = P1^0; // PWM输出引脚
void main()
{
TMOD = 0x01; // 定时器0工作在模式1:16位定时器模式
TH0 = 0xFC; // 定时器0的高8位赋初值
TL0 = 0x66; // 定时器0的低8位赋初值
TR0 = 1; // 启动定时器0
ET0 = 1; // 允许定时器0中断
EA = 1; // 开启总中断允许
while(1); // 程序进入死循环
}
void InterruptTimer0() interrupt 1
{
static unsigned int count = 0; // 静态变量,用于计数器
if(count < 1500) // 1500是30KHz时钟下,占空比50%的计数值
{
PWM = 1; // PWM输出为高电平
}
else
{
PWM = 0; // PWM输出为低电平
}
count++; // 计数器自增
if(count == 3000) // 3000是30KHz时钟下的周期计数值
{
count = 0; // 计数器清零
}
}
```
该程序使用定时器0产生30KHz时钟,然后在定时器0中断服务函数中根据占空比控制PWM输出引脚的电平状态,从而实现占空比为50%、频率为30KHz的PWM输出。需要注意的是,由于定时器0是16位定时器,所以计数器需要使用unsigned int类型。
阅读全文