詳細注解的PWM c程序初學者適用
#include "stc2052.h"
unsigned int pulse_width_MAX = 0xF0; // ;PWM 脈寬最大值, 占空比 = 93.75%
unsigned int pulse_width_MIN = 0x10; // ;PWM 脈寬最小值, 占空比 = 6.25%
unsigned int step =0x38;
unsigned int pulse_width;
unsigned int i,j;
unsigned char state;
void PCAinit(); //PCA模塊初始化
void delay1ms(unsigned int TIME); //1ms延時程序(大概是1ms)
void zhankongbi(); //調節(jié)占空比
void st(); //用來表示pulse_width的狀態(tài)函數(shù)
void main(void)
{
EA=0;
PCAinit(); //初始化PCA定時器
zhankongbi();
}
void PCAinit()
{
CMOD=0x80; //PCA 在空閑模式下停止 PCA 計數(shù)器工作
//PCA 時鐘模式為fosc/12
//禁止 PCA 計數(shù)器溢出中斷
CCON=0x00; //禁止 PCA 計數(shù)器工作, 清除中斷標志、計數(shù)器溢出標志
CL=0X00; //清0計數(shù)器
CH=0X00;
//下面設置模塊0為 8 位 PWM 輸出模式, PWM 無需中斷支持。脈沖在P3.7(第11腳)輸出
CCAPM0=0x42; //PCA(計數(shù)器陣列)模塊0的工作模式 :8位PWM工作模式
PCA_PWM0=0x00; //賦值為0,pwm才能有高電平輸出
//下面設置模塊1為 8 位 PWM 輸出模式, PWM 無需中斷支持。脈沖在P3.5(第9腳)輸出
CCAPM1=0x42; //PCA(計數(shù)器陣列)模塊1的工作模式 :8位PWM工作模式
PCA_PWM1=0x00; //賦值為0,pwm才能有高電平輸出
EPCA=1; // 開 PCA 中斷
EA =1; // 開總中斷
CR=1; //將PCA 計數(shù)器打開
}
void zhankongbi()
{
pulse_width=pulse_width_MIN;
while(1)
{
st();
if(state==0)
{
pulse_width+=step;
}
if(state==1)
{
pulse_width-=step;
}
CCAP0H=pulse_width; // 模塊0站空比的比較值
CCAP1H=pulse_width; // 模塊1站空比的比較值
delay1ms(1000);
}
}
void delay1ms(unsigned int TIME)
{
for(i=0;i
for(j=0;j<400;j++)
{;}
}
void st()
{
if(pulse_width==pulse_width_MIN)
state=0;
if(pulse_width==pulse_width_MAX)
state=1;
}
程序功能說明程序在P3.7和P3.5都輸出3.9k的PWM信號其脈沖寬度從6.25% 慢慢遞增到93.75%然后在從93.75%遞減到6.25%程序完全由本人自己寫的,非網(wǎng)摘。這也是本人自己寫的第一個比較完善的程序,現(xiàn)分享給大家,希望給有心學習的初學者!~
擴展閱讀:單片機初學者必看
編輯:admin 最后修改時間:2018-05-19