【蓝桥杯单片机】【51拓展】PCA寄存器配置实现硬件输出PWM

目录

定时器配置及PCA相关寄存器配置源代码: 

代码解析:

效果图:


STC15F2K60S2(IAP15也可以)中PWM产生的原理图(PWM产生功能是集成在PCA功能模块中的): 

产生PWM是使用计数-->比较-->输出的模式 

定时器配置及PCA相关寄存器配置源代码: 

void Timer0_init(void)//1us作为PCA计数器的计数单位
{
	AUXR |= 0x80;		//定时器时钟1T模式
	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x02;		//设置定时器模式
	TL0 = 0xF5;		//设置定时初值
	TH0 = 0xF5;		//设置定时重载值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
}

void PWM_EN()
{
	CCAP0L = 0x80;//PCA0比较寄存器,使占空比达到1:1
	CCAP1L = 0x80;//PCA1比较寄存器
	CCAP0H = 0x80;//设定PCA0比较寄存器重载值后八位
	CCAP1H = 0x80;//设定PCA1比较寄存器重载值后八位
	CL = 0;//PCA计数器清零
	CH = 0;//PCA计数器清零
	
	CMOD = 0x84;  // 空闲模式下PCA计数器停止工作;定时器0溢出做PCA模块的时钟源 
	CCON= 0x00;
	CCAPM0 = 0x42;//使能PWM0和比较器
	CCAPM1 = 0x42;//使能PWM1和比较器
	PCA_PWM0 = 0x00;//PCA0八位PWM模式,EPC0L(和比较寄存器组成9位数字)置零
	PCA_PWM1 = 0x00;//PCA1八位PWM模式
	CCON= 0x40;//使能PAC计数器
}

 上面代码实现的是CCP0和CCP1管脚输出占空比位为1:1的PWM波:

代码解析:

 

这里的时钟源采用的是定时器0产生的脉冲,并且不启用PCA计数器的中断

可通过字节操作使能计数器

在这里使能比较器和脉冲宽度调制功能

 

计数器和比较器的寄存器

 

 

效果图:

 频率为3.9332KHZ,这个频率和输入的时钟源的频率有关。

 也就是计数器溢出一次产生一个周期的PWM波

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章