晶振12MHz的51单片机输出两路频率为30KHz的单极性PWM用于驱动半桥逆变电路的程序
时间: 2023-05-26 19:07:26 浏览: 148
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit enable=P0^0;
sbit in1=P1^0;
sbit in2=P1^1;
#define T 500 //脉冲信号周期的一半
void main()
{
TMOD=0x01; //定时器0工作在1方式
TH0=(65536-((T*2*12)/1000000))/256;
TL0=(65536-((T*2*12)/1000000))%256;
ET0=1; //开定时器0中断
EA=1; //开总中断
enable=0; //向半桥逆变电路输出低电平
while(1)
{
in1=1; //向半桥逆变电路输出高电平
in2=0; //向半桥逆变电路输出低电平
delay_ms(1000); //等待1s
in1=0; //向半桥逆变电路输出低电平
in2=1; //向半桥逆变电路输出高电平
delay_ms(1000); //等待1s
}
}
void timer0() interrupt 1
{
static uint cnt=0;
cnt++;
if(cnt==50) //当计数到50时(即一个周期结束),重置计数器cnt
{
cnt=0;
}
if(cnt<25) //当cnt<25时,输出高电平;否则输出低电平
{
in1=1;
in2=0;
}
else
{
in1=0;
in2=1;
}
}
void delay_ms(uint ms) //延时函数,延时ms毫秒
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<125;j++);
}
阅读全文