STC15F2K60S2系列主要性能:
●大容量2048字節片內RAM數據存儲器
●高速:1個時鐘/機器周期,增強型8051內核(STC Y5),速度比傳統8051快7~12倍
速度也比STC早期的1T系列單片機(如STC12/11/10系列)的速度快20%
●寬電壓:5.5~3.8V,2.4~3.6V(STC15L2K60S2系列)
●低功耗設計:低速模式,空閑模式,掉電模式(可由外部中斷或內部掉電喚醒定時器喚醒)
內部高精度R/C時鐘,±1% 溫飄(-40℃~+85℃),常溫下溫飄5‰,可徹底省掉外部昂貴的晶體時鐘,內部時鐘從5MHz~35MHz可選
●內部高可靠復位,ISP編程時8級復位門檻電壓可選,徹底省掉外部復位電路
●支持掉電喚醒的資源有:INT0/INT1(上升沿/下降沿中斷均可),-INT2/-INT3/-INT4(下降沿中斷);CCP0/CCP1/CCP2/RxD/RxD2/T0/T1/T2 管腳;內部掉電喚醒專用定時器
●工作頻率:5~35MHz,相當于普通8051:60~420MHz
●8/16/24/32/40/48/56/60/61K字節片內Flash程序存儲器,擦寫次數10萬次以上
●大容量片內EEPROM(FLASH)功能,擦寫次數10萬次以上
●ISP/IAP(在系統可編程/在應用可編程),無需編程器/仿真器
●高速ADC,8通道10位,速度可達30萬次/秒。3路PWM還可當3路D/A使用
●3通道捕獲/比較單元(CCP/PCA/PWM)
----也可用來再實現3路D/A 3個定時器或3個外部中斷(支持上升沿/下降沿中斷)
●6個定時器,2個16位可重裝載定時器T0和T1兼容普通8051的定時器,新增了一個16位的定時器T2,并可實現時鐘輸出,3路CCP/PCA可再實現3個定時器
●可編程時鐘輸出功能(對內部系統時鐘或外部管腳的時鐘輸入進行時鐘分頻輸出):
① T0 在P3.5 輸出時鐘;
② T1 在P3.4 輸出時鐘;
③ T2 在P3.0 輸出時鐘,以上3個定時器/計數器輸出時鐘均可1~65536級分頻輸出;
④ 內部主時鐘在P5.4/MCLKO 對外輸出時鐘(STC15系列8-pin單片機的主時鐘在P3.4/MCLKO 對外輸出時鐘)
●SPI高速同步串行通信接口
●雙串口/UART,兩個完全獨立的高速異步串行通信端口,分時切換可當5組串口使用
●先進的指令集結構,兼容普通8051指令集,有硬件乘法/除法指令
●通用I/O口(42/38/30/26個),復位后為:準雙向口上拉(8051傳統I/O口)
可設置四種模式:準雙向口上拉、強推挽上拉、僅為輸入/高阻和開漏
每個I/O口驅動能力均可達到20mA,但整個芯片最大不要超過120mA
●如果I/O口不夠用可以用3根普通I/O口線外接74HC595(¥0.21元)來擴展I/O口,并可多芯片級聯擴展幾十個I/O口,還可用A/D作按鍵掃描來節省I/O口
選擇STC15F2K60S2系列單片機理由:
★片內大容量2048字節SRAM
★超級加密,宏晶第八代加密技術
★超強抗干擾:
1.高抗靜電保護(ESD)整機輕松過2萬伏靜電測試
2.輕松過4KV 快速脈沖干擾(EFT測試)
3.寬電壓,不怕電源抖動
4.寬溫度范圍,-40℃~+85℃
★大幅降低EMI(電磁輻射),內部可配置時鐘,1個時鐘/機器周期,可用低頻時鐘
----出口歐美的有力保證
超低功耗:
1.掉電模式:外部中斷喚醒功耗《0.1uA
2.空閑模式:典型功耗《1mA,
3.正常工作模式:4mA~6mA,
4.掉電模式可由外部中斷或內部掉電喚醒專用定時器喚醒,適用于電池供電系統,如水表、氣表、便攜設備等
★在系統可編程(ISP),無需編程器,無需仿真器,可遠程升級 可送STC-ISP下載編程器,1萬片/人/天
★可徹底省掉外部昂貴復位電路,內部集成高可靠復位電路、ISP編程時8級復位門檻電壓可選 當然也可以繼續用外部復位電路
★可徹底省掉外部昂貴的晶體時鐘,內部集成高精度R/C時鐘,±1%溫飄(-40℃~+85℃),常溫下溫飄5‰
STC15F2K60S2芯片PWM的應用
1.目的
脈寬調制(PWM,Pulse Width Modulation)是一種使用程序來控制波形占空比、周期、相位波形的技術,在三相電機驅動、D/A轉換等場合有廣泛的應用。
STC15系列單片機的PCA模塊可以通過設定各自的寄存器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應用有關的特殊功能寄存器 符號 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 復位值 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計數的控制位。 當CIDL = 0時,空閑模式下PCA計數器繼續工作; 當CIDL = 1時,空閑模式下PCA計數器停止工作; CPS2、CPS1、CPS0:PCA計數脈沖源選擇控制位。 PCA計數脈沖選擇如下表所示。 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,系統時鐘,SYSclk/12 1,系統時鐘,SYSclk/2 2,定時器0的溢出脈沖。由于定時器0可以工作在T1模式,所以可以達到記一個時鐘就溢出,從而達到最高頻率CPU工作時鐘SYSclk,通過改變定時器0的溢出率,可以實現可調頻率的PWM輸出 3,ECI/P1.2(或P4.1)腳輸入的外部時鐘(最大速率=SYSclk/2) 4,系統時鐘,SYSclk 5,系統時鐘/4,SYSclk/4 6,系統時鐘/6,SYSclk/6 7,系統時鐘/8,SYSclk/8 例如,CPS2/CPS1/CPS0 = 1/0/0時,CCP/PCA/PWM的時鐘源是SYSclk,不用定時器0,
PWM的頻率為SYSclk/256.
如果要用系統時鐘/3來作為PCA的時鐘源,應選擇T0的溢出作為CCP/PCA/PWM的時鐘源,此時應讓T0工作在1T模式,計數3個脈沖即產生溢出。用T0的溢出可對系統時鐘進行1~65536級分頻(T0工作在16為重裝載模式)。
ECF:PCA計數溢出中斷使能位。
當ECF = 0時,禁止寄存器CCON中CF位的中斷; 當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計數器陣列溢出標志位。當PCA計數器溢出時,CF由硬件置位。如果CMOD寄存器的ECF位置位,則CF標志可用來產生中斷。CF位可通過硬件或軟件置位,但只能通過軟件清零。
CR:PCA計數器陣列運行控制位。該位通過軟件置位,用來啟動計數器陣列計數。該位通過軟件清零,用來 關閉PCA計數器。
CCF2:PCA模塊2中斷標志。當出現匹配或捕捉時該位由硬件置位。該位必須通過軟件清零。
CCF1:PCA模塊1中斷標志。當出現匹配或捕捉時該位由硬件置位。該位必須通過軟件清零。
CCF0:PCA模塊0中斷標志。當出現匹配或捕捉時該位由硬件置位。該位必須通過軟件清零。
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:允許比較器功能控制位。
當ECOM0 = 1時,允許比較器功能。 CAPP0: 正捕獲控制位。
當CAPP0 = 1時,允許上升沿捕獲。 CAPN0: 負捕獲控制位。
當CAPN0 = 1時,允許下降沿捕獲。 MAT0: 匹配控制位。
當MAT0 = 1時,PCA計數值與模塊的比較/捕獲寄存器的值的匹配將置位CCON寄存器的中斷標志位CCF0。
TOG0:翻轉控制位。
當TOG0 = 1時,工作在PCA高速脈沖輸出模式,PCA計數器的值與模塊的比較/捕獲寄存器的值的匹配將使CCP0腳翻轉。 PWM0: 脈寬調制模式。
當PWM0 = 1時,允許CCP0腳用作脈寬調節輸出。
ECCF0:使能CCF0中斷。使能寄存器CCON的比較/捕獲標志CCF0,用來產生中斷。
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:允許比較器功能控制位。
當ECOM1 = 1時,允許比較器功能。 CAPP1: 正捕獲控制位。
當CAPP1 = 1時,允許上升沿捕獲。 CAPN1:負捕獲控制位。
當CAPN1 = 1時,允許下降沿捕獲。 MAT1:匹配控制位。
當MAT1 = 1時,PCA計數值與模塊的比較/捕獲寄存器的值的匹配將置位CCON寄存器的中斷標志位CCF1。 TOG1:翻轉控制位。
當TOG1 = 1時,工作在PCA高速脈沖輸出模式,PCA計數器的值與模塊的比較/捕獲寄存器的值的匹配將使CCP1腳翻轉。 PWM1: 脈寬調制模式。
當PWM1 = 1時,允許CCP1腳用作脈寬調節輸出。
ECCF1:使能CCF1中斷。使能寄存器CCON的比較/捕獲標志CCF1,用來產生中斷。 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:允許比較器功能控制位。
當ECOM2 = 1時,允許比較器功能。 CAPP2: 正捕獲控制位。
當CAPP2 = 1時,允許上升沿捕獲。 CAPN2:負捕獲控制位。
當CAPN2 = 1時,允許下降沿捕獲。 MAT2:匹配控制位。
當MAT2 = 1時,PCA計數值與模塊的比較/捕獲寄存器的值的匹配將置位CCON寄存器的中斷標志位CCF2。 TOG2:翻轉控制位。
當TOG2 = 1時,工作在PCA高速脈沖輸出模式,PCA計數器的值與模塊的比較/捕獲寄存器的值的匹配將使CCP2腳翻轉。 PWM2:脈寬調制模式。
當PWM2 = 1時,允許CCP2腳用作脈寬調節輸出。
ECCF2:使能CCF2中斷。使能寄存器CCON的比較/捕獲標志CCF2,用來產生中斷。 2.4.PCA的16位計時器 — 低8位CL和高8位CH
CL和CH地址分別為E9H和F9H,復位值均為00H,用于保存PCA的裝載值。2.5.PCA捕捉/比較寄存器 — CCAPnL(低位字節)和CCAPnH(高位字節)
當PCA模塊用于捕獲或比較時,它們用于保存各個模塊的16位捕捉計數值;當PCA模塊用于PWM模式時,它們用來控制輸出的占空比。其中,n = 0、1、2,分別對應模塊0、模式1和模塊2。復位值均為00H。它們對應的地址分別為:
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:當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位數。 EPC0L:在PWM模式下,與CCAP0L組成9位數。
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:當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位數。 EPC1L:在PWM模式下,與CCAP1L組成9位數。
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:當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位數。 EPC2L:在PWM模式下,與CCAP2L組成9位數。
PCA模塊的工作模式設定表如下表所列: 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輸出,由低變高產生中斷 8位PWM輸出,由高變低產生中斷 8位PWM輸出,由高變低或由低到高 16位捕獲模式,由CEXn/PCAn的上升沿觸發 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的下降沿觸發 16位捕獲模式,由CEXn/PCAn的跳變觸發 16位軟件定時器 16位高速輸出 PCA模塊工作模式設定(CCAPMn寄存器,n = 0、1、2) 3.原理圖
3.1 8位脈寬調節模式(PWM)
當[EBSn_1,EBSn_0]=[0,0]或[1,1]時,PCA模塊n工作8位PWM模式,此時將{0,CL[7:0]}與捕獲寄存器[EPCnL,CCAPnL[7:0]]進行比較。
PWM模式的結構如下圖所示。
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/可調制脈沖寬度輸出模式結構圖(PCA模塊工作于8位PWM模式) 當PCA模塊工作于8位PWM模式時,由于所有模塊共用僅有的PCA定時器,所有它們的輸出頻率相同。各個模塊的輸出占空比是獨立變化的,與使用的捕獲寄存器{EPCnL,CCAPnL[7:0]}有關。當{0,CL[7:0]}的值小于{EPCnL,CCAPnL[7:0]}時,輸出為低;當{0,CL[7:0]}的值等于或大于{EPCnL,CCAPnL[7:0]}時,輸出為高。當CL的值由FF變為00溢出時,{EPCnH,CCAPnH[7:0]}的內容裝載到{EPCnL,CCAPnL[7:0]}中。這樣就實現無干擾地更新PWM。要使能PWM模式,模塊CCAPMn寄存器的PWMn和ECOMn位必須置位。
PCA時鐘輸入源頻率
當PWM是8位的時:PWM的頻率=
256
PCA時鐘輸入源可以從以下8中中選擇一種:SYSclk,SYSclk/2,SYSclk/4,SYSclk/6,
SYSclk/8,SYSclk/12,定時器0的溢出,ECI/P1.2輸入。
如果要實現可調頻率的PWM輸出,可選擇定時器0的溢出率或者ECI腳的輸入作為PCA/PWM的時鐘輸入源
當EPCnL = 0及CCAPnL = 00H時,PWM固定輸出高 當EPCnL = 1及CCAPnL = 0FFH時,PWM固定輸出低 當某個I/O作為PWM使用時,該口的狀態: PWM之前口的狀態 弱上拉/準雙向 強推挽輸出/強上拉輸出 僅為輸入/高阻 開漏 PWM輸出時的狀態 強推挽輸出/強上拉輸出,要加輸出限流電阻1K~10K 強推挽輸出/強上拉輸出,要加輸出限流電阻1K~10K PWM無效 開漏 3.2 7位脈寬調節模式(PWM)
當[EBSn_1,EBSn_0]=[0,1]時,PCA模塊n工作7位PWM模式,此時將{0,CL[6:0]}與捕獲寄存器[EPCnL,CCAPnL[6:0]]進行比較。PWM模式的結構如下圖所示。
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/可調制脈沖寬度輸出模式結構圖(PCA模塊工作于7位PWM模式) 當PCA模塊工作于7位PWM模式時,由于所有模塊共用僅有的PCA定時器,所有它們的輸出頻率相同。各個模塊的輸出占空比是獨立變化的,與使用的捕獲寄存器{EPCnL,CCAPnL[6:0]}有關。當{0,CL[6:0]}的值小于{EPCnL,CCAPnL[6:0]}時,輸出為低;當{0,CL[6:0]}的值等于或大于{EPCnL,CCAPnL[6:0]}時,輸出為高。當CL的值由7F變為00溢出時,{EPCnH,CCAPnH[6:0]}的內容裝載到{EPCnL,CCAPnL[6:0]}中。這樣就實現無干擾地更新PWM。要使能PWM模式,模塊CCAPMn寄存器的PWMn和ECOMn位必須置位。
PCA時鐘輸入源頻率
當PWM是7位的時:PWM的頻率=
128
PCA時鐘輸入源可以從以下8中中選擇一種:SYSclk,SYSclk/2,SYSclk/4,SYSclk/6, SYSclk/8,SYSclk/12,定時器0的溢出,ECI/P1.2輸入。
如果要實現可調頻率的PWM輸出,可選擇定時器0的溢出率或者ECI腳的輸入作為PCA/PWM的時鐘輸入源
當EPCnL = 0及CCAPnL = 80H時,PWM固定輸出高 當EPCnL = 1及CCAPnL = 0FFH時,PWM固定輸出低 3.2 6位脈寬調節模式(PWM)
當[EBSn_1,EBSn_0]=[1,0]時,PCA模塊n工作6位PWM模式,此時將{0,CL[5:0]}與捕獲寄存器[EPCnL,CCAPnL[5:0]]進行比較。PWM模式的結構如下圖所示。
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/可調制脈沖寬度輸出模式結構圖(PCA模塊工作于6位PWM模式) 當PCA模塊工作于6位PWM模式時,由于所有模塊共用僅有的PCA定時器,所有它們的輸出頻率相同。各個模塊的輸出占空比是獨立變化的,與使用的捕獲寄存器{EPCnL,CCAPnL[5:0]}有關。當{0,CL[5:0]}的值小于{EPCnL,CCAPnL[5:0]}時,輸出為
低;當{0,CL[5:0]}的值等于或大于{EPCnL,CCAPnL[5:0]}時,輸出為高。當CL的值由3F變為00溢出時,{EPCnH,CCAPnH[5:0]}的內容裝載到{EPCnL,CCAPnL[5:0]}中。這樣就實現無干擾地更新PWM。要使能PWM模式,模塊CCAPMn寄存器的PWMn和ECOMn位必須置位。
PCA時鐘輸入源頻率
當PWM是6位的時:PWM的頻率= 64
PCA時鐘輸入源可以從以下8中中選擇一種:SYSclk,SYSclk/2,SYSclk/4,SYSclk/6, SYSclk/8,SYSclk/12,定時器0的溢出,ECI/P1.2輸入。
如果要實現可調頻率的PWM輸出,可選擇定時器0的溢出率或者ECI腳的輸入作為PCA/PWM的時鐘輸入源
當EPCnL = 0及CCAPnL = 0C0H時,PWM固定輸出高 當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初始化函數***********************/ void timer0_init(void) {
TMOD = 0x01; //T0工作方式1
TH0 = (65536 - 1000) / 256; //對機器脈沖計數1000個計滿溢出引發中斷 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計數 }
void main(void) {
timer0_init(); pwm0_init(); while(1) {
if(CL == 0xff) {
CCAP2L = cp2; CCAP2H = cp2; } } }
評論
查看更多