⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 func.c

📁 CCS 启动、停止按键控制
💻 C
字号:
#include    "f2407_c.h" 
#include 	"math.h"
#include	"var.h"
unsigned int period;
unsigned int duty;
unsigned int index_pwm=0;
unsigned int a,b,c,aaa=0;
unsigned int xs=1;							
#define PI 		3.1415926
extern float sin_table[99];
unsigned int adc_res=100;
unsigned int I_result[I_LOOP/I_DIV];
unsigned int i=0;
float fv_cn = 0;
unsigned int key_flag;
#define LED port30                           
volatile ioport unsigned int port30; /*LED*/

/****************************** MAIN ROUTINE ***************************/
void ini(void)
{
    *SCSR1 = 0x00FD;
    *SCSR2 = (*SCSR2 | 0x000B) & 0x000F;
    *WDCR  = 0x00E8;
    WSGR = 0x0040;
    *MCRA = 0x0fc0;                     /* group A pins */
    *MCRB = 0xFE00;                     /* group B pins */
    *MCRC = 0x0000;                     /* group C pins */
    *PFDATDIR = *PFDATDIR | 0x2000;
    *T1CON = 0x0000;                    /* disable timer 1 */
    *T2CON = 0x0000;                    /* disable timer 2 */
    *GPTCONA = 0x0080;                  /* configure GPTCONA */
    *T1CNT = 0x0000;                    /* clear timer counter */
    *T1PR = pwm_half_per;               /* set timer period */
    *DBTCONA = 0x0000;                  /* deadband units off */
    *ACTRA = 0x0666;                    /* PWM1 pin set active high */     
    *COMCONA = 0x8200;                 /* configure COMCON register */
    *T1CON = 0x0840;                   /* configure T1CON register */
    *T2CNT = 0x0000;                    /* clear timer counter */
    *T2PR = timer2_per;                 /* set timer period */
    *T2CON = 0xD740;                    /* configure T2CON register */
	fv_cn = (312500.0/(num_f_d*U_DC*F_V_radio));
    *IMR = 0x0000;                      /* clear the IMR register */
    *IFR = 0x003F;                      /* clear any pending core interrupts */
    *IMR = 0x0004;                      /* enable desired core interrupts (in1,in3)*/
    *EVAIFRA = 0xFFFF;                  /* clear all EVA group A interrupts */
    *EVAIFRB = 0xFFFF;                  /* clear all EVA group B interrupts */
    *EVAIFRC = 0xFFFF;                  /* clear all EVA group C interrupts */
    *EVAIMRA = 0x0000;                  /* enable desired EVA group A interrupts */
    *EVAIMRC = 0x0000;                  /* enable desired EVA group C interrupts */

    *EVBIFRA = 0xFFFF;                  /* clear all EVB group A interrupts */
    *EVBIFRB = 0xFFFF;                  /* clear all EVB group B interrupts */
    *EVBIFRC = 0xFFFF;                  /* clear all EVB group C interrupts */
    *EVBIMRA = 0x0000;                  /* enable desired EVB group A interrupts */
    *EVBIMRB = 0x0000;                  /* enable desired EVB group B interrupts */
    *EVBIMRC = 0x0000;                  /* enable desired EVB group C interrupts */
}

void init_adc(void)
{
	*ADCTRL1=0x00;
	*ADCTRL2=0x0504;
	*MAX_CONV=0x07;
	*CHSELSEQ1=0x3210;
	*CHSELSEQ2=0x7654;
}                                      

void adc_soc(void)
{
	*T4CON=*T4CON|0x40;
}

void interrupt adcint(void)
{
	asm("	clrc SXM");
	if(!(i%I_DIV))
	{
		adc_res=*RESULT5>>6; 
		I_result[i/I_DIV]=*RESULT0>>6;
		if(adc_res>0x3fe)adc_res=0x3fe;
		if(adc_res<0x01)adc_res=0x01;
		*ADCTRL2|=0x4200;
		*T2PR=1.76*adc_res+190;  /* +180为控制最高速 */
		b_time=fv_cn/((float)*T2PR)-0.15;
		if(b_time<0.1)b_time=0.05;
	}
	
	i++;
	if(i>=I_LOOP)
		i = 0;
	asm(" CLRC INTM");
}

interrupt void timer2_isr(void)
{

     *EVAIFRB = *EVAIFRB & 0x0001;      /* clear T2PINT flag */ 
     a=*CMPR1=xs*0.1*b_time*pwm_half_per*(0.5+0.5*sin_table[index_pwm%num_f_d]);
	 b=*CMPR2=xs*0.1*b_time*pwm_half_per*(0.5+0.5*sin_table[(index_pwm+((2*num_f_d)/3))%num_f_d]);
	 c=*CMPR3=xs*0.1*b_time*pwm_half_per*(0.5+0.5*sin_table[(index_pwm+((num_f_d)/3))%num_f_d]);
     index_pwm++;
     if(index_pwm>=num_f_d)index_pwm=0;
} 

void key(void)
{
     key_flag = *PEDATDIR & 0x007E;  
     switch(key_flag)
         {
           case 2:                     /******启动******/ 
                  LED=0x00FE;
                  *PFDATDIR = 0xFFFB;
				  xs=0;
                  *IMR |= 0x0001;      /* 开中断*/
				  *EVAIMRB = 0x0001;   /* 开 EVA group B interrupts */
                  for(xs=5;xs<10;xs++) /* startyan shi */
				     {
				       delay5s();delay5s();delay5s();delay5s();
					 }
                  break;

           case 4:                    /******停止******/  
                  LED=0x00FD;
                  *PFDATDIR = 0xFFFB;
                  a=*CMPR1=0;
	              b=*CMPR2=0;
	              c=*CMPR3=0;
                  *IMR &= 0xFFFE;     /*关中断*/
				  *EVAIMRB = 0x0000;  /* 关 EVA group B interrupts */
                  break;

           case 8:                    /******SPWM******/ 
                  LED=0x00FB;break;

           case 16:                   /*****SVPWM*****/ 
                  LED=0x00F7;break;

           case 32:                   /******正转******/ 
                  LED=0x00EF;break;

           case 64:                   /******反转******/ 
                  LED=0x00DF;break;
	     }
     
 
}
		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -