STC12C5616AD输出PWM不能连续输出

2019-03-24 19:30发布

#include <STC12C5620AD.h> #define TOP 1000    //范围0-65535
sbit PWM=P3^4;
sbit EPCAI=IE^6;
unsigned int PER; //高低电平缓存  bit i=0; void PcaInit()
{
 CCON=0;
 CMOD=0x01;  CL=0;
 CH=0;
 CCAP0L=TOP;
 CCAP0H=TOP>>8;  CCAPM0=0x49;
 EPCAI=1;
 EA=1;
}
void pwm_da(unsigned long ang)
         
{              
 PER=(ang*1000)/270;
  CR=1;    //
// while(1);
}
void main()
{
 unsigned int va =0;
 PcaInit();
 while(1)
 {
    pwm_da(va);
   if(va >= 270)
   {
    va=0;
   }
   else
   {
    va = va + 1;
   }
 }
} void PCA_isr() interrupt 7 using 1
{
 CCF0=0;
 i=~i;
 if(!i)      //判断标志位,如果为1
 {    
     PWM=0;
  CL=0;
  CH=0;
  CCAP0L=PER;
  CCAP0H=PER>>8;  }
 else
 {   
  PWM=1;
  CL=0;
  CH=0;
  CCAP0L=TOP-PER;
  CCAP0H=(TOP-PER)>>8;
 } }   用PCA的软件定时器仿PWM输出,然后经过DA处理输出0~5V,但是pwm_da(va)中的参数如果是常数则没问题,但是用可变变量作参数,DA输出就会停在一个值,并没有变化。如程序所示,请教哪位大侠给解释一下啊 ,谢谢了

  此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
jishuaihu
1楼-- · 2019-03-24 23:17
变量赋值了吗?数据类型是否一致!
nn12
2楼-- · 2019-03-25 02:25
赋值了,现在问题解决了,在va = va + 1;后加一个延时就可以了,va加数的速度太快了可能。

一周热门 更多>