stc單片機(jī)IO配置與PWM
所有PCA模塊都可用作PWM輸出(上圖)。輸出頻率取決于決于PCA定時器的時鐘源。
由于所有模塊共用僅有的PCA定時器,所有它們的輸出頻率相同。各個模塊的輸出占空
是獨(dú)立變化的,與使用的捕獲寄存器[EPCnL,CCAPnL]有關(guān)。當(dāng)寄存器寄存器CL的值小于[EPCnL,CCAPnL]時,輸出為低;當(dāng)寄存器CL的值等于或大于[EPCnL,CCAPnL]時,輸出為高。當(dāng)CL的值由FF變?yōu)?0溢出時,[EPCnH,CCAPnH]的內(nèi)容裝載到[EPCnL,CCAPnL]中。這樣就可實現(xiàn)無干擾地更新PWM。要使能PWM模式,模塊CCAPMn寄存器的PWMn和ECOMn位必須置位。由于PWM是8位的,所以:PWM的頻率=:PCA時鐘輸入源頻率/256PCA時鐘輸入源可以從以下8種中選擇一種:SYSclk,SYSclk/2,SYSclk/4,SYSclk/6,SYSclk/8,SYSclk/ 2,定時器0的溢出,ECI/P3.4輸入。。
舉例:要求PWM輸出頻率為38KHz,選SYSclk為PCA/PWM時鐘輸入源,求出SYSclk的值
由計算公式38000=SYSclk/256,得到外部時鐘頻率SYSclk=38000 x 256 x=9,728,000
如果要實現(xiàn)可調(diào)頻率的PWM輸出,可選擇定時器0的溢出率或者ECI腳的輸入作為PCA/PWM的時鐘輸入源
當(dāng)EPCnL = 0及CCAPnL=0x00H時,PWM固定輸出高
當(dāng)EPCnL = 1及CCAPnL=0xFFH時,PWM固定輸出低
例:
#definePCA_IDLE_DISABLE0//1:MCU在IDLE模式時禁止PCA工作。0:MCU在IDLE模式時允許PCA工作。
#definePCA_SOURCE_SELECT1//選擇PCA的基準(zhǔn)時鐘源。
//0:系統(tǒng)時鐘Fosc/12。
//1:系統(tǒng)時鐘Fosc/2。
//2:定時器0的溢出。
//3:ECI/P3.4腳的外部時鐘輸入(最大=Fosc/2)。
//4:系統(tǒng)時鐘Fosc。
//5:系統(tǒng)時鐘Fosc/4。
//6:系統(tǒng)時鐘Fosc/6。
//7:系統(tǒng)時鐘Fosc/8。
voiden_PCA(void)
{
CMOD= (PCA_IDLE_DISABLE << 7) | (PCA_SOURCE_SELECT << 1);//初始化PCA模式寄存器。
CL= 0x00;//清除PCA計數(shù)機(jī)
CH= 0x00;
CR= 1;//啟動PCA計數(shù)機(jī) CL 00->FF
}
void initPWM()
{
PWM=0x00;
PCA_PWM0=0x02;//初始化輸出0
CCAP0H= 0xFF;//初始化輸出0
CCAPM0= 0x42;//設(shè)置PCA模塊0工作在PWM模式.......................
PCA_PWM1=0x02;//初始化輸出0
CCAP1H= 0xFF;//初始化輸出0
CCAPM1= 0x42;//設(shè)置PCA模塊1工作在PWM模式
en_PCA();//打開PMW
}
DALE R01F采樣電阻,阻值是0.01歐
RXD為接收數(shù)據(jù)的引腳,TXD為發(fā)送數(shù)據(jù)的引腳
PMW0 輸出全1
PCA_PWM0=0x00;
CCAP0H = 0x00;
PMW0輸出全0
PCA_PWM0=0x00;
CCAP0H = 0x00;//set PWM wide
評論