📄 spwm.c
字号:
#include "f2407.h"
//#include "sin.h"
int i;
#define uint unsigned long int
uint t1,t2,t3,x1,x2,x3,X,Y,Z;
signed int w,h,L,M=64;
const int sin_tab[]={
0, 8, 17, 26, 35, 44, 53, 62, 71, 80,
88, 97, 106, 115, 123, 132, 141, 149, 158, 166,
175, 183, 191, 200, 208, 216, 224, 232, 240, 248,
255, 263, 271, 278, 286, 293, 300, 308, 315, 322,
329, 335, 342, 349, 355, 362, 368, 374, 380, 386,
392, 397, 403, 408, 414, 419, 424, 429, 434, 438,
443, 447, 452, 456, 460, 464, 467, 471, 474, 477,
481, 484, 486, 489, 492, 494, 496, 498, 500, 502,
504, 505, 507, 508, 509, 510, 510, 511, 512, 512,
512, 512, 512, 511, 510, 510, 509, 508, 507, 505,
504, 502, 500, 498, 496, 494, 492, 489, 486, 484,
481, 477, 474, 471, 467, 464, 460, 456, 452, 447,
443, 438, 434, 429, 424, 419, 414, 408, 403, 397,
392, 386, 380, 374, 368, 362, 355, 349, 342, 335,
329, 322, 315, 308, 300, 293, 286, 278, 271, 263,
256, 248, 240, 232, 224, 216, 208, 200, 191, 183,
175, 166, 158, 149, 141, 132, 123, 115, 106, 97,
88, 80, 71, 62, 53, 44, 35, 26, 17, 8,
0, -8, -17, -26, -35, -44, -53, -62, -71, -80,
-88, -97, -106, -115, -123, -132, -141, -149, -158, -166,
-175, -183, -191, -200, -208, -216, -224, -232, -240, -248,
-255, -263, -271, -278, -286, -293, -300, -308, -315, -322,
-329, -335, -342, -349, -355, -362, -368, -374, -380, -386,
-392, -397, -403, -408, -414, -419, -424, -429, -434, -438,
-443, -447, -452, -456, -460, -464, -467, -471, -474, -477,
-481, -484, -486, -489, -492, -494, -496, -498, -500, -502,
-504, -505, -507, -508, -509, -510, -510, -511, -512, -512,
-512, -512, -512, -511, -510, -510, -509, -508, -507, -505,
-504, -502, -500, -498, -496, -494, -492, -489, -486, -484,
-481, -477, -474, -471, -467, -464, -460, -456, -452, -447,
-443, -438, -434, -429, -424, -419, -414, -408, -403, -397,
-392, -386, -380, -374, -368, -362, -355, -349, -342, -335,
-329, -322, -315, -308, -300, -293, -286, -278, -271, -263,
-256, -248, -240, -232, -224, -216, -208, -200, -191, -183,
-175, -166, -158, -149, -141, -132, -123, -115, -106, -97,
-88, -80, -71, -62, -53, -44, -35, -26, -17, -8};
int initial()
{
asm(" setc SXM");//符号扩展位有效
asm(" clrc OVM");//累加器结果正常益出
asm(" clrc CNF");//B0=RAM
*SCSR1=0X81FE; //系统
*WDCR=0X0E8; //DOG
*IMR=0X0000; //禁止所有中断
*IFR=0X0FFFF; //清除全部中断标志
WSGR=0X0000; //禁止所有的等待状态
i=0;
}
int pwminitial()
{
*MCRC=*MCRC|0X007F;//设置 IOE1-6为基本方式
*GPTCONB=0X0040;//0000 0000 0100 0000使用所有通用定时器输出
*T3CON=0X084E; //0000 1000 0100 1110 连续增减记数 不分频 内部时钟
*EVBIMRA=0X0200;//0000 0010 0000 0000
*COMCONB=0X8200;//1000 0010 0000 0000 比较控制寄存器
*ACTRB=0X0999; //0000 0110 0110 1001
*DBTCONB=0X0FFE8; //死区设置
//1111 1111 1110 0100 m=16 p=001二分频 0.025*16*
*T3CNT=0X00;
*CMPR4=0X1000; //比较寄存器初始设置
*CMPR5=0X1000;
*CMPR6=0X1000;
*T3PR=1111; //0110 0000 0000 0000 周期寄存器设置10ms=T3PR*0.025ns
//T3PR=400
}
void interrupt nothing()
{
return;
}
void interrupt T3INT()
{
if ( w>360 ) w= 0 ;
{
if (sin_tab[w]<0)
{t1=M*abs(sin_tab[w]);
t1>>=6; //M值定标
x1=-t1;
}
else
{t1=M*(sin_tab[w]);
t1>>=6; //M值定标
x1=t1;
}
t1 = (512+x1) ;
X = (*T3PR)*t1;
X >>=10; //512定标移9bit,T3PR/2
*CMPR4=X;
h= w + 120 ;
if (h> 360 ) h = h - 360 ;
{
if (sin_tab[h]<0)
{t2=M*abs(sin_tab[h]);
t2>>=6;
x2=-t2;
}
else
{t2=M*(sin_tab[h]);
t2>>=6;
x2=t2;
}
t2 =(512+x2);
Y = *T3PR*(unsigned long )t2;
Y >>= 10;
*CMPR5=Y;
}
L= w + 240 ;
if (L> 360 ) L = L - 360 ;
{
if (sin_tab[L]<0)
{t3=M*abs(sin_tab[L]);
t3>>=6;
x3=-t3;
}
else
{t3=M*(sin_tab[L]);
t3>>=6;
x3=t3;
}
t3 =(512+x3);
Z = *T3PR*(unsigned long )t3;
Z >>=10;
*CMPR6=Z;
}
}
w=w+1;
*EVBIFRA=*EVBIFRA&0X0200;//清除定时器3周期中断标志,否则以后中断被忽略
asm(" clrc INTM");//enable globle interrupt
return;
}
main()
{
asm(" setc INTM");//关总中断
initial();
pwminitial();
*IMR=0XFFFF;
*T3CON=*T3CON|0X0040;//起用定时器3
asm(" clrc INTM");//关总中断
while(1)
{
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -