STC12C5A60S2 PCA模块输出占空比可调PWM波形
来源:互联网 发布:淘宝买家故意损坏 编辑:程序博客网 时间:2024/05/16 06:04
PCA模块是高速单片机异于普通8051单片机的一个地方,PCA(可编程计数器阵列)可用于:
1、软件定时
2、外部脉冲捕捉
3、高速输出
4、PWM输出
最近在做用PWM调制的方法输出WAV声音文件,要注意的地方做一些记录。
PCA模块有两路,但是它们共用一个时钟,在CMOD寄存器中有设置。全部寄存器的信息可以在说明书里找到,并且有详细的解释。CL,CH为共用的16位计数器,类似于普通单片机的定时器0/1。CCAPnL,CCAPnH为捕捉/比较寄存器(n=0,1)。在捕捉模式中用于捕捉CL,CH的值,在PWM输出时,CCAPnL与PCA_PWMn寄存器中的EPCnL(bit)组合起来(一共9BIT)。当CL(8BIT)的值等于或者大于[EPCnL,CCAPnL]时,输出高。CL小于[EPCnL,CCAPnL]时,输出低电平。
每输出一次完整的波形,[EPCnL,CCAPnL]便会从[EPCnH,CCAPnH]中取一次值,所以只要不停的更新[EPCnH,CCAPnH],就可以实现占空比可调的PWM输出。
PWM输出时,用中断的方法来给[EPCnH,CCAPnH]赋值。这里要注意的是,PCA模块有3个中断标志位,分别为CF,CCF0,CCF1。分别由三个使能控制位(在不同的寄存器中)来控制是否在置位时触发中断函数。三个中断标志位分别对应前面提到的3组记数寄存器:CL,CH CCAPnL,CCAPnH(n=1,2)每溢出一次便置位,只能通过软件清零。特别注意的是,这三个中断标志位共有也只有一个中断向量,在KEIL中用interrupt 7 来表示,也就是说三个标志都只能触发同一个中断函数。
最后,默认的PWM输出端口为P1.3,也可以用寄存器修改到P4口。
/********************************************************************函数名称:PCA_Init(void)*函数功能:初始化PCA********************************************************************/void PCA_Init(void){CCON=0x00; //初始化PCA控制寄存器 //停止PCA计数器 //清除CF标记 //清除PCA各个模块中断CL=0x00; //清除PCA计数器CH=0x00;CMOD=0x82; //设置PCA计数器时钟源为Fosc/2 //PCA计数器空闲模式停止计数 //禁止PCA计数溢出中断CCAP0H=0x80; //PWM0端口输出50%占空比方波//8位PWM模式最大为256,一半为128,即0x80CCAPM0=0x63; //PCA模块0工作于8位PWM模式//允许比较器功能,允许PWM输出 //启用CCF0中断 上升沿中断EA = 1;//开启总中断CR=1; //运行PCA计数器}/*********************************************************************** 名称 : _int7() * 功能 : 中断功能函数 不能有返回值 不能外部声明* 中断方式修改PWM波的占空比;* 输入 : 无* 输出 : 无***********************************************************************/void _int_7(void) interrupt 7{static unsigned int dat_index = 0;//数组的一个计数变量CCF0 = 0; //软件清零CCAP0H = dat[dat_index];if(++dat_index == max_size){dat_index = 0;CR = 0;PWM_OUT = 0;//默认P1.3}}
/*********************************************************************** 名称 : pwm_alarm()* 功能 : 报警铃声* 输入 : 无* 输出 : 返回0***********************************************************************/int pwm_alarm(void){unsigned int dat_index = 0;PCA_Init();//初始化的同时就启动了PCADelay_ms(1);return 0;}
- STC12C5A60S2 PCA模块输出占空比可调PWM波形
- MSP实时输出占空比可调的pwm波形
- STM32F4_TIM输出PWM波形(可调频率、占空比)
- avr频率占空比可调波形输出子函数
- VB/VC实现可调占空比的PWM脉冲输出
- STM32一个Timer输出4路不同频率、可调占空比的PWM
- STM32一个Timer输出4路不同频率、可调占空比的PWM
- STM32一个Timer输出4路不同频率、可调占空比的PWM
- cc2530 timer 3 PWM <可调占空比>
- MSP430G2253 产生占空比可调的PWM
- PWM输入模式捕捉4路PWM波形的周期和占空比讲解
- STM32学习笔记之对PWM频率和占空比都可调测试
- STM32+按键调控PWM输出+串口输出占空比
- 51单片机按键控制输出pwm的占空比
- 调整pwm占空比
- STM32基础知识2-分享PWM输入模式捕捉4路PWM波形的周期和占空比
- pwn波形和占空比
- 9260的TC应用案例--配置红外发送38K PWM波形(1/2占空比)
- 游戏开发工具与SDK
- 黑马程序员_<<基础加强---反射>>
- APP快速通过苹果AppStore审核九大诀窍
- 1147[谁拿了最多奖学金]
- python 下载指定网页上得图片
- STC12C5A60S2 PCA模块输出占空比可调PWM波形
- linux网络协议栈3
- Android APIDemos 研读之一:android.graphics.Movie
- Android ContactsProvider源码分析
- cocos2d-x ActionManager控制精灵的暂停运动
- 如何找到人体毒素与有效排毒?
- 跟我一起写 Makefile
- Embedded Development
- sqlite 基本操作指令