#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输出就会停在一个值,并没有变化。如程序所示,请教哪位大侠给解释一下啊 ,谢谢了