【藍橋杯單片機】【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波

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