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

📄 mi200e_setting.c

📁 M200一个与单片机通信的C语言软件源代码
💻 C
字号:
/***********************************************************************************
/----------------------Copyright (c) 2005 ~ 2008 Miartech. All Rights Reserved.-----------------------/
/***********************************************************************************
**-----------------------------------------File Info--------------------------------------------
** Last modified Date:  2008-06-24
** Descriptions:  MI200E Setting Processing Primary Functions
**--------------------------------------------------------------------------------------------
** Created By:  	Kelven
** Created Date:	2007-04-17
**--------------------------------------------------------------------------------------------
** Modified by: 	Kelven
** Modified date:	2007-09-04
** Version:		V4.0.0
** Descriptions:
**--------------------------------------------------------------------------------------------
** Modified by: 	Kelven
** Modified date:	2008-06-24
** Version:		V4.0.1
** Descriptions:	Updating Key Configrating Function, Added PLC Chip Register Value Setting Module
***********************************************************************************/

#include "..\inc\MI200E_Setting.h"

extern bit g_bInteract_Bit;
extern bit g_bRefresh_DSP_Flag;

extern FLAG_YES_NO ACK_Frame_Flag;
extern FLAG_YES_NO Stop_Loop_Flag;
extern FLAG_YES_NO Recv_Config_Correct;
extern FLAG_YES_NO COS_Menu_ESC;

extern BYTE	g_cTrans_Step;
extern BYTE	g_cRecv_Step;
extern BYTE	g_cRecByte_H;
extern BYTE	g_cRecByte_L;
extern BYTE	g_cSend_Data_Length;
extern BYTE	g_cPkg_Length;
extern BYTE	g_cSend_Byte_Cnt;	
extern BYTE	g_cRecv_Byte_Cnt;

extern BYTE code ST_info[];

extern BYTE 	xdata 	g_Recv_Buf[];
extern BYTE 	xdata 	g_Send_Buf[];
extern BYTE 	xdata	g_cNode_Address;
extern BYTE 	bdata 	g_cModCfgReg;
extern bit 			bMI200_RX_TXn;
extern BYTE 	bdata 	g_cRecModCfgReg;
extern BYTE 	bdata 	g_cAsigCfgReg;

extern WORD 			g_wTotal_Pkg;

/*-------------------------------Global Value Definition----------------------------------------*/
MI200E_PARAM_SETTING		MI200E_Param_Setting;
COMMUNICATION_PARAM_SET	Communication_Param_Set;
RETURN_REG_VALUE			Return_Regs_Value;
MI200E_REG_VALUE			MI200E_Reg_Value;
FLAG_YES_NO 				Data_Send_Permit;
/*------------------------------------------------------------------------------------------*/
/***********************************************************************************
** Function Name:	Send_STOP_Command
** Input Parameters:None
** Output Parameters:None
** Description:Send Stop Command to Indicated The Task Have Finished
***********************************************************************************/
void Send_STOP_Command(pFRAME_RS232 pFrame_RS232)
{
	BYTE ForCnt;
	BYTE xdata SBUF_Data[10];
	
	pFrame_RS232->Frame_Header = FRAME_HEADER_BYTE;
	pFrame_RS232->Local_Address = g_cNode_Address;
	pFrame_RS232->Direction_Flag = 0x01;
	pFrame_RS232->RetrySend_Flag = 0x00;
	pFrame_RS232->Reserved = 0x00;
	pFrame_RS232->Sequence_ID = 0x00;

	pFrame_RS232->Command = Stop_Command;	
	pFrame_RS232->Data_Length = 0x00;
	memcpy(&SBUF_Data, pFrame_RS232, 6);

	SBUF_Data[6] = Check_XOR_Sum(SBUF_Data, 6);

	for (ForCnt = 0;ForCnt < 7; ForCnt++)
	{
		SBUF = SBUF_Data[ForCnt];
		while(!TI);
		TI = 0;
	}

	//ACK_Frame_Flag = FLAG_YES;
}

/***********************************************************************************
** Function Name:	MI200E_Setting_Process
** Input Parameters:pFRAME_RS232 xdata pFrame_RS232
** Output Parameters:None
** Description:MI3323 Main Function
***********************************************************************************/
void MI200E_Setting_Process(pFRAME_RS232 pFrame_RS232)
{	
	BYTE Tmp_Value;
	BYTE cReg_ReadValue;

	pMI200E_PARAM_SETTING		pMI200E_Param_Setting;
	pCOMMUNICATION_PARAM_SET	pCommunication_Param_Set;
	pMI200E_REG_VALUE			pMI200E_Reg_Value;
	pRETURN_REG_VALUE			pReturn_Reg_Value;
	FRAME_RS232 xdata 			Send_Frame_RS232;
	
	pMI200E_Param_Setting 	= &MI200E_Param_Setting;
	pCommunication_Param_Set	= &Communication_Param_Set;
	pMI200E_Reg_Value 		= &MI200E_Reg_Value;
	pReturn_Reg_Value 		= &Return_Regs_Value;
	
	memset(&Send_Frame_RS232, 0, sizeof(FRAME_RS232));	
	
	switch(pFrame_RS232->Command)
	{
		case Set_MI200E_Reg:
		{	
			memcpy(pMI200E_Reg_Value, pFrame_RS232->Frame_Data_BUF, pFrame_RS232->Data_Length);
			PLC_Write_Reg(0x01, pMI200E_Reg_Value->Reg_01_Value);
			PLC_Write_Reg(0x07, pMI200E_Reg_Value->Reg_07_Value);
			PLC_Write_Reg(0x0A, pMI200E_Reg_Value->Reg_0A_Value);
			PLC_Write_Reg(0x0B, pMI200E_Reg_Value->Reg_0B_Value);
			PLC_Write_Reg(0x0C, pMI200E_Reg_Value->Reg_0C_Value);
			PLC_Write_Reg(0x0D, pMI200E_Reg_Value->Reg_0D_Value);
			PLC_Write_Reg(0x10, pMI200E_Reg_Value->Reg_10_Value);
			PLC_Write_Reg(0x11, pMI200E_Reg_Value->Reg_11_Value);
			PLC_Write_Reg(0x12, pMI200E_Reg_Value->Reg_12_Value);
			PLC_Write_Reg(0x13, pMI200E_Reg_Value->Reg_13_Value);
			PLC_Write_Reg(0x14, pMI200E_Reg_Value->Reg_14_Value);
			PLC_Write_Reg(0x15, pMI200E_Reg_Value->Reg_15_Value);

			g_cModCfgReg = pMI200E_Reg_Value->Reg_01_Value;
			EEPROM_Write_Data(EEAddr_PLC_Mode, g_cModCfgReg, EEPROM_TYPE);
			g_cAsigCfgReg = pMI200E_Reg_Value->Reg_07_Value;
			EEPROM_Write_Data(EEAddr_WRAR, g_cAsigCfgReg, EEPROM_TYPE);
			EEPROM_Write_Data(EEAddr_WRACD, pMI200E_Reg_Value->Reg_0A_Value, EEPROM_TYPE);
			EEPROM_Write_Data(EEAddr_WRTDR, pMI200E_Reg_Value->Reg_0B_Value, EEPROM_TYPE);
			EEPROM_Write_Data(EEAddr_WRTH0, pMI200E_Reg_Value->Reg_0C_Value, EEPROM_TYPE);
			EEPROM_Write_Data(EEAddr_WRTH1, pMI200E_Reg_Value->Reg_0D_Value, EEPROM_TYPE);
			EEPROM_Write_Data(EEAddr_WR_F1FRE, pMI200E_Reg_Value->Reg_10_Value, EEPROM_TYPE);
			EEPROM_Write_Data(EEAddr_WR_F1Q, pMI200E_Reg_Value->Reg_11_Value, EEPROM_TYPE);
			EEPROM_Write_Data(EEAddr_WR_F2FRE, pMI200E_Reg_Value->Reg_12_Value, EEPROM_TYPE);
			EEPROM_Write_Data(EEAddr_WR_F2Q, pMI200E_Reg_Value->Reg_13_Value, EEPROM_TYPE);
			EEPROM_Write_Data(EEAddr_WR_F3FRE, pMI200E_Reg_Value->Reg_14_Value, EEPROM_TYPE);
			EEPROM_Write_Data(EEAddr_WR_F3Q, pMI200E_Reg_Value->Reg_15_Value, EEPROM_TYPE);
		}	
		break;

		case Read_Reg_Value:
		{	
			memset(pReturn_Reg_Value, 0, sizeof(RETURN_REG_VALUE));	

			cReg_ReadValue = PLC_Read_Reg(0x81) ;
			pReturn_Reg_Value->Reg_81_Value = cReg_ReadValue;
			cReg_ReadValue = PLC_Read_Reg(0x87) ;
			pReturn_Reg_Value->Reg_87_Value = cReg_ReadValue;
			
			memcpy(Send_Frame_RS232.Frame_Data_BUF, pReturn_Reg_Value, sizeof(RETURN_REG_VALUE));

			Send_Frame_RS232.Data_Length = sizeof(RETURN_REG_VALUE);

			RS232_Send_Frame(&Send_Frame_RS232, Return_Reg_Value);
			while(ACK_Frame_Flag == FLAG_YES)//Wait For PC ACK Infomation
			{
				if(Read_Key() == ESC)		
				{
					COS_Menu_ESC = FLAG_YES;
					return;
				}
			}
		}			
		break;
		
		case Start_Send_Command:
		{	
			g_bInteract_Bit = 0;
			g_cTrans_Step 	= 0;
			bMI200_RX_TXn	= Status_TRAN;
			PLC_Write_Reg(PLCAddrWRMR, g_cModCfgReg & 0x7f);	
			TX_SWITH = 1;

			memcpy(g_Send_Buf, pFrame_RS232, pFrame_RS232->Data_Length + 6);
			g_cSend_Data_Length = pFrame_RS232->Data_Length + 6;
			while(g_bInteract_Bit == 0)
			{				
				if(g_cTrans_Step != 6)		
				{
					PLC_Transmit_Process( &g_Send_Buf[g_cSend_Byte_Cnt] );
				}
				else	
				{
					DSP_Show(0x80,"Transmiting Data");
					g_bInteract_Bit		= 1;
					g_cRecByte_H		= 0;			
					g_cRecByte_L		= 0;	
					g_cRecv_Step		= 0x00;
					bMI200_RX_TXn	= Status_RECV;					//Change to transmit mode
					PLC_Write_Reg(PLCAddrWRMR, g_cModCfgReg|0x8c);	//Write mode configuration, 

					LED_TX = 1;
					LED_RX = 1;
					LED_BUSY = 1;
					LED_CORRECT = 1;
				}
			}	

			while(g_bInteract_Bit == 1)
			{	
				if(Read_Key() == ESC)		
				{
					COS_Menu_ESC = FLAG_YES;
					return;
				}

				if (g_cRecv_Step != 4)
				{
					PLC_Receive_Process( &g_Recv_Buf[g_cRecv_Byte_Cnt] );
				}
				
				else
				{
					DSP_Show(0xc0,"Receiving Data");
					g_cTrans_Step  = 0x00;
					bMI200_RX_TXn = Status_TRAN;
					PLC_Write_Reg(PLCAddrWRMR, g_cModCfgReg & 0x7f);	
					g_bInteract_Bit = 0;
					Send_Frame_RS232.Data_Length = (g_cPkg_Length - 2)*2;
					memcpy(&Send_Frame_RS232.Frame_Header, g_Recv_Buf, Send_Frame_RS232.Data_Length + 6);							
					RS232_Send_Frame(&Send_Frame_RS232, Return_Send_Pkg);		

					LED_TX = 1;
					LED_RX = 1;
					LED_BUSY = 1;
					LED_CORRECT = 1;
				}					
			}

			LED_TX = 1;
			LED_RX = 1;
			LED_BUSY = 1;
			LED_CORRECT = 1;
			
			while((ACK_Frame_Flag == FLAG_YES) && (Stop_Loop_Flag == FLAG_NO))//Wait For PC ACK Infomation
			{
				if(Read_Key() == ESC)		
				{
					COS_Menu_ESC = FLAG_YES;
					return;
				}
			}			
			if(Stop_Loop_Flag == FLAG_YES)
			{
				//memset(&Send_Frame_RS232, 0, sizeof(FRAME_RS232));	
				//Send_STOP_Command(&Send_Frame_RS232);
				return;
			}	
		}	
		break;
		
		case Stop_Send_Command:
		{	
			LED_TX = 1;
			LED_RX = 1;
			LED_BUSY = 1;
			LED_CORRECT = 1;
			memset(&Send_Frame_RS232, 0, sizeof(FRAME_RS232));	
			Send_STOP_Command(&Send_Frame_RS232);
		}	
		break;	
		
		case Set_MI200E_Param:
		{	
			memcpy(pCommunication_Param_Set, pFrame_RS232->Frame_Data_BUF, pFrame_RS232->Data_Length);
			Tmp_Value = 0;
			Tmp_Value = (pCommunication_Param_Set->MI200E_Param.Carrier_Freq)
						+ (pCommunication_Param_Set->MI200E_Param.Baud_Rate<<2)
						+ (pCommunication_Param_Set->MI200E_Param.SS_Code<<4);

			cReg_ReadValue = (PLC_Read_Reg(0x81) & 0x80) ;

			pMI200E_Reg_Value->Reg_01_Value = cReg_ReadValue + Tmp_Value;	
			PLC_Write_Reg(0x01, pMI200E_Reg_Value->Reg_01_Value);
			g_cModCfgReg = pMI200E_Reg_Value->Reg_01_Value;
			EEPROM_Write_Data(EEAddr_PLC_Mode, g_cModCfgReg, EEPROM_TYPE);

			g_cNode_Address = pCommunication_Param_Set->Node_Address;
			EEPROM_Write_Data(EEAddr_NodeAddr, g_cNode_Address, EEPROM_TYPE);
			Tmp_Value = (BYTE)((pCommunication_Param_Set->Package_Cnt & 0xff00)>>8);
			g_wTotal_Pkg = (WORD)((pCommunication_Param_Set->Package_Cnt<<8)+Tmp_Value);
			EEPROM_Write_Data(EEAddr_TotalPkg_H, (BYTE)((g_wTotal_Pkg & 0xff00)>>8), EEPROM_TYPE);
			EEPROM_Write_Data(EEAddr_TotalPkg_L, (BYTE)(g_wTotal_Pkg & 0x00ff), EEPROM_TYPE);			
		}	
		break;
	}
}

/***********************************************************************************
** Function Name:	COM_Receiving_Process
** Input Parameters:None
** Output Parameters:None
** Description:Send Stop Command to Indicated The Task Have Finished
***********************************************************************************/
void Return_Testing_Process(void)
{
	g_bInteract_Bit = 0;
	g_cRecByte_H		= 0;			
	g_cRecByte_L		= 0;	
	g_cRecv_Step		= 0x00;
	bMI200_RX_TXn	= Status_RECV;					//Change to Receive mode
	PLC_Write_Reg(PLCAddrWRMR, g_cModCfgReg|0x8c);	//Write mode configuration, 

	while(g_bInteract_Bit == 0)
	{	
		if(Read_Key() == ESC)		
		{
			PLC_Write_Reg(PLCAddrWRMR, g_cModCfgReg);
			COS_Menu_ESC = FLAG_YES;
			return;
		}
		
		if (g_cRecv_Step != 4)
		{
			PLC_Receive_Process( &g_Recv_Buf[g_cRecv_Byte_Cnt] );
		}
			
		else
		{
			DSP_Show(0xc0,"Receive Data");
			g_cModCfgReg = (g_cModCfgReg|0x0c) & ((g_cRecModCfgReg>>4)|0xf3);
			EEPROM_Write_Data(EEAddr_PLC_Mode, g_cModCfgReg, EEPROM_TYPE);

			g_cTrans_Step  = 0x00;
			bMI200_RX_TXn = Status_TRAN;
			PLC_Write_Reg(PLCAddrWRMR, g_cModCfgReg & 0x7f);	
			g_bInteract_Bit = 1;
			TX_SWITH = 1;

			g_cSend_Data_Length = (g_cPkg_Length-2)*2;
			g_Recv_Buf[1] = g_cNode_Address;
			memcpy(g_Send_Buf, g_Recv_Buf, g_cSend_Data_Length);
		}
	}	

	while(g_bInteract_Bit == 1)
	{	
		if(g_cTrans_Step != 6)		
		{
			PLC_Transmit_Process( &g_Send_Buf[g_cSend_Byte_Cnt] );
		}
		else	
		{
			DSP_Show(0x80,"Transmit Data");
			g_bInteract_Bit = 0;
		}
	}
	LED_TX = 1;
	LED_RX = 1;
	LED_BUSY = 1;
	LED_CORRECT = 1;
}

/***********************************************************************************
**										    End Of File											**
***********************************************************************************/

⌨️ 快捷键说明

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