例程8. PCA_PWM -- 慕司板IAP15
来源:互联网 发布:php自助建站系统源码 编辑:程序博客网 时间:2024/05/17 22:51
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位PWMCCAP0H = 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
0 0
- 例程8. PCA_PWM -- 慕司板IAP15
- 例程1. LKB -- 慕司板IAP15
- 例程3. 串口 -- 慕司板IAP15
- 例程5. ADC -- 慕司板IAP15
- 例程7. HMC5883工程说明 -- 慕司板IAP15
- 例程9. NRF24L01工程说明 -- 慕司板IAP15
- 例程6. MPU6050工程变量超出data区的解决办法 -- 慕司板IAP15
- 序 -- 慕司板IAP15
- 慕司板编程说明 -- 慕司板IAP15
- 软件安装与仿真设置 -- 慕司板IAP15
- IAP15L2K61S2新建工程与点灯 -- 慕司板IAP15
- 演示程序之打游戏 -- 慕司板IAP15
- IAP15 + MATLAB + Serial Chart综合测试
- 例程
- 例程4. SPI_LCD -- 慕司板IAP
- atmega8 例程:12864例程
- 开始例程,结束例程,专家例程
- Hibernate例程
- spring bean
- linux下信号
- LeetCode #1 Two Sum C# Solution
- libiconv编译出错解决
- font-face 自定义字体,让页面文艺起来~~~
- 例程8. PCA_PWM -- 慕司板IAP15
- 第六周项目一-分数类的雏形(2)
- eclipse中批量修改Java类文件中引入的package包路径 - [工具使用]
- 模态框
- Android 源码下载 编译.
- BJTU 1703 Ficer的春运 (DFS)
- 格雷码
- 排序
- 数据结构学习-绪论(1)