📄 spwm.c
字号:
// 该程序利用EVA模块的PWM1--PWM6引脚产生不同占空比的方波
#include "C2407.h"
#include "stdio.h"
#include "float.h"
#include "math.h"
#define Tc_half 1000
#define Tonmin 120
#define Tonmax 1880
int k=0;
int M=112;//Q9 M=1时 128
float sintable[401]={0,0.016,0.031,0.047,0.063,0.078,0.094,0.110,0.125,0.141,0.156,
0.172,0.187,0.203,0.218,0.233,0.249,0.264,0.279,0.294,0.309,0.324,0.339,0.353,
0.368,0.383,0.397,0.412,0.426,0.440,0.454,0.468,0.482,0.495,0.509,0.522,0.536,
0.549,0.562,0.575,0.588,0.600,0.613,0.625,0.637,0.649,0.661,0.673,0.685,0.696,
0.707,0.718,0.729,0.740,0.750,0.760,0.771,0.780,0.790,0.800,0.809,0.818,0.827,
0.836,0.844,0.853,0.861,0.869,0.876,0.884,0.891,0.898,0.905,0.911,0.918,0.924,
0.930,0.935,0.941,0.946,0.951,0.956,0.960,0.965,0.969,0.972,0.976,0.979,0.982,
0.985,0.988,0.990,0.992,0.994,0.996,0.997,0.998,0.999,1.00,1.00,1.000,1.00,1.00,
0.999,0.998,0.997,0.996,0.994,0.992,0.990,0.988,0.985,0.982,0.979,0.976,0.972,
0.969,0.965,0.960,0.956,0.951,0.946,0.941,0.935,0.930,0.924,0.918,0.911,0.905,
0.898,0.891,0.884,0.876,0.869,0.861,0.853,0.844,0.836,0.827,0.818,0.809,0.800,
0.790,0.780,0.771,0.760,0.750,0.740,0.729,0.718,0.707,0.696,0.685,0.673,0.661,
0.649,0.637,0.625,0.613,0.600,0.588,0.575,0.562,0.549,0.536,0.522,0.509,0.495,
0.482,0.468,0.454,0.440,0.426,0.412,0.397,0.383,0.368,0.353,0.339,0.324,0.309,
0.294,0.279,0.264,0.249,0.233,0.218,0.203,0.187,0.172,0.156,0.141,0.125,0.110,
0.094,0.078,0.063,0.047,0.031,0.016,0.000,-0.016,-0.031,-0.047,-0.063,-0.078,
-0.094,-0.110,-0.125,-0.141,-0.156,-0.172,-0.187,-0.203,-0.218,-0.233,-0.249,
-0.264,-0.279,-0.294,-0.309,-0.324,-0.339,-0.353,-0.368,-0.383,-0.397,-0.412,
-0.426,-0.440,-0.454,-0.468,-0.482,-0.495,-0.509,-0.522,-0.536,-0.549,-0.562,
-0.575,-0.588,-0.600,-0.613,-0.625,-0.637,-0.649,-0.661,-0.673,-0.685,-0.696,
-0.707,-0.718,-0.729,-0.740,-0.750,-0.760,-0.771,-0.780,-0.790,-0.800,-0.809,
-0.818,-0.827,-0.836,-0.844,-0.853,-0.861,-0.869,-0.876,-0.884,-0.891,-0.898,
-0.905,-0.911,-0.918,-0.924,-0.930,-0.935,-0.941,-0.946,-0.951,-0.956,-0.960,
-0.965,-0.969,-0.972,-0.976,-0.979,-0.982,-0.985,-0.988,-0.990,-0.992,-0.994,
-0.996,-0.997,-0.998,-0.999,-1.00,-1.00,-1.000,-1.00,-1.00,-0.999,-0.998,-0.997,
-0.996,-0.994,-0.992,-0.990,-0.988,-0.985,-0.982,-0.979,-0.976,-0.972,-0.969,
-0.965,-0.960,-0.956,-0.951,-0.946,-0.941,-0.935,-0.930,-0.924,-0.918,-0.911,
-0.905,-0.898,-0.891,-0.884,-0.876,-0.869,-0.861,-0.853,-0.844,-0.836,-0.827,
-0.818,-0.809,-0.800,-0.790,-0.780,-0.771,-0.760,-0.750,-0.740,-0.729,-0.718,
-0.707,-0.696,-0.685,-0.673,-0.661,-0.649,-0.637,-0.625,-0.613,-0.600,-0.588,
-0.575,-0.562,-0.549,-0.536,-0.522,-0.509,-0.495,-0.482,-0.468,-0.454,-0.440,
-0.426,-0.412,-0.397,-0.383,-0.368,-0.353,-0.339,-0.324,-0.309,-0.294,-0.279,
-0.264,-0.249,-0.233,-0.218,-0.203,-0.187,-0.172,-0.156,-0.141,-0.125,-0.110,
-0.094,-0.078,-0.063,-0.047,-0.031,-0.016,-0.000};
//1+sin的q13格式sin表
int initial()
{
DISABLE_INTS();
asm(" setc SXM"); // 符号位扩展有效
asm(" clrc OVM"); // 累加器中结果正常溢出
asm(" clrc CNF"); // B0被配置为数据存储空间
*SCSR1=0x0304; // CLKIN=20M,CLKOUT=2*CLKIN=40M
*WDCR=0x068; // 不使能看门狗,因为SCSR2中的WDOVERRIDE
// 即WD保护位复位后的缺省值为1,故可以用
// 软件禁止看门狗
*IMR=0x02; // 禁止所有中断
*IFR=0x0ffFF; // 清除全部中断标志,"写1清0"
// WSGR=0X0000; // 禁止所有的等待状态
}
// 定时器1的初始化子程序
int timer1int()
{
*EVAIMRA=*EVAIMRA|0X0200; // 允许定时器1的下溢中断
*EVAIFRA=*EVAIFRA&0X0200; // 清除定时器1 下溢中断标志
*EVAIMRB=0X0000 ; // 屏蔽所有事件管理器中断
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -