|
下面是我的基于STC15W408AS的代碼,我想要設(shè)置 2個(gè) 頻率為7KHZ,占空比為 50% ,輸出相反高低電平方波,燒錄后測(cè)量,頻率確實(shí)43Kh,請(qǐng)教各位工程師,指點(diǎn)一下[color=rgba(0, 0, 0, 0.85)]- #include "stc15.h" // 包含STC15系列寄存器定義
- #include "intrins.h"
- #define FOSC 11059200L // 系統(tǒng)時(shí)鐘頻率
- typedef unsigned char BYTE;
- typedef unsigned int WORD;
- // PCA引腳映射定義(STC15W408AS數(shù)據(jù)手冊(cè))
- #define CCP_S0 0x10 // P_SW1.4,選擇第二組CCP引腳(P3.4~P3.7)
- #define CCP_S1 0x20 // P_SW1.5(未使用,保留為0)
- // 引腳定義
- sbit PWM1 = P3^5; // CCP0_2,對(duì)應(yīng)PCA模塊0
- sbit PWM2 = P3^7; // CCP2_2,對(duì)應(yīng)PCA模塊2
- void PCA_PWM_Init(void); // PCA初始化函數(shù)
- /********************** 主函數(shù) **********************/
- void main() {
- // 配置引腳為推挽輸出
- P3M0 |= 0x84; // P3.5(PWM1)和P3.7(PWM2)設(shè)為推挽輸出(P3M0.2=1, P3M0.7=1)
- P3M1 &= ~0x84; // 清除推挽輸出禁止位
- // 初始化PCA模塊
- PCA_PWM_Init();
- while (1); // 主循環(huán)空轉(zhuǎn)
- }
- /********************** PCA初始化函數(shù) **********************/
- void PCA_PWM_Init(void) {
- BYTE duty = 128; // 50%占空比(8位PWM中255為滿周期,128為中點(diǎn))
-
- // 1. 停止PCA計(jì)數(shù)器
- CR = 0;
-
- // 2. 配置PCA引腳映射(選擇第二組CCP引腳:P3.5=CCP0_2,P3.7=CCP2_2)
- P_SW1 &= ~(CCP_S0 | CCP_S0); // 清除CCP_S0和CCP_S1位
- P_SW1 |= CCP_S0; // 設(shè)置CCP_S0=1,選擇P3.4~P3.7作為CCP引腳
-
- // 3. 配置時(shí)鐘源為系統(tǒng)時(shí)鐘/1T(STC15W支持1T模式,需確保AUXR設(shè)置正確)
- AUXR |= 0x04; // AUXR.CT0=0(定時(shí)器0模式),AUXR.ST0=1(定時(shí)器0使用1T時(shí)鐘)
- CMOD = 0x09; // CMOD=0b00001001,時(shí)鐘源為系統(tǒng)時(shí)鐘/1T(CPS1=1, CPS0=0),禁止PCA定時(shí)器溢出中斷
-
- // 4. 配置PCA模塊0(P3.5)為8位PWM模式
- PCA_PWM0 = 0x00; // 8位PWM模式(自動(dòng)重裝,計(jì)數(shù)器0x00~0xFF)
- CCAPM0 = 0x42; // PWM模式,允許模塊中斷(若需要)
- CCAP0H = CCAP0L = duty; // 設(shè)置占空比(高電平持續(xù)時(shí)間)
-
- // 5. 配置PCA模塊2(P3.7)為8位PWM模式(互補(bǔ)波形)
- PCA_PWM2 = 0x00; // 8位PWM模式
- CCAPM2 = 0x42; // PWM模式
- CCAP2H = CCAP2L = 255 - duty; // 互補(bǔ)占空比(低電平持續(xù)時(shí)間與PWM1高電平一致)
-
- // 6. 啟動(dòng)PCA計(jì)數(shù)器
- CR = 1;
- }
復(fù)制代碼
|
|