📄 spwm.c.bak
字号:
// 该程序利用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;//Q9 M=1时 512
float sintable[401]={16384,
16641,16898,17155,17412,17669,17925,18181,18437,18692,18947,19200,19454,19706,19958,20208,20458,20707,20954,21201,21446,
21691,21933,22175,22415,22653,22890,23126,23359,23591,23822,24050,24277,24501,24724,24944,25162,25379,25593,25804,26014,
26221,26425,26627,26827,27024,27218,27410,27599,27785,27969,28149,28327,28502,28673,28842,29008,29170,29329,29486,29638,
29788,29934,30077,30217,30353,30486,30615,30741,30863,30982,31097,31208,31316,31420,31520,31617,31710,31799,31884,31966,
32043,32117,32187,32253,32315,32373,32427,32477,32524,32566,32604,32638,32669,32695,32717,32735,32749,32759,32765,32767,
32765,32759,32749,32735,32717,32695,32669,32638,32604,32566,32524,32477,32427,32373,32315,32253,32187,32117,32043,31966,
31884,31799,31710,31617,31520,31420,31316,31208,31097,30982,30863,30741,30615,30486,30353,30217,30077,29934,29788,29638,
29486,29329,29170,29008,28842,28673,28502,28327,28149,27969,27785,27599,27410,27218,27024,26827,26627,26425,26221,26014,
25804,25593,25379,25162,24944,24724,24501,24277,24050,23822,23591,23359,23126,22890,22653,22415,22175,21933,21691,21446,
21201,20954,20707,20458,20208,19958,19706,19454,19200,18947,18692,18437,18181,17925,17669,17412,17155,16898,16641,16384,
16126,15869,15612,15355,15098,14842,14586,14330,14075,13820,13567,13313,13061,12809,12559,12309,12060,11813,11566,11321,
11076,10834,10592,10352,10114,9877 ,9641 ,9408 ,9176 ,8945 ,8717 ,8490 ,8266 ,8043 ,7823 ,7605 ,7388 ,7174 ,6963 ,6753 ,
6546 ,6342 ,6140 ,5940 ,5743 ,5549 ,5357 ,5168 ,4982 ,4798 ,4618 ,4440 ,4265 ,4094 ,3925 ,3759 ,3597 ,3438 ,3281 ,3129 ,
2979 ,2833 ,2690 ,2550 , 2414,2281 ,2152 ,2026 ,1904 ,1785 ,1670 ,1559 ,1451 ,1347 ,1247 ,1150 ,1057 ,968 ,883 ,801 ,
724 ,650 ,580 ,514 ,452 ,394 ,340 ,290 ,243 ,201 ,163 ,129 ,98 ,72 ,50 ,32 ,18 ,8 ,2 ,0 ,
2 ,8 ,18 ,32 ,50 ,72 ,98 ,129 ,163 ,201 ,243 ,290 ,340 ,394 ,452 ,514 ,580 ,650 ,724 ,801 ,
883 ,968 ,1057 ,1150 ,1247 ,1347 ,1451 ,1559 ,1670 ,1785 ,1904 ,2026 ,2152 ,2281 ,2414 ,2550 ,2690 ,2833 ,2979 ,3129 ,
3281 ,3438 ,3597 ,3759 ,3925 ,4094 ,4265 ,4440 ,4618 ,4798 ,4982 ,5168 ,5357 ,5549 ,5743 ,5940 ,6140 ,6342 ,6546 ,6753 ,
6963 ,7174 ,7388 ,7605 ,7823 ,8043 ,8266 ,8490 ,8717 ,8945 ,9176 ,9408 ,9641 ,9877 ,10114,10352,10592,10834,11076,11321,
11566,11813,12060,12309,12559,12809,13061,13313,13567,13820,14075,14330,14586,14842,15098,15355,15612,15869,16126,16384}
//1+sin的q14格式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 + -