宏晶科技 STC8G1K系列單片機教程「十四」PWM應用

大家好,我是遠方,這一章我們來學習下STC8G1K12的PWM應用。

STC8G 系列單片機內部集成了 3 組可編程計數器陣列(PCA/CCP/PWM)模塊,可用於軟件定時器、外部脈衝捕獲、高速脈衝輸出和 PWM 脈寬調製輸出。 我們今天主要學習下PWM的輸出。

宏晶科技 STC8G1K系列單片機教程「十四」PWM應用

我們開始配置寄存器:

宏晶科技 STC8G1K系列單片機教程「十四」PWM應用

PCA 控制寄存器 CCON ,我們需要啟動 PCA 計數 ,所以CR位需要寫1。

宏晶科技 STC8G1K系列單片機教程「十四」PWM應用

PCA 模式寄存器 CMOD,空閒模式下 PCA 繼續計數 ,該位寫0,

CPS[2:0]:PCA 計數脈衝源選擇位 選擇系統時鐘。設置為100。

宏晶科技 STC8G1K系列單片機教程「十四」PWM應用

PCA 計數器寄存器 CL CH,每來一個時鐘 16 位計數器自動加 1。

宏晶科技 STC8G1K系列單片機教程「十四」PWM應用

宏晶科技 STC8G1K系列單片機教程「十四」PWM應用

PCA 模塊模式控制寄存器 ,我們這次使用的是CCAPM0的PWM0。大家這裡要注意,使用PWM輸出必須 同時使能 ECOM0 和 PWM0。所以這二位都要寫1。

宏晶科技 STC8G1K系列單片機教程「十四」PWM應用

PCA 模塊模式捕獲值/比較值寄存器 ,在作為PWM輸出時,大家只需知道這裡的寄存器是用來調佔空比的。

宏晶科技 STC8G1K系列單片機教程「十四」PWM應用

PCA 模塊 PWM 模式控制寄存器 PCA_PWM0 ,這裡主要設置PWM的位數。如果需要分辨率高一點,就把位數設置大點。

今天我們以PWM0,時鐘源選擇系統時鐘11.0592MHz,6 位PWM模式 最大值40H,輸出50%的佔空比 來測試一下。

大家可能會問,那頻率是多少?大家記住下面這個公式。

頻率=PWM時鐘除以(2的(PWM位數)次方)

也就是6位PWM,就是除以2的6次方。

我們開始寫代碼。

全部工程代碼如下:

#include "STC8.H"

sbit LED = P1^1;

void main(void)

{

//使用內部時鐘 燒錄軟件會幫我們配置好 如不懂 參考前面第3章系統設置學習。

// 燒錄軟件設置11.0592MHz為系統時鐘。以後我們的學習都是這個時鐘頻率。

P_SW2 |= (1<<7);

CKSEL = 0x00; //選擇內部 IRC ( 默認 )

P_SW2 &= ~(1<<7);

//配置端口 對於控制我們系統板的LED,配置準雙向口和推輓輸出都可以。

//只要是做為輸出,我建議全部設置為推輓輸出。

/*

PnM1.x PnM0.x Pn.x 口工作模式

0 0 準雙向口

0 1 推輓輸出

1 0 高阻輸入

1 1 開漏輸出

*/

P1M1 &= ~(1<<1); P1M0 |= (1<<1); //設置為推輓輸出

P_SW2 |= (1<<7);

P1PU = 0x00;//禁止P1端口內部的 3.7K 上拉電阻

P1NCS = 0xFF; //禁止P1端口的施密特觸發功能。

P_SW2 &= ~(1<<7);

P_SW1 &= ~(1 << 5);P_SW1 &= ~(1 << 4);//默認引腳功能 P1.1 P1.0 P3.7

CCON = 0x00; //停止PCA計數

CMOD = 0x08; //PCA時鐘為系統時鐘 11.0592MHz 頻率=PWM時鐘/2的(PWM位數)次方

CL = 0x00;

CH = 0x00;//PCA 計數器清零

CCAPM0 = 0x42; //PCA 模塊 0 為 PWM 工作模式

PCA_PWM0 = 0x80; //PCA 模塊 0 輸出 6 位 PWM

CCAP0L = 0x20; //PWM 佔空比為 50%[(40H-20H)/40H]

CCAP0H = 0x20;

CCON |= (1 << 6); //啟動PCA計時器

while (1);

}

我們把程序編譯好,燒錄到板子裡面。連接示波器查看。

我們的PWM頻率是 11.0592MHZ除以64等於172.8K。硬件接口是P1.1.

。佔空比位50%。

宏晶科技 STC8G1K系列單片機教程「十四」PWM應用

宏晶科技 STC8G1K系列單片機教程「十四」PWM應用

通過示波器查看波形,證明我們的軟件測試沒問題。

好了這章就講到這裡。希望大家多多關注我的原創文章。謝謝。


分享到:


相關文章: