下面這個程序是應用在stc12c2052ad上的pwm程序,測試成功
#include<reg52.h> sfr CCON =0xD8; //PCA control register sfr CMOD =0xD9; sfr CL =0xe9; sfr CH =0xF9; sfr CCAP0L=0xea; sfr CCAP1L=0xeb; sfr CCAP0H=0xfa; sfr CCAP1H=0xfb; sfr CCAPM0=0xda; sfr CCAPM1=0xdb; sbit CR=0xde; //位尋址 void main(void) { CMOD=0x02; //使用系統時鐘,時鐘輸入源頻率fosc/2。PWM頻率=fosc/2/256 /************************************ 7 6 5 4 3 2 1 0 CIDL - - - cps2 CPS1 CPS0 ECF CIDL: =0時,空閑模式下PCA計數器繼續工作;=1時,空閑模式下PCA計數器停止工作。 CPS2,CPS1,CPS0:PCA計數脈沖選擇。010,定時器0的溢出,可以實現可調頻率的PWM輸出。 ECF: =1時,使能寄存器CCON CF位的中斷;=0時,禁止該功能。 ***************************************/ CL=0x00; CH=0x00; CCAP0L=0xc0; //當CL小于CCAP0L時,輸出為低;大于時,輸出為高。 CCAP0H=0x7f; //當CL由ff變為00溢出時,CCAP0H裝載到CCAP0L中,實現無干擾的更新PWM。 CCAP1L=0xc0; //當CL小于CCAP1L時,輸出為低;大于時,輸出為高。 CCAP1H=0xc0; //當CL由ff變為00溢出時,CCAP1H裝載到CCAP1L中,實現無干擾的更新PWM。 CCAPM0=0X42; //使能PWM模式,PWM0=1,ECOM0=1 CCAPM1=0X42; //使能PWM模式,PWM1=1,ECOM1=1 CR=1; //啟動PCA計數器 while(1) { CCAP0H=RF4432_TxRxBuf[4]; //此處改變占空比 CCAP1H=RF4432_TxRxBuf[5]; CCAP2H=RF4432_TxRxBuf[6]/2.5; }; }