1、PWM功能引脚切换
2、配置PCA控制寄存器
3、配置PCA模式寄存器,选择时钟源
4、计数寄存器清零
5、配置PCA模块模式模式控制寄存器
6、配置PCA模块PWM模式控制寄存器
7、配置比较值
8、控制寄存器配置CR开始计数
以6位PWM为例
计数值CL[5:0]与CCAPnL[5:0]比较,小于输出低电平,大于等于输出高电平,CL值溢出后,重载值从CCAPnH载入CCAPnL,所以修改占空比修改CCAPnH值,6位PWM周期0x40
呼吸灯实例:
#include <STC8G.H> sbit LED1 = P3^7; int dir = 0; int cnt = 0; void Delay(unsigned int xms) { unsigned char i,j; while(xms) { i = 15; j = 90; do { while(--j); } while(--i); xms--; } } void main(void) { P3M0 = 0xff; // 将P3配置为推挽输出 P3M1 = 0x00; P1M0 = 0xff; // 将P1口配置为推挽输出 P1M1 = 0x00; P_SW1 |= 0X01 << 4; CCON=0x00;//停止PCA计数 CMOD=0x08;//PCA计数脉冲设为定时器0的溢出脉冲 CL= 0x00; CH= 0x00; CCAPM1=0x42; PCA_PWM1=0x80; CCAP1L=0x3f;//PWM占空比(40H-38H)/40H CCAP1H=0x3f;//溢出时自动填装到CCAP0L里,实现无干扰更新 CR=1;//启动PCA计数 while(1) { if(dir) { cnt--; if(cnt == 0) dir = !dir; }else{ cnt++; if(cnt == 0x3f) dir = !dir; } CCAP1H=cnt; //PWM占空比(40H-38H)/40H // LED1 = !LED1; Delay(50); //延时1s } }
设置固定输出:
标签:PCA,int,配置,51,模式,单片机,寄存器,PWM From: https://www.cnblogs.com/yianyan/p/18208935