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

📄 user_interface.c

📁 关于无传感器BLDC使用DSPIC现实的源码
💻 C
📖 第 1 页 / 共 3 页
字号:
	}
	return;
}

// ******************************************************************
// The code below is only compiled when in DEVELOPMODE is TRUE
//*******************************************************************
#ifdef DEVELOPMODE

void serial_handler(void)
{

	if (control_flags2.Fault)
		control_flags2.Fault = 0;
	if (control_flags2.CheckRX)
		{
		CheckHelp();
		if (!control_flags2.HelpMsg)
			GetMsgIndex();
		if (control_flags2.SendTX)
			{
			SendCRLF();
			TXPtr = &parameter_data[Index].line_msg[0];
			SendMsg();
			SendTab();
			SendValue(user_parameters[Index]);
			} 	
		// initialize pointer to first char
		if (control_flags2.ErrorMsg)
			SendErrorMsg();
		RXPtr = &InData[0];
		SendCRLF();
		control_flags2.SendTX = 0;
		control_flags2.CheckRX = 0;
		control_flags2.ErrorMsg = 0;
		control_flags2.HelpMsg = 0;	
		}
}

void CheckHelp(void)
{
	if (InData[0] == '?')
	{
		switch (InData[1])
		{
		case '?': 	SendHelpMsg();
					break;
		case 'M': 	SendMotorPara();
					break;
		case 'L':	SendLimitPara();
					break;
		case 'C':	SendControlPara();
					break;
		case 'S':	SendStartingPara();
					break;
		case 'B':	SendBoardPara();
					break;
		case 'R':	SendRunMsg();
					break;
		case 'F': 	SendFaultMsg();
					break;
		default:	SendErrorMsg();
		}
	}
}

void GetMsgIndex(void)
{
	Index = 0;
	control_flags2.SendTX = 0;
	
	while (Index < MAXINDEX)
		{
		RXPtr = &InData[0];
		TXPtr = &parameter_data[Index].quick_msg[0];
		while(1)
			if (*RXPtr++ == *TXPtr++)
				if (*RXPtr == 0x20 || *RXPtr == 0x0D)
					break;
				else ;
			else
				{control_flags2.NextIndex = 1; break;}
		if (!control_flags2.NextIndex)
			if (*RXPtr == 0x20) 
				{SaveValue();break;}
			else 
				{control_flags2.SendTX = 1; break;}
		else {control_flags2.NextIndex = 0;Index++;}
		}
	if (Index == MAXINDEX) control_flags2.ErrorMsg = 1;
	else control_flags2.SendTX = 1;
}

void SaveValue()
{
unsigned char Temp[6]={"000000"};
unsigned char i, l;
 
	while (*RXPtr++ != CR);
	*RXPtr--; l = 5;
	while (*RXPtr != 0x20)
		Temp[l--] = *RXPtr--;
	user_parameters[Index] = atoi(Temp);
	// Now force any variables which depend on user_parameters
	// to be calculated by calling process_parameters for every
	// parameter. 
	
	for (i=0;i<NO_PARAMETERS;i++)
	{
		param=i;
		process_parameters();
	}
	// Set param back to start of menu
	param=0;
}

void SendTab(void)
{

		while (U1STAbits.UTXBF);
		U1TXREG = HT;
}


void SendCRLF(void)
{
	while (U1STAbits.UTXBF);
	U1TXREG = CR;	
	while (U1STAbits.UTXBF);
	U1TXREG = LF;
}

void SendErrorMsg(void)
{
TXPtr = (unsigned char*)&ErrorMsg[0];
SendMsg();
control_flags2.ErrorMsg = 0;
}

void SendMsg(void)
{
while (*TXPtr)
	{
	while (U1STAbits.UTXBF);
	U1TXREG = *TXPtr++;
	}
}

void SendHelpMsg(void)
{

Index = 0;
do
		{
		TXPtr = &HelpMsg_data[Index].line_msg[0];
		SendMsg();
		TXPtr = &HelpMsg_data[Index].quick_msg[0];
		SendMsg();	
		SendCRLF();
		} 
	while (++Index < MAXHELPMSG);
control_flags2.HelpMsg = 1;
}
void SendHelpInfo(unsigned char Tab)
{

unsigned char i;
i=0;
Index = 0;
do
	if (Index == help_info[Tab][i])
		{
		TXPtr = &parameter_data[Index].line_msg[0];
		SendMsg();
		SendTab();
		SendTab();
		TXPtr = &parameter_data[Index].quick_msg[0];
		SendMsg();
		SendTab();
		SendTab();
		SendValue(user_parameters[Index]);	
		SendCRLF();
		i++;
		} 
	while (++Index < MAXINDEX);
control_flags2.HelpMsg = 1;
}


		
void SendValue(unsigned int k)
{
//unsigned int k;
unsigned char c;


	c = k/10000;
	if (c > 0)
		k = k - c*10000;
	while (U1STAbits.UTXBF);
	U1TXREG = (c + 0x30);
	c = k/1000;
	if (c > 0)
		k = k - c*1000;
	while (U1STAbits.UTXBF);
	U1TXREG = (c + 0x30);
	c = k/100;
	if (c > 0)
		k = k - c*100;
	while (U1STAbits.UTXBF);
	U1TXREG = (c + 0x30);
	c = k/10;
	if (c > 0)
		k = k - c*10;
	while (U1STAbits.UTXBF);
	U1TXREG = (c + 0x30);
	while (U1STAbits.UTXBF);
	U1TXREG = (char)(k + 0x30);
}



void SendFaultMsg(void)
{

	TXPtr = (unsigned char *)&FaultMessage[0];
	SendMsg();
	control_flags2.HelpMsg = 1;
}



void SendRunMsg(void)
{
	TXPtr = (unsigned char *)&RunMessage[0];
	SendMsg();
	control_flags2.HelpMsg = 1;

}

void SendMotorPara(void)
{
	TXPtr =  (unsigned char *)&MotorParaHeader[0];
	SendMsg();
	SendHeader();
	SendHelpInfo(MOTORPARA);
}

void SendLimitPara(void)
{
	TXPtr = (unsigned char *)&LimitParaHeader[0];
	SendMsg();	
	SendHeader();
	SendHelpInfo(LIMITPARA);	
}

void SendControlPara(void)
{
	TXPtr = (unsigned char *)&ControlParaHeader[0];
	SendMsg();
	SendHeader();
	SendHelpInfo(CONTROLPARA);
}

void SendStartingPara(void)
{
	TXPtr = (unsigned char *)&StartingParaHeader[0];
	SendMsg();
	SendHeader();
	SendHelpInfo(STARTINGPARA);
}

void SendBoardPara(void)
{
	TXPtr = (unsigned char *)&BoardParaHeader[0];
	SendMsg();
	SendHeader();
	SendHelpInfo(BOARDPARA);
}

void SendHeader(void)
{

	TXPtr = (unsigned char *)&ParaHeader[0];
	SendMsg();
}
	
void send_run(void)
{

unsigned int k;
	
	k = PDC1 >> 1;
	k = PTPER - k;
	k = k*100;
	k = k/PTPER; 
	TXPtr = (unsigned char *)&RunMsg1[0];
	SendMsg();
	SendValue(filtered_rpm);
	SendTab();
	TXPtr = (unsigned char *)&RunMsg2[0];
	SendMsg();
	SendValue(k);
	while (U1STAbits.UTXBF);
	U1TXREG = CR;
}


void send_fault(void)
{
	if (!control_flags2.Fault)
		{
		control_flags2.Fault = 1;
		SendCRLF();
		TXPtr = (unsigned char *)&fault_data[trip_state].fault_msg[0];
		SendMsg();
		SendTab();
		TXPtr = (unsigned char *)&fault_data[0].fault_msg[0];
		SendMsg();
		SendCRLF();
		}		

}


#endif

⌨️ 快捷键说明

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