首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

STC单片机 pwm问题

STC单片机 pwm问题

我用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();
}
}

返回列表