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

📄 motor.c.bak

📁 利用变频软起动方式就可以解决电动机起动问题变频软起动控制系统在实时性允 许的前提下用软件资源代替硬件电路功能可以方便地修改控制策略修正控制参数 对于降低成本简化系统的硬件结构提高系统的性能价格比具
💻 BAK
字号:
#include "2407c.h"                    
#include "scancode.h"
#define T46uS		0x0d40
ioport unsigned int port8000;	
ioport unsigned int port8001;	
ioport unsigned int port8002;	
ioport unsigned int port8007;	

void Delay(unsigned int nTime);
void interrupt time(void);
char ConvertScanToChar(unsigned char cScanCode);
void interrupt gptime1(void);     
void gp_init(void);      

ioport unsigned int port8001;	
unsigned int uWork,nCount,uN,uN1,nCount1,nDir;


//char ConvertScanToChar(unsigned char cScanCode);
//void Delay(unsigned int nDelay);

//ioport unsigned char port8001;	
//unsigned int uWork,nCount;

main()
{   char cKey,cOldKey;
	unsigned int nScanCode;
	unsigned int uWork1,nSpeed;
	asm(" setc INTM");
	
	port8000=0;
	port8000=0x80;
	port8000=2;
	port8000=1;
	port8007=0;			// 关闭东西方向的交通灯
	port8007=0x40;	// 关闭南北方向的交通灯
	uWork1=port8002;	// 清除键盘缓冲区

	uN=30; nCount=nCount1=0; nDir=0; cKey=cOldKey=0;

	*WDCR=0x6f;
	*WDKEY=0x5555;
	*WDKEY=0xaaaa;    
	*SCSR1=0x81fe;    //40m      
	uWork=(*MCRC);
	uWork&=0x0efdf;	/* PWM11/IOPE5,TDIR2/IOPF4 for normal I/O ports */
	(*MCRC)=uWork;
	gp_init();   
	*IMR=0x3;
	*IFR=0xffff;    
	nCount=0;
	uWork=(*WSGR);
	uWork&=0x0fe3f;
	(*WSGR)=uWork;
		
	uWork=(*PFDATDIR);
	uWork|=0x1000;
	uWork1&=0xffef;		/* Set direct=0 */
	(*PFDATDIR)=uWork;
	asm(" clrc INTM");         
	Delay(128);
	*T1PR=T46uS; 
	nSpeed=T46uS;
	for(;;)
	{
		if ( nCount>16 )
		{
			nCount=0;
			nScanCode=port8001;	// 读扫描码
			nScanCode&=0x0ff;	// 低8位
			//uWork1=port8001;	// 清除键盘缓冲区
			if ( nScanCode!=0 )
			{
				if ( nScanCode==SCANCODE_Enter )	break;
				else
				{
					cKey=ConvertScanToChar(nScanCode);
					if ( cKey!=0 && cOldKey!=cKey )
					{
						cOldKey=cKey;
						switch ( cKey )
						{
							case '0': uN=100; break;
							case '1': uN=70; break;
							case '2': uN=50; break;
							case '3': uN=30; break;
							case '4': uN=10; break;
							case '5': uN=1; break;
							case '+':
								uN1=uN;
								uN=60;		// 降速
								Delay(128);
								uWork1=(*PFDATDIR);
								uWork1|=0x0010;	/* Set Motor's direction to 1 */
								(*PFDATDIR)=uWork1;
   								*T1PR=nSpeed; 
				 			 	nDir=0; 
  			 					Delay(128);
								uN=uN1;
								break;
							case '-':
								uN1=uN;
								uN=60;		// 降速
								Delay(128);
					uWork1=(*PFDATDIR);
					uWork1&=0xffef;	/* Set direct=0 */
					(*PFDATDIR)=uWork1;
   					Delay(128);
   					*T1PR=nSpeed; 
				 			 	nDir=1;
								Delay(128);
								uN=uN1;
								break;
						}
					}
				}
			}
		}
		
	}
	port8000=0;
	port8000=0x80;
	port8000=0;
	exit(0);
}               

void interrupt gptime1(void)
{
   uWork=(*PIVR);
   switch(uWork)
   {  
   		case 0x27:
   		{
			(*EVAIFRA)=0x80;
/*
			uWork=(*PEDATDIR);
			uWork|=0x2000;
			uWork^=0x0020;
			(*PEDATDIR)=uWork;
*/
			uWork=(*PEDATDIR);
			uWork|=0x2000;
			if ( nCount>uN )
				uWork|=0x20;
			else
				uWork&=0x0ffdf;		
			(*PEDATDIR)=uWork;
			
	//		SPSA1=1;	// set McBSP1's SPCR2
//		uWork=SPSD1;
//		uWork&=0xfffe;	// set XRST=0
//		SPSD1=uWork;
//		SPSA1=0x0e;	// set McBSP1's PCR1
//		uWork=SPSD1;
//		uWork|=0x2400;	// set XIOEN=1 FSXM=1, Enable IO,FSR for output
//		if ( nCount1>uN )	uWork|=4;
//		else	uWork&=0x0fffb;
//		SPSD1=uWork;
		nCount++;
		nCount1++; nCount1%=100;
			
			
   		   	break;
   		}
   }
}                       

void gp_init(void)
{
   *EVAIMRA = 0x80;
   *EVAIFRA = 0xffff;
   *GPTCONA = 0x0100;
   *T1PR    = T46uS*9/5; 
   *T1CNT   = 0;
   *T1CON   = 0x1340;
}

char ConvertScanToChar(unsigned char cScanCode)
{
	char cReturn;
	
	cReturn=0;
	switch ( cScanCode )
	{
		case SCANCODE_0: cReturn='0'; break;
		case SCANCODE_1: cReturn='1'; break;
		case SCANCODE_2: cReturn='2'; break;
		case SCANCODE_3: cReturn='3'; break;
		case SCANCODE_4: cReturn='4'; break;
		case SCANCODE_5: cReturn='5'; break;
		case SCANCODE_6: cReturn='6'; break;
		case SCANCODE_7: cReturn='7'; break;
		case SCANCODE_8: cReturn='8'; break;
		case SCANCODE_9: cReturn='9'; break;
//		case SCANCODE_F1: 
		case SCANCODE_Plus: cReturn='+'; break;
//		case SCANCODE_F2: 
		case SCANCODE_Minus: cReturn='-'; break;
	}
	 
	return cReturn;
}


void Delay(unsigned int nDelay)
{
	int i,j,k;
	
	for ( i=0;i<nDelay;i++ )
		for ( j=0;j<16;j++ )
			k++;
}

 

⌨️ 快捷键说明

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