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

📄 sddf.c

📁 是用于开关磁阻电机的位置伺服控制的C语言源代码,基于CCS的开发环境.希望可以对你有所帮助.
💻 C
字号:
#include "C240.h" 
unsigned int display_times;  
ioport unsigned int port0,port1,port2,port3,port4,port5;
/*********************************************/                  
void dsp_setup() 
{
 unsigned int temp;
 /*********************************************/
 /* Disable watchdog timer */
 /*********************************************/
 temp = WDCR;
 temp = temp|0x68;
 WDCR = temp;
 /*********************************************/
 /* initialize PLL module (20 MHz XTAL1) */
 /*********************************************/
 CKCR1 = 0x60;      	             /* crystal=20MHz CPUCLK = 20MHz */
                    	             /* and 1x PLL mult ratio */
 CKCR0 = 0xc3;      	             /* low–power mode 0, */
                    	             /* ACLK enabled, */
                                 	 /* PLL enabled, */
                    	             /* SYSCLK=CPUCLK/2 */
 SYSCR = 0x40c0;  
 
 XINT1CR=0x0007;
}
 

/* Initiate the event management register */
void eventmgr_init()
{
 
 GPTCON=0x0442;  
 /* Initialize PWM */
 /* Period is 200us */          
 ACTR=0x09aa;
 CMPR1=0x07d0;
 CMPR2=0x07d0;
 CMPR3=0x07d0;
 DBTCON=0x0000;
 COMCON=0x4a57;
 COMCON=0xca57;
 T1PER=0xfa0;   
 T1CON=0x0000; 
 T1CON=0x910e; 
 /* Initial timer  2 */
 T2CNT=0x00;
 T2PER=0xffff;
 T2CON=0x8000;
 /* Setup shared pins */
 OCRA = 0xf800;     	             /* pins IOPB0–IOPB3 & IOPA0–IOPA2 to I/O pins */
 OCRB = 0x00f1;      	             /* pins are: ADSOC, XF, /BIO, CAP1–CAP4 */ 
 PADATDIR = 0x0707;
 /* outputs IOPA0–IOPA2, set low */
 PBDATDIR = 0x0704; 	             /* outputs IOPB0–IOPB2, set high */
 /* Initialize T3 */
 T3CNT=0x0;
 T3PER=0xffff;
 T3CON=0x9440;                       /* Prescaler=/16 */
 /* Setup capture units */
 CAPCON = 0x0;    	                 /* reset capture control register */
 CAPFIFO= 0x0ff;                     /* Clear FIFO’s */
 CAPCON = 0xa6c0;                    /* enable #1, use Timer3, both edges */    
 /* enable PWM output */
 T1CON=0x914e; 
} 

/*******************************************************************/
void disable_interrupts()
{
 asm(" SETC INTM");
}

/************************************************************************/
void enable_interrupts() 
{ XINT1CR=0x0007;
 IFR  = 0xffff;                      /* Clear pending interrupts */
 IFRA = 0xffff;
 IFRB = 0xffff;
 IFRC = 0xffff;
 IMR  = 0x0002;                      /* Enable CPU Interrupts:INT 2,3,4 */
 IMRA = 0x0080;                      /* Enable timer 1 period  interrupts */
 IMRB = 0x0000;                      /* Enable timer 3 period and compare interrupts */
 IMRC = 0x0000;                      /* Enable CAP1 interrupts*/
 asm(" CLRC INTM");                  /* Global interrupt enable */
}
void keyboard_ISR() 
{
 int i; 
 unsigned int scan_in,scan_out,x2;
 int row,column=0,key_NO;   /* row=0,1,2;  column=1,2,3,4 */
 row=5;
 for(i=0;i<7500;i++);
 scan_in=port5;
 x2=scan_in & 0x0f;
 if (x2!=0x0f)
 {              
 switch(x2)
 	{
 	 case 0x0e: column=4; 
 	            break;
 	 case 0x0d: column=3;
 	 			break;
 	 case 0x0b: column=2;
 	 			break;
     case 0x07: column=1;
     			break;
     default  : column=17;
    }
 scan_out=0x0f7;
 port0=scan_out;            /* scan keyboard */
 for(i=0;i<1000;i++);
 scan_in=port5; 
 do
 	{row--;	 
 	 port0=scan_out;
 	 for(i=0;i<1000;i++);  
 	 scan_in=port5;
 	 scan_out=scan_out>>1;
 	 if (row==0)
 	 	{
 	 	 row=5;
 	 	 break;
 	 	}
 	} 
 while ((scan_in & 0x0f)==0x0f);	
 key_NO=4*(row-1)+column; 
 port0=0x00;
 x2=port5;
 for(i=0;i<7500;i++);
 port1=0x00;
 port2=0x00; 
 switch(key_NO)
 	{  
     case 1  : port3=0x00;
               port4=0x01;
               break;
     case 2  : port3=0x00;
               port4=0x02;
               break;
     case 3  : port3=0x00;
               port4=0x03;
               break;
     case 4  : port3=0x00;
               port4=0x04;
               break;
     case 5  : port3=0x00;
               port4=0x05;
               break;
     case 6  : port3=0x00;
               port4=0x06;
               break;
     case 7  : port3=0x00;
               port4=0x07;
               break;
     case 8  : port3=0x00;
               port4=0x08;
               break;
     case 9  : port3=0x00;
               port4=0x09;
               break;
     case 10 : port3=0x01;
               port4=0x00;           
               break;
     case 11 : port3=0x01;
               port4=0x01;
     		   break;
     case 12 : port3=0x01;
               port4=0x02;
               break;                  
     case 13 : port3=0x01;
               port4=0x03;
               break;
     case 14 : port3=0x01;
               port4=0x04;
     		   break;
     case 15 : port3=0x01;
               port4=0x05;                
     		   break;
     case 16 : port3=0x01;
               port4=0x06;
               break;
 	 default : port3=0x09;
 	           port4=0x09;
 	           break;               
 	} 
 }
} 
    
void c_int2()
{
 IFR=0x0002;                       /* clear CPU interrupt flag */
 IFRA=0x7ff;
 display_times++;
}
/* ***************************************************************** */
/* The main program  
/* ***************************************************************** */
main()
{
 unsigned int x1,i; 
 disable_interrupts();
 dsp_setup();
 eventmgr_init();  
 enable_interrupts();
 i=0;
 display_times=0; 
 for(;;)
 {
  port0=0x00;
  x1=XINT1CR; 
  if (x1&0x8000)
 	{   
 	keyboard_ISR();
 	XINT1CR=0x0007;
 	} 
 }
}

⌨️ 快捷键说明

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