STC15F2K60S2系列主要性能:
●大容量2048字節(jié)片內(nèi)RAM數(shù)據(jù)存儲器
●高速:1個時鐘/機器周期,增強型8051內(nèi)核(STC Y5),速度比傳統(tǒng)8051快7~12倍
速度也比STC早期的1T系列單片機(如STC12/11/10系列)的速度快20%
●寬電壓:5.5~3.8V,2.4~3.6V(STC15L2K60S2系列)
●低功耗設(shè)計:低速模式,空閑模式,掉電模式(可由外部中斷或內(nèi)部掉電喚醒定時器喚醒)
內(nèi)部高精度R/C時鐘,±1% 溫飄(-40℃~+85℃),常溫下溫飄5‰,可徹底省掉外部昂貴的晶體時鐘,內(nèi)部時鐘從5MHz~35MHz可選
●內(nèi)部高可靠復(fù)位,ISP編程時8級復(fù)位門檻電壓可選,徹底省掉外部復(fù)位電路
●支持掉電喚醒的資源有:INT0/INT1(上升沿/下降沿中斷均可),-INT2/-INT3/-INT4(下降沿中斷);CCP0/CCP1/CCP2/RxD/RxD2/T0/T1/T2 管腳;內(nèi)部掉電喚醒專用定時器
●工作頻率:5~35MHz,相當(dāng)于普通8051:60~420MHz
●8/16/24/32/40/48/56/60/61K字節(jié)片內(nèi)Flash程序存儲器,擦寫次數(shù)10萬次以上
●大容量片內(nèi)EEPROM(FLASH)功能,擦寫次數(shù)10萬次以上
●ISP/IAP(在系統(tǒng)可編程/在應(yīng)用可編程),無需編程器/仿真器
●高速ADC,8通道10位,速度可達(dá)30萬次/秒。3路PWM還可當(dāng)3路D/A使用
●3通道捕獲/比較單元(CCP/PCA/PWM)
----也可用來再實現(xiàn)3路D/A 3個定時器或3個外部中斷(支持上升沿/下降沿中斷)
●6個定時器,2個16位可重裝載定時器T0和T1兼容普通8051的定時器,新增了一個16位的定時器T2,并可實現(xiàn)時鐘輸出,3路CCP/PCA可再實現(xiàn)3個定時器
●可編程時鐘輸出功能(對內(nèi)部系統(tǒng)時鐘或外部管腳的時鐘輸入進行時鐘分頻輸出):
?、?T0 在P3.5 輸出時鐘;
?、?T1 在P3.4 輸出時鐘;
?、?T2 在P3.0 輸出時鐘,以上3個定時器/計數(shù)器輸出時鐘均可1~65536級分頻輸出;
?、?內(nèi)部主時鐘在P5.4/MCLKO 對外輸出時鐘(STC15系列8-pin單片機的主時鐘在P3.4/MCLKO 對外輸出時鐘)
●SPI高速同步串行通信接口
●雙串口/UART,兩個完全獨立的高速異步串行通信端口,分時切換可當(dāng)5組串口使用
●先進的指令集結(jié)構(gòu),兼容普通8051指令集,有硬件乘法/除法指令
●通用I/O口(42/38/30/26個),復(fù)位后為:準(zhǔn)雙向口上拉(8051傳統(tǒng)I/O口)
可設(shè)置四種模式:準(zhǔn)雙向口上拉、強推挽上拉、僅為輸入/高阻和開漏
每個I/O口驅(qū)動能力均可達(dá)到20mA,但整個芯片最大不要超過120mA
●如果I/O口不夠用可以用3根普通I/O口線外接74HC595(¥0.21元)來擴展I/O口,并可多芯片級聯(lián)擴展幾十個I/O口,還可用A/D作按鍵掃描來節(jié)省I/O口
選擇STC15F2K60S2系列單片機理由:
★片內(nèi)大容量2048字節(jié)SRAM
★超級加密,宏晶第八代加密技術(shù)
★超強抗干擾:
1.高抗靜電保護(ESD)整機輕松過2萬伏靜電測試
2.輕松過4KV 快速脈沖干擾(EFT測試)
3.寬電壓,不怕電源抖動
4.寬溫度范圍,-40℃~+85℃
★大幅降低EMI(電磁輻射),內(nèi)部可配置時鐘,1個時鐘/機器周期,可用低頻時鐘
----出口歐美的有力保證
超低功耗:
1.掉電模式:外部中斷喚醒功耗《0.1uA
2.空閑模式:典型功耗《1mA,
3.正常工作模式:4mA~6mA,
4.掉電模式可由外部中斷或內(nèi)部掉電喚醒專用定時器喚醒,適用于電池供電系統(tǒng),如水表、氣表、便攜設(shè)備等
★在系統(tǒng)可編程(ISP),無需編程器,無需仿真器,可遠(yuǎn)程升級 可送STC-ISP下載編程器,1萬片/人/天
★可徹底省掉外部昂貴復(fù)位電路,內(nèi)部集成高可靠復(fù)位電路、ISP編程時8級復(fù)位門檻電壓可選 當(dāng)然也可以繼續(xù)用外部復(fù)位電路
★可徹底省掉外部昂貴的晶體時鐘,內(nèi)部集成高精度R/C時鐘,±1%溫飄(-40℃~+85℃),常溫下溫飄5‰
STC15F2K60S2芯片PWM的應(yīng)用
1.目的
脈寬調(diào)制(PWM,Pulse Width Modulation)是一種使用程序來控制波形占空比、周期、相位波形的技術(shù),在三相電機驅(qū)動、D/A轉(zhuǎn)換等場合有廣泛的應(yīng)用。
STC15系列單片機的PCA模塊可以通過設(shè)定各自的寄存器PCA_PWMn(n=0,1,2.下同)中的位EBSn_1/PCA_PWMn.7及EBSn_0/PCA_PWMn.6,使其工作于8位PWM或7位PWM或6位PWM模式。
2.與CCP/PWM/PCA應(yīng)用有關(guān)的特殊功能寄存器 符號 CCON CMOD CCAPM0 CCAPM1 CCAPM2 CL CH CCAP0L 描述 PCA Control Register PCA Mode Register PCA Module 0 Mode Register PCA Module 1 Mode Register PCA Module 2 Mode Register PCA Base Timer Low PCA Base Timer High PCA Module-0 Capture Register Low PCA Module-0 Capture Register High PCA Module-1 Capture Register Low PCA Module-1 Capture Register High PCA Module-2 Capture Register Low PCA Module-2Capture Register High PCA PWM Mode Auxiliary Register 0 PCA PWM Mode Auxiliary Register 1 PCA PWM Mode Auxiliary Register 2 位地址及其符號 地址 D8H B7 CF B6 CR - B5 - - B4 - - CAPN0 CAPN1 CAPN2 B3 - B2 CCF2 B1 CCF1 B0 CCF0 復(fù)位值 00xx xx00 0xxx 0000 x000 000 x000 0000 x000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00xx xx00 00xx xx00 00xx xx00 0100 0000 D9H CIDL DAH DBH DCH E9H F9H EAH - - - CPS2 CPS1 CPS0 ECF MAYPWMECCFTOG0 0 0 0 MAYPWMECCFTOG1 1 1 1 MAYPWMECCFTOG2 2 2 2 ECOCAPPM0 0 ECOCAPPM1 1 ECOCAPPM2 2 CCAP0H FAH CCAP1L EBH CCAP1H FBH CCAP2L ECH CCAP2H PCA_PWM0 PCA_PWM1 PCA_PWM2 AUXRI P_SW1 FCH F2H EBS0EBS0_1 _0 EBS1EBS1_1 _0 EBS2EBS2_1 _0 - - - - EPC0EPC0H L EPC1EPC1H L EPC2EPC2H L - DPS F3H - - - - F4H - - - SP1_S1 - SP1_S0 Auxiliary Register CCP_CCP_A2H S1_S1 S1_S0 1 S1 S0 2.1.PCA工作模式寄存器CMOD PCA工作模式寄存器的格式如下: CMOD:PCA工作模式寄存器 SFR name CCON Address D9H bit name B7 CIDL B6 - B5 - B4 - B3 CPS2 B2 CPS1 B1 CPS0 B0 ECF CIDL:空閑模式下是否停止PCA計數(shù)的控制位。 當(dāng)CIDL = 0時,空閑模式下PCA計數(shù)器繼續(xù)工作; 當(dāng)CIDL = 1時,空閑模式下PCA計數(shù)器停止工作; CPS2、CPS1、CPS0:PCA計數(shù)脈沖源選擇控制位。 PCA計數(shù)脈沖選擇如下表所示。 CPS2 CPS1 CPS0 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 選擇PCA/PWM時鐘源輸入 0,系統(tǒng)時鐘,SYSclk/12 1,系統(tǒng)時鐘,SYSclk/2 2,定時器0的溢出脈沖。由于定時器0可以工作在T1模式,所以可以達(dá)到記一個時鐘就溢出,從而達(dá)到最高頻率CPU工作時鐘SYSclk,通過改變定時器0的溢出率,可以實現(xiàn)可調(diào)頻率的PWM輸出 3,ECI/P1.2(或P4.1)腳輸入的外部時鐘(最大速率=SYSclk/2) 4,系統(tǒng)時鐘,SYSclk 5,系統(tǒng)時鐘/4,SYSclk/4 6,系統(tǒng)時鐘/6,SYSclk/6 7,系統(tǒng)時鐘/8,SYSclk/8 例如,CPS2/CPS1/CPS0 = 1/0/0時,CCP/PCA/PWM的時鐘源是SYSclk,不用定時器0,
PWM的頻率為SYSclk/256.
如果要用系統(tǒng)時鐘/3來作為PCA的時鐘源,應(yīng)選擇T0的溢出作為CCP/PCA/PWM的時鐘源,此時應(yīng)讓T0工作在1T模式,計數(shù)3個脈沖即產(chǎn)生溢出。用T0的溢出可對系統(tǒng)時鐘進行1~65536級分頻(T0工作在16為重裝載模式)。
ECF:PCA計數(shù)溢出中斷使能位。
當(dāng)ECF = 0時,禁止寄存器CCON中CF位的中斷; 當(dāng)ECF = 1時,允許寄存器CCON中CF位的中斷。
2.2.PCA控制寄存器CCON
PCA控制寄存器的格式如下: CCON:PCA控制寄存器 SFR name CCON Address D8H bit name B7 CF B6 CR B5 - B4 - B3 - B2 - B1 CCF1 B0 CCF0 CF:PCA計數(shù)器陣列溢出標(biāo)志位。當(dāng)PCA計數(shù)器溢出時,CF由硬件置位。如果CMOD寄存器的ECF位置位,則CF標(biāo)志可用來產(chǎn)生中斷。CF位可通過硬件或軟件置位,但只能通過軟件清零。
CR:PCA計數(shù)器陣列運行控制位。該位通過軟件置位,用來啟動計數(shù)器陣列計數(shù)。該位通過軟件清零,用來 關(guān)閉PCA計數(shù)器。
CCF2:PCA模塊2中斷標(biāo)志。當(dāng)出現(xiàn)匹配或捕捉時該位由硬件置位。該位必須通過軟件清零。
CCF1:PCA模塊1中斷標(biāo)志。當(dāng)出現(xiàn)匹配或捕捉時該位由硬件置位。該位必須通過軟件清零。
CCF0:PCA模塊0中斷標(biāo)志。當(dāng)出現(xiàn)匹配或捕捉時該位由硬件置位。該位必須通過軟件清零。
2.3.PCA比較/捕獲寄存器CCAPM0、CCAPM1和CCAPM2
PCA模塊0的比較/捕獲寄存器的格式如下: CCAPM0:PCA模塊0的比較/捕獲寄存器 SFR name Address CCAPM0 DAH Bit name B7 - B6 ECOM0 B5 CAPP0 B4 CAPN0 B3 MAT0 B2 TOG0 B1 PWM0 B0 ECCF0 B7:保留為將來之用。 ECOM0:允許比較器功能控制位。
當(dāng)ECOM0 = 1時,允許比較器功能。 CAPP0: 正捕獲控制位。
當(dāng)CAPP0 = 1時,允許上升沿捕獲。 CAPN0: 負(fù)捕獲控制位。
當(dāng)CAPN0 = 1時,允許下降沿捕獲。 MAT0: 匹配控制位。
當(dāng)MAT0 = 1時,PCA計數(shù)值與模塊的比較/捕獲寄存器的值的匹配將置位CCON寄存器的中斷標(biāo)志位CCF0。
TOG0:翻轉(zhuǎn)控制位。
當(dāng)TOG0 = 1時,工作在PCA高速脈沖輸出模式,PCA計數(shù)器的值與模塊的比較/捕獲寄存器的值的匹配將使CCP0腳翻轉(zhuǎn)。 PWM0: 脈寬調(diào)制模式。
當(dāng)PWM0 = 1時,允許CCP0腳用作脈寬調(diào)節(jié)輸出。
ECCF0:使能CCF0中斷。使能寄存器CCON的比較/捕獲標(biāo)志CCF0,用來產(chǎn)生中斷。
PCA模塊1的比較/捕獲寄存器的格式如下: CCAPM1:PCA模塊1的比較/捕獲寄存器 SFR name Address Bit CCAPM1 DBH B7 B6 B5 B4 B3 B2 B1 B0 name - ECOM1 CAPP1 CAPN1 MAT1 TOG1 PWM1 ECCF1 B7:保留為將來之用。 ECOM1:允許比較器功能控制位。
當(dāng)ECOM1 = 1時,允許比較器功能。 CAPP1: 正捕獲控制位。
當(dāng)CAPP1 = 1時,允許上升沿捕獲。 CAPN1:負(fù)捕獲控制位。
當(dāng)CAPN1 = 1時,允許下降沿捕獲。 MAT1:匹配控制位。
當(dāng)MAT1 = 1時,PCA計數(shù)值與模塊的比較/捕獲寄存器的值的匹配將置位CCON寄存器的中斷標(biāo)志位CCF1。 TOG1:翻轉(zhuǎn)控制位。
當(dāng)TOG1 = 1時,工作在PCA高速脈沖輸出模式,PCA計數(shù)器的值與模塊的比較/捕獲寄存器的值的匹配將使CCP1腳翻轉(zhuǎn)。 PWM1: 脈寬調(diào)制模式。
當(dāng)PWM1 = 1時,允許CCP1腳用作脈寬調(diào)節(jié)輸出。
ECCF1:使能CCF1中斷。使能寄存器CCON的比較/捕獲標(biāo)志CCF1,用來產(chǎn)生中斷。 PCA模塊2的比較/捕獲寄存器的格式如下: CCAPM2:PCA模塊2的比較/捕獲寄存器 SFR name Address CCAPM2 DCH Bit name B7 - B6 B5 B4 B3 B2 B1 B0 ECOM2 CAPP2 CAPN2 MAT2 TOG2 PWM2 ECCF2 B7:保留為將來之用。 ECOM2:允許比較器功能控制位。
當(dāng)ECOM2 = 1時,允許比較器功能。 CAPP2: 正捕獲控制位。
當(dāng)CAPP2 = 1時,允許上升沿捕獲。 CAPN2:負(fù)捕獲控制位。
當(dāng)CAPN2 = 1時,允許下降沿捕獲。 MAT2:匹配控制位。
當(dāng)MAT2 = 1時,PCA計數(shù)值與模塊的比較/捕獲寄存器的值的匹配將置位CCON寄存器的中斷標(biāo)志位CCF2。 TOG2:翻轉(zhuǎn)控制位。
當(dāng)TOG2 = 1時,工作在PCA高速脈沖輸出模式,PCA計數(shù)器的值與模塊的比較/捕獲寄存器的值的匹配將使CCP2腳翻轉(zhuǎn)。 PWM2:脈寬調(diào)制模式。
當(dāng)PWM2 = 1時,允許CCP2腳用作脈寬調(diào)節(jié)輸出。
ECCF2:使能CCF2中斷。使能寄存器CCON的比較/捕獲標(biāo)志CCF2,用來產(chǎn)生中斷。 2.4.PCA的16位計時器 — 低8位CL和高8位CH
CL和CH地址分別為E9H和F9H,復(fù)位值均為00H,用于保存PCA的裝載值。2.5.PCA捕捉/比較寄存器 — CCAPnL(低位字節(jié))和CCAPnH(高位字節(jié))
當(dāng)PCA模塊用于捕獲或比較時,它們用于保存各個模塊的16位捕捉計數(shù)值;當(dāng)PCA模塊用于PWM模式時,它們用來控制輸出的占空比。其中,n = 0、1、2,分別對應(yīng)模塊0、模式1和模塊2。復(fù)位值均為00H。它們對應(yīng)的地址分別為:
CCAP0L — EAH、CCAP0H — FAH:模塊0的捕捉/比較寄存器。 CCAP1L — EBH、CCAP1H — FBH:模塊1的捕捉/比較寄存器。 CCAP2L — ECH、CCAP2H — FCH:模塊2的捕捉/比較寄存器。 2.6.PCA模塊PWM寄存器PCA_PWM0、PCA_PWM1和PCA_PWM2
PCA模塊0的PWM寄存器的格式如下: PCA_PWM0:PCA模塊0的PWM寄存器 SFR name PCA_PWM0 Address F2H Bit name B7 EBS0_1 B6 EBS0_0 B5 B4 B3 B2 - - - - B1 EPC0H B0 EPC0L EBS0_1,EBS0_0:當(dāng)PCA模塊0工作于PWM模式時的功能選擇位。 0,0:PCA模塊0工作于8位PWM功能; 0,1:PCA模塊0工作于7位PWM功能; 1,0:PCA模塊0工作于6位PWM功能;
1,1:無效,PCA模塊0工作于8位PWM模式。 EPC0H:在PWM模式下,與CCAP0H組成9位數(shù)。 EPC0L:在PWM模式下,與CCAP0L組成9位數(shù)。
PCA模塊1的PWM寄存器的格式如下: PCA_PWM1:PCA模塊1的PWM寄存器 SFR name PCA_PWM1 Address F3H Bit B7 B6 EBS2_0 B5 B4 B3 B2 - - - - B1 EPC1H B0 EPC1L name EBS2_1 EBS1_1,EBS1_0:當(dāng)PCA模塊1工作于PWM模式時的功能選擇位。 0,0:PCA模塊1工作于8位PWM功能; 0,1:PCA模塊1工作于7位PWM功能; 1,0:PCA模塊1工作于6位PWM功能;
1,1:無效,PCA模塊1工作于8位PWM模式。 EPC1H:在PWM模式下,與CCAP1H組成9位數(shù)。 EPC1L:在PWM模式下,與CCAP1L組成9位數(shù)。
PCA模塊2的PWM寄存器的格式如下: PCA_PWM2:PCA模塊2的PWM寄存器 SFR name PCA_PWM2 Address F4H Bit name B7 EBS2_1 B6 EBS2_0 B5 - B4 - B3 - B2 - B1 EPC2H B0 EPC2L EBS2_1,EBS2_0:當(dāng)PCA模塊2工作于PWM模式時的功能選擇位。 0,0:PCA模塊2工作于8位PWM功能; 0,1:PCA模塊2工作于7位PWM功能; 1,0:PCA模塊2工作于6位PWM功能;
1,1:無效,PCA模塊2工作于8位PWM模式。 EPC2H:在PWM模式下,與CCAP2H組成9位數(shù)。 EPC2L:在PWM模式下,與CCAP2L組成9位數(shù)。
PCA模塊的工作模式設(shè)定表如下表所列: ECOMn 0 1 1 1 1 X CAPPn 0 0 1 0 1 1 CAPNn 0 0 0 1 1 0 MATn 0 0 0 0 0 0 TOGn PWMn ECCFn 0 0 0 0 0 0 0 1 1 1 1 0 0 0 1 1 1 X 模塊功能 無此操作 8位PWM,無中斷 8位PWM輸出,由低變高產(chǎn)生中斷 8位PWM輸出,由高變低產(chǎn)生中斷 8位PWM輸出,由高變低或由低到高 16位捕獲模式,由CEXn/PCAn的上升沿觸發(fā) X X 1 1 0 1 0 0 1 1 0 0 0 0 1 1 0 0 0 1 0 0 0 0 X X X X 16位捕獲模式,由CEXn/PCAn的下降沿觸發(fā) 16位捕獲模式,由CEXn/PCAn的跳變觸發(fā) 16位軟件定時器 16位高速輸出 PCA模塊工作模式設(shè)定(CCAPMn寄存器,n = 0、1、2) 3.原理圖
3.1 8位脈寬調(diào)節(jié)模式(PWM)
當(dāng)[EBSn_1,EBSn_0]=[0,0]或[1,1]時,PCA模塊n工作8位PWM模式,此時將{0,CL[7:0]}與捕獲寄存器[EPCnL,CCAPnL[7:0]]進行比較。
PWM模式的結(jié)構(gòu)如下圖所示。
EPCnHCCAPnHEPCnLCCAPnL[7:0]輸出0enable9位比較器(0,CL[7:0])《(EPCnL,CCPnL[7:0])(0,CL[7:0])》=(EPCnL,CCPnL[7:0])輸出10CL[7:0]PWMnCL overflow—ECOMn1CAPPn0CAPNn0MATn0TOGn0PWMn1ECCFn0CCAPMn,n=0,1,2地址:Dah,DBh,DCh
PCA PWM mode/可調(diào)制脈沖寬度輸出模式結(jié)構(gòu)圖(PCA模塊工作于8位PWM模式) 當(dāng)PCA模塊工作于8位PWM模式時,由于所有模塊共用僅有的PCA定時器,所有它們的輸出頻率相同。各個模塊的輸出占空比是獨立變化的,與使用的捕獲寄存器{EPCnL,CCAPnL[7:0]}有關(guān)。當(dāng){0,CL[7:0]}的值小于{EPCnL,CCAPnL[7:0]}時,輸出為低;當(dāng){0,CL[7:0]}的值等于或大于{EPCnL,CCAPnL[7:0]}時,輸出為高。當(dāng)CL的值由FF變?yōu)?0溢出時,{EPCnH,CCAPnH[7:0]}的內(nèi)容裝載到{EPCnL,CCAPnL[7:0]}中。這樣就實現(xiàn)無干擾地更新PWM。要使能PWM模式,模塊CCAPMn寄存器的PWMn和ECOMn位必須置位。
PCA時鐘輸入源頻率
當(dāng)PWM是8位的時:PWM的頻率=
256
PCA時鐘輸入源可以從以下8中中選擇一種:SYSclk,SYSclk/2,SYSclk/4,SYSclk/6,
SYSclk/8,SYSclk/12,定時器0的溢出,ECI/P1.2輸入。
如果要實現(xiàn)可調(diào)頻率的PWM輸出,可選擇定時器0的溢出率或者ECI腳的輸入作為PCA/PWM的時鐘輸入源
當(dāng)EPCnL = 0及CCAPnL = 00H時,PWM固定輸出高 當(dāng)EPCnL = 1及CCAPnL = 0FFH時,PWM固定輸出低 當(dāng)某個I/O作為PWM使用時,該口的狀態(tài): PWM之前口的狀態(tài) 弱上拉/準(zhǔn)雙向 強推挽輸出/強上拉輸出 僅為輸入/高阻 開漏 PWM輸出時的狀態(tài) 強推挽輸出/強上拉輸出,要加輸出限流電阻1K~10K 強推挽輸出/強上拉輸出,要加輸出限流電阻1K~10K PWM無效 開漏 3.2 7位脈寬調(diào)節(jié)模式(PWM)
當(dāng)[EBSn_1,EBSn_0]=[0,1]時,PCA模塊n工作7位PWM模式,此時將{0,CL[6:0]}與捕獲寄存器[EPCnL,CCAPnL[6:0]]進行比較。PWM模式的結(jié)構(gòu)如下圖所示。
EPCnHCCAPnHEPCnLCCAPnL[6:0]輸出0enable8位比較器(0,CL[6:0])《(EPCnL,CCPnL[6:0])(0,CL[6:0])》=(EPCnL,CCPnL[6:0])輸出10CL[6:0]PWMnCL overflow—ECOMn1CAPPn0CAPNn0MATn0TOGn0PWMn1ECCFn0CCAPMn,n=0,1,2地址:Dah,DBh,DCh
PCA PWM mode/可調(diào)制脈沖寬度輸出模式結(jié)構(gòu)圖(PCA模塊工作于7位PWM模式) 當(dāng)PCA模塊工作于7位PWM模式時,由于所有模塊共用僅有的PCA定時器,所有它們的輸出頻率相同。各個模塊的輸出占空比是獨立變化的,與使用的捕獲寄存器{EPCnL,CCAPnL[6:0]}有關(guān)。當(dāng){0,CL[6:0]}的值小于{EPCnL,CCAPnL[6:0]}時,輸出為低;當(dāng){0,CL[6:0]}的值等于或大于{EPCnL,CCAPnL[6:0]}時,輸出為高。當(dāng)CL的值由7F變?yōu)?0溢出時,{EPCnH,CCAPnH[6:0]}的內(nèi)容裝載到{EPCnL,CCAPnL[6:0]}中。這樣就實現(xiàn)無干擾地更新PWM。要使能PWM模式,模塊CCAPMn寄存器的PWMn和ECOMn位必須置位。
PCA時鐘輸入源頻率
當(dāng)PWM是7位的時:PWM的頻率=
128
PCA時鐘輸入源可以從以下8中中選擇一種:SYSclk,SYSclk/2,SYSclk/4,SYSclk/6, SYSclk/8,SYSclk/12,定時器0的溢出,ECI/P1.2輸入。
如果要實現(xiàn)可調(diào)頻率的PWM輸出,可選擇定時器0的溢出率或者ECI腳的輸入作為PCA/PWM的時鐘輸入源
當(dāng)EPCnL = 0及CCAPnL = 80H時,PWM固定輸出高 當(dāng)EPCnL = 1及CCAPnL = 0FFH時,PWM固定輸出低 3.2 6位脈寬調(diào)節(jié)模式(PWM)
當(dāng)[EBSn_1,EBSn_0]=[1,0]時,PCA模塊n工作6位PWM模式,此時將{0,CL[5:0]}與捕獲寄存器[EPCnL,CCAPnL[5:0]]進行比較。PWM模式的結(jié)構(gòu)如下圖所示。
EPCnHCCAPnHEPCnLCCAPnL[5:0]輸出0enable7位比較器(0,CL[5:0])《(EPCnL,CCPnL[5:0])(0,CL[5:0])》=(EPCnL,CCPnL[5:0])輸出10CL[5:0]PWMnCL overflow—ECOMn1CAPPn0CAPNn0MATn0TOGn0PWMn1ECCFn0CCAPMn,n=0,1,2地址:Dah,DBh,DCh
PCA PWM mode/可調(diào)制脈沖寬度輸出模式結(jié)構(gòu)圖(PCA模塊工作于6位PWM模式) 當(dāng)PCA模塊工作于6位PWM模式時,由于所有模塊共用僅有的PCA定時器,所有它們的輸出頻率相同。各個模塊的輸出占空比是獨立變化的,與使用的捕獲寄存器{EPCnL,CCAPnL[5:0]}有關(guān)。當(dāng){0,CL[5:0]}的值小于{EPCnL,CCAPnL[5:0]}時,輸出為
低;當(dāng){0,CL[5:0]}的值等于或大于{EPCnL,CCAPnL[5:0]}時,輸出為高。當(dāng)CL的值由3F變?yōu)?0溢出時,{EPCnH,CCAPnH[5:0]}的內(nèi)容裝載到{EPCnL,CCAPnL[5:0]}中。這樣就實現(xiàn)無干擾地更新PWM。要使能PWM模式,模塊CCAPMn寄存器的PWMn和ECOMn位必須置位。
PCA時鐘輸入源頻率
當(dāng)PWM是6位的時:PWM的頻率= 64
PCA時鐘輸入源可以從以下8中中選擇一種:SYSclk,SYSclk/2,SYSclk/4,SYSclk/6, SYSclk/8,SYSclk/12,定時器0的溢出,ECI/P1.2輸入。
如果要實現(xiàn)可調(diào)頻率的PWM輸出,可選擇定時器0的溢出率或者ECI腳的輸入作為PCA/PWM的時鐘輸入源
當(dāng)EPCnL = 0及CCAPnL = 0C0H時,PWM固定輸出高 當(dāng)EPCnL = 1及CCAPnL = 0FFH時,PWM固定輸出低 4.程序
//P3.7輸出PWM波形 #include sfr CCON = 0xd8; sfr CMOD = 0xd9; sfr CCAPM2 = 0xdc; sfr CL = 0xe9; sfr CH = 0xf9;
sfr CCAP2L = 0xec; sfr CCAP2H = 0xfc; sfr PCA_PMW2 = 0xf4;
code unsigned char seven_seg[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char cp1,cp2 = 255; unsigned int cp0;
sbit P3_4 = P3^4; sbit P3_5 = P3^5; sbit P3_6 = P3^6;
void timer0_isr(void) interrupt 1 {
TH0 = (65536 - 1000) / 256; //重裝初值 TL0 = (65536 - 1000) % 256; //重裝初值 cp0++; //中斷1次,變量加1 if(cp0 》= 100) //1秒到了 {
cp0 = 0;
cp2--; //cp2為脈寬控制變量 if(cp2 《= 1) cp2 = 255; }
P2 = 0xff;
P3 = 0xff; switch(cp1) {
case 0: P2 = seven_seg[cp2 % 100 % 10]; P3_6 = 0;break; case 1: P2 = seven_seg[cp2 % 100 / 10]; P3_5 = 0;;break; case 2: P2 = seven_seg[cp2 / 100]; P3_4 = 0;break; }
cp1++;
if(cp1》= 3)cp1 = 0; }
/*********************Timer0初始化函數(shù)***********************/ void timer0_init(void) {
TMOD = 0x01; //T0工作方式1
TH0 = (65536 - 1000) / 256; //對機器脈沖計數(shù)1000個計滿溢出引發(fā)中斷 TL0 = (65536 - 1000) % 256;
EA = 1; //開總中斷 ET0 = 1; //開T0中斷 TR0 = 1; //啟動定時器T0 }
void pwm0_init(void) {
CCON = 0x00; CL = 0x00; CH = 0x00;
PCA_PMW2 = 0x00; //8位PMW,占空比的第九位EPC0L為0 CCAPM2 = 0x42; //允許比較,P3.7輸出 CCON = 0x40; //允許PAC計數(shù) }
void main(void) {
timer0_init(); pwm0_init(); while(1) {
if(CL == 0xff) {
CCAP2L = cp2; CCAP2H = cp2; } } }
評論