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


原创粉丝点击