#include<reg52.h>
sfr CCON = 0xD8;
sfr CMOD = 0xD9;
sfr CL = 0xE9;
sfr CH = 0xF9;
sfr CCAP0L = 0xEA;
sfr CCAP0H = 0xFA;
sfr CCAPM0 = 0xDA;
sfr CCAP1L = 0xEB;
sfr CCAP1H = 0xFB;
sfr CCAPM1 = 0xDB;
sbit CR = 0xDE;
sbit p21=P2^1;
sbit p20=P2^0;
sbit CF=CCON^7;
sbit CCF1=CCON^1;
sbit CCF0=CCON^0;
typedef unsigned int WORD;
/*********************************************************************************************
函数名:PWM初始化函数
调 用:PWM_init();
参 数:无
返回值:无
结 果:将PCA初始化为PWM模式,初始占空比为0
备 注:需要更多路PWM输出直接插入CCAPnH和CCAPnL即可
/**********************************************************************************************/
void PWM_init (void){
CMOD=0x02; //设置PCA定时器
CL=0x00;
CH=0x00;
CCAPM1=0x42; //PWM1设置PCA工作方式为PWM方式(使用时删除//)
CCAP1L=0x00; //设置PWM1初始值与CCAP0H相同
CCAP1H=0x00; // PWM1初始时为0
CR=1; //启动PCA定时器
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:PWM1占空比设置函数
调 用:PWM1_set();
参 数:0x00~0xFF(亦可用0~255)
返回值:无
结 果:设置PWM模式占空比,为0时全部高电平,为1时全部低电平
备 注:如果需要PWM1的设置函数,只要把CCAP0L和CCAP0H中的0改为1即可
/**********************************************************************************************/
void PWM1_set (unsigned char a){
CCAP1L= a; //设置值直接写入CCAP0L
CCAP1H= a; //设置值直接写入CCAP0H
}
void main(void)
{
PWM_init();
PWM1_set(155);
while(1);
}
使用上面的程序,控制输出PWM信号,发现MOS管只出现“全开”和“全闭”,没有出现“半闭”状态,是不是我的频率太高呢?求组了,使用芯片是STC12C5204AD |