📄 c-pfc.txt
字号:
#include "LF2407.h"
#include "LF2407Avector.h"
#include "float.h"
#include "math.h"
float ualfa[200],ubeta[200];
int sector[200];
#define PI2 2*2.1415926
#define DETA PI2/200
#define KP 0.7
//屏蔽中断子程序
void inlne disable()
{
asm("setc INTM");
}
//系统初始化子程序
void initial()
{
*IFR=0xFFFF;
*IMR=0X0;
*SCSR1=0X81FE;
*WDCR=0XE8;
*T3PER=TP;
*T3CON=0X0802;
*ACTRB=0X666;
*COMCONB=0X9200;
*EVBIMRA=0X00;
*T3CNT=0X00;
*EVBIFRA=0X0FFFF;
*MCRC=*MCRC|0X7E;
WSGR=0X0000;
}
//根据Uout的标幺值kp计算ualfa,ubeta子程序
void calu()
{
int i;
for(i=0;i<200;i++)
{
ualfa[i]=KP*cos(i*DETA);
ubeta[i]=KP*sin(i*DETA);
}
}
//各点的扇区确定子程序
void SECTOR()
{
int i,a,b,c;
float vref1,vref2,vref3;
for(i=0;i<200;i++)
{
vref1=ubeta[i];
vref2=(-ubeta[i]+ualfa[i]*1.732051)/2;
vref3=(-ubeta[i]-ualfa[i]*1.732051)/2;
if(vref1>0) a=1;
else a=0;
if(vref2>0) b=1;
else b=0;
if(vref3>0) c=1;
else c=0;
a=4*c+2*b+a;
switch(a){
case1:sector[i]=1;break;
case2:sector[i]=5;break;
case3:sector[i]=0;break;
case4:sector[i]=3;break;
case5:sector[i]=2;break;
case6:sector[i]=4;break;
default;break;
}
}
}
//输入和输出电压的平均值计算程序
void average()
{
M=M+1;
}
//数字pi子程序
void pi()
{
//主程序
main()
{
int anticlk[6]={0x1666,0x3666,0x2666,0x6666,0x4666,0x5666};
int i,k=0,cmp1,cmp2;
float x,y,z;
disable();
initial();
calu();
SECTOR();
while(1) {
for(1=0;i<200;i++) {
*ACTRB=anticlk[sector[i]];
x=ubeta[i];
y=(1.732051*ualfa[i]+ubeta[i]/2;
z=(-1.732051*ualfa[i]+ubeta[i]/2;
switch(sector[i])
case0:cmp1=(int)(-z*TP),cmp2=(int)(x*TP);break;
case1:cmp1=(int)(y*TP),cmp2=(int)(z*TP);break;
case2:cmp1=(int)(x*TP),cmp2=(int)(-y*TP);break;
case3:cmp1=(int)(z*TP),cmp2=(int)(-x*TP);break;
case4:cmp1=(int)(-y*TP),cmp2=(int)(-z*TP);break;
case5:cmp1=(int)(-x*TP),cmp2=(int)(y*TP);break;
deafault;break;
}
*CMPR4=cmp1;
*CMP5=cmp1+cmp2;
if((i+k)==0)*T3CON=*T3CON|0X040;
while(1) {
k=*EVBIFRA&0X0200;
if(k==0x200)break;
}
}
}
}
//如果由于扰引起中断,则执行次直接返回程序
void interrupt nothing()
{
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -