您的位置:首页 > 其它

例程8. PCA_PWM -- 慕司板IAP15

2016-04-03 14:01 197 查看
STC15系列部分单片机集成了3路可编程计数阵列(CCP/PCA)模块(CCP0、1、2引脚),可用于软件定时器、外部脉冲的捕获、高速脉冲输出以及脉宽调制(PWM)输出。

慕司板的PWM应用于蜂鸣器、液晶屏亮度调节、直流电机调速,如下图(注意P19的跳线帽插到上面):



程序中需要把CCP的3个引脚切换到第三通道:



切换的代码在PCA_PWM_Init()函数中,直接用官方例程:

//    ACC = P_SW1;
//    ACC &= ~(CCP_S0 | CCP_S1);      //CCP_S0=0 CCP_S1=0
//    P_SW1 = ACC;                    //(P1.2/ECI, P1.1/CCP0, P1.0/CCP1, P3.7/CCP2)

//   ACC = P_SW1;
//   ACC &= ~(CCP_S0 | CCP_S1);      //CCP_S0=1 CCP_S1=0
//   ACC |= CCP_S0;                  //(P3.4/ECI_2, P3.5/CCP0_2, P3.6/CCP1_2, P3.7/CCP2_2)
//   P_SW1 = ACC;

ACC = P_SW1;
ACC &= ~(CCP_S0 | CCP_S1);      //CCP_S0=0 CCP_S1=1
ACC |= CCP_S1;              //(P2.4/ECI_3, P2.5/CCP0_3, P2.6/CCP1_3, P2.7/CCP2_3)
P_SW1 = ACC;


PCA的时钟源通过CMOD寄存器来设置:



如我们的系统时钟为33.1776MHz,CMOD=0x02;则PCA时钟源为33.1776/12=2.7648M,如果为8位PWM(即占空比分辨率为1/256),则输出PWM的频率为2.7648M/256=10.8KHz.

8位PWM设置在PCA_PWMx(x:0、1、2)寄存器中(PCA_PWM0=0x00):



至于PWM的占空比,设置CCAPxH和CCAPxL寄存器即可:

PCA_PWM0 = 0x00;                //PCA模块0工作于8位PWM
CCAP0H = CCAP0L = 0x20;         //PWM0的占空比为87.5% ((100H-20H)/100H)


设置为PWM模式,还需设置CCAPMx(x:0、1、2)寄存器,这里我们只需CCAPM0=0x42即可:



程序实现了液晶屏的亮度渐变(连接到CCP1_3通道上),把P19的跳线帽插到上面,即可看到液晶屏亮度变化。

完整工程参见资源汇总帖.

原作于 2014年10月

CSDN发表于2016年4月

weifengdq
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: