📄 spwmnew.c
字号:
#include "register.h"
#include "math.h"
long unsigned int CLK=40000000,CLK2=20000000;
unsigned int FREQ=50,N=360,T1PERTEMP;
int i=0,j=0,k=0,T=20;
signed int SIN1[3][120],m;
long msin;
unsigned int t1=0,t2=1,t3=2;
long unsigned int CMPRTEMP;
void system_init()
{
asm(" SETC INTM ");
asm(" SETC SXM ");
asm(" CLRC OVM ");
asm(" CLRC CNF ");
*SCSR1=0x818E;
*WDCR=0x6f;
*WDKEY=0x5555;
*WDKEY=0xaaaa;
*IMR=0x0002;
*IFR=0x0FFFF;
WSGR=0x000;
}
void SPWMINIT()
{
*MCRA=0X0FC0;
*ACTRA=0X0999;
*T1CNT=0X0000;
*T1CON=0X0800;
*T1PER=T1PERTEMP;
*GPTCONA=0X0000;
*EVAIMRA=0X0080;
*EVAIFRA=0X0FFFF;
*CMPR1=0;
*CMPR2=0;
*CMPR3=0;
*COMCONA=0X8200;
*T1CON=0x0840;
asm(" CLRC INTM ");
}
void caculate()
{
T1PERTEMP=CLK2/(FREQ*N);
for(i=0;i<3;i++)
for(j=0;j<(N/3);j++)
{ SIN1[i][j]=16384*(sin(6.2831852*k/N));
k++;
}
m=16384;
// m=(FREQ/T)<<14;
i=0;j=0;
}
void interrupt GISR2()
{
if((*EVAIFRA&0x0080)==0x0080)
{ msin=m*SIN1[t1][j];
CMPRTEMP=268435456+msin;
CMPRTEMP=(CMPRTEMP>>15)*T1PERTEMP>>14;
*CMPR1=CMPRTEMP;
msin=m*SIN1[t2][j];
CMPRTEMP=268435456+msin;
CMPRTEMP=(CMPRTEMP>>15)*T1PERTEMP>>14;
*CMPR2=CMPRTEMP;
msin=m*SIN1[t3][j];
CMPRTEMP=268435456+msin;
CMPRTEMP=(CMPRTEMP>>15)*T1PERTEMP>>14;
*CMPR3=CMPRTEMP;
j++;
if(j==(N/3))
{ t1=t2;
t2=t3;
t3=3-t1-t2;
j=0;
}
}
*EVAIFRA=0x0080;
asm(" CLRC INTM ");
}
void interrupt nothing()
{ asm(" CLRC INTM ");
}
main()
{ system_init();
caculate();
SPWMINIT();
while(1)
{;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -