?? spwmc.c
字號:
/* =====================================================================
* Copyright(C) 2008, All rigth reserved
*
* File Name: spwmc.c
*
* @Description: 在2407上實現脈沖寬度SPWM
*
* @author: L.J.H
*
* @version: Ver1.0
*
* @data 2004-08-01
*
===================================================================== */
#define pi 3.1415927
#include "math.h"
#include "2407c.h"
unsigned int gflag=0,width=0x0;
int sintab[256]=
{0,402,804,1206,1607,2009,2410,2811,3211,3611,4011,4409,4808
,5205,5602,5997,6392,6786,7179,7571,7961,8351,8739,9126,9512,9896
,10278,10659,11039,11416,11793,12167,12539,12910,13278,13645
,14010,14372,14732,15090,15446,15800,16151,16499,16846,17189,17530
,17869,18204,18537,18868,19195,19519,19841,20159,20475,20787,21097
,21403,21706,22005,22301,22594,22884,23170,23453,23732,24007,24279
,24547,24812,25073,25330,25583,25832,26077,26319,26557,26790,27020
,27245,27466,27684,27897,28106,28310,28511,28707,28898,29086,29269
,29447,29621,29791,29956,30117,30273,30425,30572,30714,30852,30985
,31114,31237,31357,31471,31581,31685,31785,31881,31971,32057,32138
,32214,32285,32351,32413,32469,32521,32568,32610,32647,32679,32706
,32728,32745,32758,32765,32767,32765,32758,32745,32728,32706,32679
,32647,32610,32568,32521,32469,32413,32351,32285,32214,32138,32057
,31971,31881,31785,31685,31581,31471,31357,31237,31114,30985,30852
,30714,30572,30425,30273,30117,29956,29791,29621,29447,29269,29086
,28898,28707,28511,28310,28106,27897,27684,27466,27245,27020,26790
,26557,26319,26077,25832,25583,25330,25073,24812,24547,24279,24007
,23732,23453,23170,22884,22594,22301,22005,21706,21403,21097,20787
,20475,20159,19841,19519,19195,18868,18537,18204,17869,17530,17189
,16846,16499,16151,15800,15446,15090,14732,14372,14010,13645,13278
,12910,12539,12167,11793,11416,11039,10659,9896,9512,9126,8739,8351
,7961,7571,7179,6786,6392,5997,5602,5205,4808,4409,4011,3611,3211
,2811,2410,2009,1607,1206,804,402,0
};
enable()
{ asm(" clrc intm");
}
disable()
{ asm(" setc intm");
}
nothing() {}
sysinit()
{
disable();
asm(" clrc cnf");
asm(" clrc ovm");
asm(" clrc sxm");
*IMR=0X02;
*IFR=0XFFFF;
*WDCR=0XE8;
*SCSR1=0x81FE;
}
pwminit()
{ *MCRC=*MCRC&0XF3FF;
*PFDATDIR=0XFF00;
*MCRA=*MCRA|0XFC0;
*EVAIFRA=0XFFFF;
*ACTRA=0X0; //all output high level
*DBTCONA=0X0; //enable all data time control,td=1us
*CMPR1=0X0;
*CMPR2=0X0;
*CMPR3=0X0;
*T1PR=240;
*COMCONA=0XA600;
*GPTCONA=0X41;
*EVAIMRA=0X80;
*T1CON=0X0b4E;
}
interrupt void gisr2()
{ int flag;
flag=*EVAIFRA&0X80;
if(flag)
{ gflag=1;
*CMPR1=width;
*CMPR2=width;
*CMPR3=width;
}
*EVAIFRA=0xFFFF;
enable();
}
main()
{ int i=0;
unsigned int fc=10000,fr=50,a,N=fc/fr,tmp=0,timpr=240,N2=N/2;
unsigned int x,t;
sysinit();
pwminit();
enable();
while(1)
{
if(gflag)
{
i<=(N2-1)?(t=41*i>>4):(t=41*(i-N2)>>4);
x=sintab[t];
width=x/400;
i<(N2-1)?(*ACTRA=0X444):(*ACTRA=0X111);
i==(N-1)?(i=0):i++;
gflag=0;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -