#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<TIME;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; }
|