我用STC单片机的PWM功能,按照一组数据改变输出波形的占空比,使用外部晶振频率为11.0592MHz,PCA使用时钟源为计数器0溢出,要产生的频率为8KHZ的波形,程序执行后没有出现我看到的波形,不知是哪里出现了问题请大家指导下。
#include<STC12C5410AD.H>
int amount;
unsigned char code data1[128] = {
0x86, 0x7D, 0x79, 0x7C, 0x7B, 0x7A, 0x79, 0x80, 0x80, 0x82, 0x7D, 0x7A, 0x78, 0x7A, 0x79, 0x7B,
0x81, 0x7F, 0x77, 0x7A, 0x88, 0x80, 0x7F, 0x7F, 0x86, 0x82, 0x84, 0x89, 0x77, 0x80, 0x7F, 0x89,
0x89, 0x90, 0x8A, 0x76, 0x87, 0x7C, 0x82, 0x87, 0x87, 0x83, 0x86, 0x87, 0x7F, 0x89, 0x7F, 0x87,
0x8A, 0x8B, 0x86, 0x87, 0x83, 0x86, 0x86, 0x79, 0x8B, 0x8A, 0x88, 0x7D, 0x89, 0x8C, 0x7C, 0x88,
0x7B, 0x7C, 0x86, 0x81, 0x7E, 0x7F, 0x89, 0x82, 0x89, 0x86, 0x7D, 0x83, 0x85, 0x81, 0x7A, 0x88,
0x82, 0x85, 0x86, 0x7F, 0x7D, 0x84, 0x87, 0x81, 0x85, 0x7E, 0x82, 0x81, 0x82, 0x7A, 0x80, 0x81,
0x7C, 0x85, 0x87, 0x85, 0x81, 0x82, 0x7C, 0x7A, 0x77, 0x81, 0x83, 0x7D, 0x80, 0x7B, 0x77, 0x7C,
0x7B, 0x78, 0x7A, 0x7E, 0x79, 0x78, 0x7E, 0x77, 0x77, 0x76, 0x7F, 0x7A, 0x72, 0x7A, 0x73, 0x7F
};
void timer0_init(void)
{
TMOD = 0x02; /* Set timer 0 mode 2*/
TH0 = 0xFA;//这里计数值应为5.4,可以设定为5或者6
TL0 = 0xFA;
AUXR=0x80;//T0工作在1T模式
//T0x12=1;//T0工作在1T模式
ET0 = 1; /* Enable timer 0 interrupt */
TR0 = 1; /* Enable timer 0 */
}
void PCA_INIT(void)
{
CMOD=0x84; //PCA在空闲模式下停止。PCA时钟模式为计数器0溢出中断.禁止PCA计数器溢出中断。
CCON=0x00; //禁止PCA计数器工作,清除中断标志、计数器溢出标志。
CL =0x00; //清0计数器。
CH =0x00;
//---------------
//设置模块0为8位PWM输出模式。
CCAPM0 =0x42;//模式设定
PCA_PWM0=0x00;//清零EPC0H,EPC0L,若置为0x03,则一直输出为低电平CL一直小于{EPC0L,CCAP0L}
//----------------
EPCA_LVD=1; //开PCA中断
EA=1;//开总中断
CR=1; //将PCA计数器打开。
}
void delay125(void)
{
unsigned char i;
i=50;
while(i)
{
i--;
}
}
void main(void)
{
//CCAP0L = 0xc0;//Set the i nitial value same as CCAP0H
timer0_init();
PCA_INIT();
amount=0;
while(1)
{
if(amount>=128)amount=0;
CCAP0H = data1[amount];
amount++;
delay125();
}
}
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |