STC89C51单片机输出两路频率为30KHz的PWM控制半桥逆变电路的程序
时间: 2023-05-27 13:07:12 浏览: 124
本程序使用STC89C51单片机控制半桥逆变电路,实现输出两路频率为30KHz的PWM信号。其中,P1.0口控制半桥电路的上桥臂,P1.1口控制半桥电路的下桥臂。
程序如下:
```
#include<reg52.h>
sbit P10 = P1^0; //定义P1.0口为控制上桥臂的输出口
sbit P11 = P1^1; //定义P1.1口为控制下桥臂的输出口
void main()
{
TMOD = 0x01; //设置定时器0为模式1
TH0 = 0xFC; //装载计数初值,定时器0的计数器从此值开始计数
TL0 = 0x00;
ET0 = 1; //使能定时器0中断
EA = 1; //使能总中断
TR0 = 1; //启动定时器0
while(1); //进入死循环
}
void Timer0() interrupt 1 //定时器0中断服务函数
{
static unsigned char cnt = 0;
cnt++;
if(cnt <= 25) //占空比为50%
{
P10 = 1; //P1.0输出高电平
P11 = 0; //P1.1输出低电平
}
else //占空比为50%
{
P10 = 0; //P1.0输出低电平
P11 = 1; //P1.1输出高电平
}
if(cnt >= 50) //一个周期结束,重置计数器
{
cnt = 0;
}
}
```
程序中使用定时器0产生中断,实现PWM信号的输出。定时器0的计数初值为0xFC00,即定时器0的计数器开始计数时的初值为252,计数器每次加1,经过12个时钟周期(定时器0的时钟频率为12MHz/12=1MHz),计数器的值加1,当计数器的值大于或等于50时,重置计数器。这样,每个周期的时间为50个定时器时钟周期,即50us,频率为20KHz。在每个周期内,先输出一个占空比为50%的高电平(P1.0输出高电平,P1.1输出低电平),然后输出一个占空比为50%的低电平(P1.0输出低电平,P1.1输出高电平),以此循环,实现PWM信号的输出。
阅读全文