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

📄 adc.c

📁 是用于开关磁阻电机的位置伺服控制的C语言源代码,基于CCS的开发环境.希望可以对你有所帮助.
💻 C
字号:
#include "C240.h"
unsigned int sign_state=0; 
unsigned int current_value; 
unsigned int current_dotbit; 
/* define Input/Output variable value */
ioport unsigned int port0,port1,port2,port3,port4; 
 
/* display data on LCD */
void display(display_value,dot_bit)
unsigned int display_value;       	   /* the value want to be displayed */
int dot_bit;                      	   /* dot bit */
{
 unsigned int bit_value[4];
 int x; 
 port1=0;
 if (display_value>=2000)
 	port1=port1|0x40; 
 bit_value[3]=display_value%10;        /* the lowest bit data */
 bit_value[2]=(display_value/10)%10;
 bit_value[1]=(display_value/100)%10; 
 bit_value[0]=display_value/1000;      /* the highest bit data */
 if (bit_value[0]==1)
 	port1=port1|0x02; 
 if (sign_state)
 	port1=port1|0x01;
 x=dot_bit;
 if (x!=4) 
 	port1=port1|(1<<(x+1));               /* show radix point */
 port4=bit_value[3];
 port3=bit_value[2]; 
 port2=bit_value[1];

   
 if ((dot_bit==3)&&(bit_value[1]==0)&&(bit_value[0]==0))
 	port2=0x0f;
                  
                  
}

/*********************************************/                  
void ADC_ISR() 
{
 ADCTRL1=0xcb04;
 ADCTRL2=0x0404;
 /*unsigned int x1,x2; 
 long x3;
 ADCTRL1=0x2304;
 ADCTRL2=0x0004; 
 ADCTRL1=0x3304;
 x1=ADCFIFO1; 
 x2=x1>>6;  
 x3=(x2*500)>>10;
 current_value=(unsigned int)x3;
 current_dotbit=2;   
 display(666,2);    */
}

/*********************************************/                  
void dsp_setup() 
{
 unsigned int temp;
 /*********************************************/
 /* Disable watchdog timer */
 /*********************************************/
 temp = WDCR;
 temp = temp|0x68;
 WDCR = temp;
 /*********************************************/
 /* initialize PLL module (20 MHz XTAL1) */
 /*********************************************/
 CKCR1 = 0x61;      	/* crystal=20MHz CPUCLK = 40MHz */
                    	/* and 2x PLL mult ratio */
 CKCR0 = 0xc3;      	/* low–power mode 0, */
                    	/* ACLK enabled, */
                    	/* PLL enabled, */
                    	/* SYSCLK=CPUCLK/2 */
 SYSCR = 0x40c0;
}
 

/* Initiate the event management register */
void eventmgr_init()
{

 GPTCON=0x0442;  
 /* Initialize T1 */
 T1PER=0x07d0;     		  /* Period is 200us */ 
 T1CMP=0x03e8;
 T1CON=0x9042;
 T2PER=0x00c8;     		  /* Period is 20us */
 T2CON=0x9040;  
 /* Setup shared pins */
 OCRA = 0xf800;     	  /* pins IOPB0–IOPB3 & IOPA0–IOPA2 to I/O pins */
 OCRB = 0x00f1;      	  /* pins are: ADSOC, XF, /BIO, CAP1–CAP4 */ 
 PADATDIR = 0x0700; 	  /* outputs IOPA0–IOPA2, set low */
 PBDATDIR = 0x0707; 	  /* outputs IOPB0–IOPB2, set high */
 
}


/* initiating parameter and register */
void init_SRM()
{

 ADCTRL1=0xcb04;
 ADCTRL2=0x0404; 
}

/*******************************************************************/
void disable_interrupts()
{
 asm(" SETC INTM");
}
 
/************************************************************************/
void enable_interrupts() 
{
 IFR  = 0xffff;       /* Clear pending interrupts */
 IFRA = 0xffff;
 IFRB = 0xffff;
 IFRC = 0xffff;
 IMR  = 0x0024;       /* Enable CPU Interrupts:INT 1,2,3,4,6 */
 IMRA = 0x0080;       /* Enable timer 1 period and PDPINT interrupts */
 IMRB = 0x0001;       /* Enable timer 3 period interrupts */
 IMRC = 0x0000;       /* Enable CAP1–CAP3 interrupts*/
 asm(" CLRC INTM");   /* Global interrupt enable */
}
  
void c_int2()
{
 IFR=0x0002;                       /* clear CPU interrupt flag */
 IFRA=0xff;                  /* clear interrupt flag */
/* display(222,2);  */
}  
  
 /* ISR for GPT2 interrupt */
void c_int3()
{ 
 IFR=0x0004;                         /* clear CPU interrupt flag */
 IFRB=0xff; 
 display(333,2);   
 
}

/* ADC int */
void c_int6() 
{
 unsigned int sysint_vector;
 IFR=0x0020;             			   /* Clear interrupt flags */
 sysint_vector=SYSIVR;   			   /* read interrupt vector address offset */
 if (sysint_vector=0x0004)             /* if ADC interrupt */
 	ADC_ISR(); 
 }

/* ***************************************************************** */
/* The main program  
/* ***************************************************************** */

main()
{
 unsigned int x1,x2; 
 long x3;
 unsigned int velocity;
 disable_interrupts();
 dsp_setup(); 
 init_SRM();
 eventmgr_init(); 
 enable_interrupts();  
 for(;;)
	{
	  x1=ADCTRL1;
	/* if ((x1 & 0x80)==0)
		{ x1=ADCFIFO1; 
 		  x2=x1>>6;  
 		  x3=(((long)x2)*500)>>10;
   		  current_value=(unsigned int)x3;
 		  current_dotbit=2; 
  		  display(current_value,current_dotbit);		
	    }    
	 */ 
	}
	           
}

⌨️ 快捷键说明

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