最近給別人做了一個小東西,MCU選的是STC12C5A60S2 ,需要用到PWM控制功能。
在網上找了一下,發現解釋的不盡人意,無奈之下自己琢磨數據手冊弄明白了。
首先,STC12C5A60S2內置有兩個 編程計數器陣列(PCA) 模塊,分別用於軟件定時器,外部脈沖的捕捉,高速輸出以及脈寬調制輸出(PWM)。具體寄存器詳見數據手冊這里就不多累述了。
這里就只講PWM的實現,首先需要對PCA進行初始化配置,代碼如下:
void Pwm0_init(void) //PWM0初始化配置 { CCON = 0x00; // CL = 0; //PCA計數器 低8位 CH = 0; //PCA計數器 高8位 CMOD = 0x02; //選擇時鍾源為系統時鍾源的1/2 CCAP0H = CCAP0L = 0x00; //設置占空比為 0 CCAPM0 = 0x42; //0100 0010 允許比較器,允許PWM0引腳輸出 CR = 1; //啟動 PCA 計數器陣列 }
上述代碼設置了 P1.3作為 PWM0的輸出腳,並初始化了PWM0,當然初始化完成后,默認占空比為0。
接下來對占空比進行控制:
//占空比設置 0-255
void Pwm0_outset(u8 grad)
{
CR = 0; //先關閉計數
CCAP0H=CCAP0L= grad; //設置占空比,有 0-255 階
CR = 1; //計數打開
}
這樣就完成PWM0控制部分的編寫了,當然還有PWM1沒有寫,相信聰明的讀者也已經明白PWM1該如何配置了,具體參考數據手冊,數據手冊才是硬道理,其他都是虛的。
希望對大家有所幫助,以上