最近在使用stc12c5410ad的PWM模块功能,输出固定频率可调占空比的PWM波,下面是我写的程序,产生25%和50%占空比的PWM波:
/******************************************************************************
功能:固定频率39kHz的可调脉宽的PWM
系统时钟 :20MHz
********************************************************************************/
#include <stc12c5410ad.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0xc0,0x80}; //占空比 分别为 25%,50%
uchar i;
void main()
{
CCON=0; //初始化PCA寄存器
CL=0;
CH=0;
CMOD=0x02; //PCA时钟源来自系统时钟 f/2
CCAPM0=0x42; //PCA工作在PWM模式
CR=1; //开启PCA timer
while(1)
{
for(i=0;i<2;i++)
{
CCAP0H=CCAP0L=table
;
while(CL!=0xff);
}
}
}
我想得到波形输出顺序:25%,50%,25%,50%,25%,50%……循环下去;(百分比为PWM的占空比,代表一个波形,波形就不画了)
可是我用示波器观察输出结果,波形输出顺序:25%,50%,25%,50%,50%,50%,25%,50%,25%,50%,50%,50%,25%……。多出了两个占空比50%的脉冲信号,请高手帮我看看程序是不是有什么问题,感觉问题出现在占空比的赋值上,但又不知道具体是什么。
[
本帖最后由 coney 于 2010-12-21 18:13 编辑 ]
此帖出自
小平头技术问答
for(i=0;i<2;i++)
{
CCAP0H=CCAP0L=table;
while(CL!=0xff);
}
这句话能跑就已经很让我惊奇了。你的i是做啥么用呢?table地址在哪?哎呀,我真是。。。
[ 本帖最后由 leang521 于 2010-12-22 13:16 编辑 ]一周热门 更多>