微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 详细注解的PWM c程序初学者适用

详细注解的PWM c程序初学者适用

时间:04-07 来源:互联网 点击:

#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(); //调节占空比

void st(); //用来表示pulse_width的状态函数

void main(void)

{

EA=0;

PCAinit(); //初始化PCA定时器

zhankongbi();

}

void PCAinit()

{

CMOD=0x80; //PCA 在空闲模式下停止 PCA 计数器工作

//PCA 时钟模式为fosc/12

//禁止 PCA 计数器溢出中断

CCON=0x00; //禁止 PCA 计数器工作, 清除中断标志、计数器溢出标志

CL=0X00; //清0计数器

CH=0X00;

//下面设置模块0为 8 位 PWM 输出模式, PWM 无需中断支持。脉冲在P3.7(第11脚)输出

CCAPM0=0x42; //PCA(计数器阵列)模块0的工作模式 :8位PWM工作模式

PCA_PWM0=0x00; //赋值为0,pwm才能有高电平输出

//下面设置模块1为 8 位 PWM 输出模式, PWM 无需中断支持。脉冲在P3.5(第9脚)输出

CCAPM1=0x42; //PCA(计数器阵列)模块1的工作模式 :8位PWM工作模式

PCA_PWM1=0x00; //赋值为0,pwm才能有高电平输出

EPCA=1; // 开 PCA 中断

EA =1; // 开总中断

CR=1; //将PCA 计数器打开

}

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;j400;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%程序完全由本人自己写的,非网摘。这也是本人自己写的第一个比较完善的程序,现分享给大家,希望给有心学习的初学者!~

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top