晶振为12MHz的C51单片机输出两路PWM,用于控制DC-AC半桥逆变电路程序
时间: 2023-05-27 07:07:28 浏览: 106
c51单片机实现PWM
#include <reg51.h>
sbit PWM1 = P1^0; //PWM1输出引脚
sbit PWM2 = P1^1; //PWM2输出引脚
void main()
{
TMOD = 0x01; //定时器0工作在模式1(16位定时器模式)
TH0 = 0xFC; //定时器0初始值,用于产生PWM1的占空比,取值为(0xFFFF-(12MHz/2/50Hz/256))的高8位
TL0 = 0x67; //定时器0初始值,用于产生PWM1的占空比,取值为(0xFFFF-(12MHz/2/50Hz/256))的低8位
TH1 = 0xFC; //定时器1初始值,用于产生PWM2的占空比,取值为(0xFFFF-(12MHz/2/50Hz/256))的高8位
TL1 = 0x67; //定时器1初始值,用于产生PWM2的占空比,取值为(0xFFFF-(12MHz/2/50Hz/256))的低8位
TR0 = 1; //启动定时器0
TR1 = 1; //启动定时器1
while(1)
{
//控制PWM1的占空比
if(P1_0 == 1) //如果P1.0为高电平
{
TH0 = 0x03; //将定时器0的初始值设为(0xFFFF-(12MHz/2/50Hz/256)*0.1)的高8位,即10%的占空比
TL0 = 0xE8; //将定时器0的初始值设为(0xFFFF-(12MHz/2/50Hz/256)*0.1)的低8位
}
else //如果P1.0为低电平
{
TH0 = 0xFC; //将定时器0的初始值设为(0xFFFF-(12MHz/2/50Hz/256))的高8位,即50%的占空比
TL0 = 0x67; //将定时器0的初始值设为(0xFFFF-(12MHz/2/50Hz/256))的低8位
}
//控制PWM2的占空比
if(P1_1 == 1) //如果P1.1为高电平
{
TH1 = 0x03; //将定时器1的初始值设为(0xFFFF-(12MHz/2/50Hz/256)*0.1)的高8位,即10%的占空比
TL1 = 0xE8; //将定时器1的初始值设为(0xFFFF-(12MHz/2/50Hz/256)*0.1)的低8位
}
else //如果P1.1为低电平
{
TH1 = 0xFC; //将定时器1的初始值设为(0xFFFF-(12MHz/2/50Hz/256))的高8位,即50%的占空比
TL1 = 0x67; //将定时器1的初始值设为(0xFFFF-(12MHz/2/50Hz/256))的低8位
}
}
}
阅读全文