求助高手赐教,STC12C5616单片机在做SVPWM时PCA不听使唤不能够更给PWM的占空比
#include <stc12c56.h>#include <pca.h>
typedefunsigned charBYTE ;
#include "SVPWM.h"
bit flag;
BYTE i;
void main()
{ P2M0=0x00;
P2M1=0x01;
P3M0=P2M0|0x00;//P20为PWM2输出强推挽输出信号要取反
P3M1=P2M1|0x80;//P37为PWM0输出强推挽输出
PCA_Init();
EPCA_LVD=1; //允许中断
EA=1;
CR=1; //启动PCA计数器
while(1){ ;
}
}
voidPca_LvdPro(void) interrupt 7
{if(i>=30) {i=0; flag=~flag;}
if(flag){CCAP0H=4*PWM;CCAP2H=0;}//
else { CCAP2H=4*PWM;CCAP0H=0;}//
i++;
CCF1=0;
}
以下是PCA头文件
void PCA_Init(void)
{
CCON=0x00;//禁止PCA计数器工作,清除中断标志、计数器溢出标志
CH=0;
CL=0;//PCA计数器
CMOD |=PCACLK1;//系统时钟
// PCA模块0 PWM模式
CCAP0L=0x80;
CCAP0H=0x80; //PWM和比较寄存器值
PCA_PWM0=0x00;
CCAPM0 |=0x42;//8位PWM输出;
// PCA模块2 PWM模式
CCAP2L=0x80;
CCAP2H=0x80; //PWM和比较寄存器值
PCA_PWM2=0x00;
CCAPM2 |=0x42;//8位PWM输出;
// PCA模块3 PWM模式
// CCAP3L=0x80;
// CCAP3H=0x80; //PWM和比较寄存器值
// PCA_PWM3=0x00;
// CCAPM3 |=0x42;//8位PWM输出;
// PCA模块1 软件定时模式
CCAP1L=0x09;
CCAP1H=0x00;
CCAPM1 |=0x49;//产生中断
}
以下是SVPWM数据
BYTE code PWM=
{2,5,8,11,14,17,20,22,24,26,28,29,30,31,32,
32,31,30,29,28,26,24,22,20,17,14,11,8,5,2};
页:
[1]