stc12c5410ad的PWM波形输出

2019-03-24 20:07发布

最近在使用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 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
coney
1楼-- · 2019-03-24 23:55
 精彩回答 2  元偷偷看……
njlianjian
2楼-- · 2019-03-25 00:53
应该是赋值的问题,来不及看了。回南京给你看看。
leang521
3楼-- · 2019-03-25 02:25

  for(i=0;i<2;i++)
  {
   CCAP0H=CCAP0L=table;
   while(CL!=0xff);
  }

这句话能跑就已经很让我惊奇了。你的i是做啥么用呢?table地址在哪?哎呀,我真是。。。

[ 本帖最后由 leang521 于 2010-12-22 13:16 编辑 ]
x-lichking
4楼-- · 2019-03-25 05:37
少了个 楼上别较真。

我在另外一个论坛上也看到你的这个帖子。你最好还是加个LED看看 STC是不是自己复位了。我以前遇到过STC自己复位循环的情况。

程序这么简单,应该不是程序本身的事
coney
5楼-- · 2019-03-25 06:27
手写错误,不好意思,太粗心了。应该是CCAP0H=CCAP0L=table。这个问题已经解决了,还是很感谢你指出错误。
leang521
6楼-- · 2019-03-25 11:10
据统计大部分BUG都是因为粗心,这么简单的代码你软件跟踪下就很容易发现问题。还是太偷懒了

一周热门 更多>