89C51单片机输出两路频率30KHZ的PWM信号控制DC-AC半桥逆变电路的程序
时间: 2023-05-31 19:06:50 浏览: 178
用89C51 做的PWM
5星 · 资源好评率100%
本题要求输出两路频率为30KHZ的PWM信号,控制DC-AC半桥逆变电路。由于89C51单片机只有一个16位定时器,不能直接输出两路PWM信号,因此需要使用定时器中断来实现。
程序如下:
```
#include <reg51.h>
sbit P1_0 = P1^0; //定义P1.0引脚
sbit P1_1 = P1^1; //定义P1.1引脚
void InitTimer() //初始化定时器
{
TMOD = 0x01; //设置定时器0为模式1
TH0 = 0xFC; //设置定时器初值,定时30us
TL0 = 0x18;
ET0 = 1; //使能定时器0中断
TR0 = 1; //启动定时器0
EA = 1; //全局中断使能
}
void Timer0() interrupt 1 //定时器0中断服务程序
{
static unsigned int count1 = 0;
static unsigned int count2 = 0;
count1++;
count2++;
if(count1 >= 500) //500个30us为15ms,频率为30KHZ
{
count1 = 0;
P1_0 = ~P1_0; //翻转P1.0引脚状态,产生PWM信号
}
if(count2 >= 500) //同上
{
count2 = 0;
P1_1 = ~P1_1; //翻转P1.1引脚状态,产生PWM信号
}
}
void main()
{
InitTimer(); //初始化定时器
while(1); //程序死循环
}
```
以上程序中,定时器0被设置为模式1,由于计数器是8位的,所以需要定时器中断服务程序中用计数器(count1和count2)来计数,当计数到500时,即可产生频率为30KHZ的PWM信号。P1.0和P1.1引脚分别连接DC-AC半桥逆变电路的两个驱动管,通过翻转引脚状态来控制驱动管的开关,从而实现电路的正常工作。
阅读全文