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

📄 main.c

📁 M200一个与单片机通信的C语言软件源代码
💻 C
字号:
/***********************************************************************************
/----------------------Copyright (c) 2005 ~ 2008 Miartech. All Rights Reserved.-----------------------/
/***********************************************************************************
**-----------------------------------------File Info--------------------------------------------
** Last modified Date:  2008-06-24
** Descriptions: System Main Function File
**--------------------------------------------------------------------------------------------
** 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\Main.h"

extern BYTE bdata g_cModCfgReg;

/*-------------------------------Global Value Definition ----------------------------------------*/
bit g_bRefresh_DSP_Flag;

BYTE g_cKey_Value;
BYTE g_cMenu_Value;
BYTE g_cMenu_Value_Before;

BYTE xdata g_cUart_Rate;
BYTE xdata g_cNode_Address;
BYTE xdata g_cUart_Rate_Value = 0xFD;
BYTE xdata g_cWRAR;
BYTE xdata g_cWRACD;
BYTE xdata g_cWRTDR;
BYTE xdata g_cWRTH0;
BYTE xdata g_cWRTH1;
BYTE xdata g_cWR_F1FRE;
BYTE xdata g_cWR_F1Q;
BYTE xdata g_cWR_F2FRE;
BYTE xdata g_cWR_F2Q;
BYTE xdata g_cWR_F3FRE;
BYTE xdata g_cWR_F3Q;
BYTE xdata g_cDebug;

WORD data g_wTotal_Pkg;

FLAG_YES_NO Recv_Config_Correct;
FLAG_YES_NO ACK_Frame_Flag;
FLAG_YES_NO Stop_Loop_Flag;
FLAG_YES_NO Config_Param_Completed;
FLAG_YES_NO COS_Menu_ESC;

FRAME_RS232 xdata Recv_Frame_RS232;

/*------------------------------------------------------------------------------------------*/

/***********************************************************************************
** Function Name:	MAIN_Init
** Input Parameters:None
** Output Parameters:None
** Implement:Initalization of Main Function
***********************************************************************************/
void MAIN_Init(void)
{	
	AUXR	=	0x01;	//Disable ALE output to reduce EMI
	P1 		= 	0xff;	
	P2 		= 	0xff;	
	P3 		= 	0xff;	
	P4 		= 	0xff;

	MI200E_RST = 0;
	TOOL_Delay_S(1);
	TMOD 	=	0x21;	//Timer1 Mode:2->Auto Reload 8bits Counter;Timer0 Mode:1->16bits Counter;
	SCON	=	0x50;	//WokingMode3:11Bits asynchronous Trans/Rec
	PCON	=	0x80;
	PS		=	1;		//Serial interrupt High Priority	
	IE		=	0x00;

	RTC_RST = 0;	
	TX_SWITH = 0;
	LED_CORRECT = 1;
	Recv_Config_Correct = FLAG_NO;
	ACK_Frame_Flag = FLAG_NO;
	Stop_Loop_Flag = FLAG_NO;
	COS_Menu_ESC = FLAG_NO;
	Config_Param_Completed  = FLAG_YES;
}

/***********************************************************************************
** Function Name:	Main
** Input Parameters:None
** Output Parameters:None
** Implement:Main Function Of Project
***********************************************************************************/
void Main(void)
{
	BYTE xdata Time_Value_Buf[] = {Year_Value,Month_Value,Date_Value,Hour_Value,Minute_Value,Second_Value};
	MAIN_Init();						//MCU Initialization
	Init_LCD();						//LCD Initialization
	Init_Key();						//Key Struct Initialization
	Clear_DSP();
	PLC_Reg_Check_All();			//Check All MI200E Registers  
	TOOL_Delay_S(1);

	MI200E_Init();					//MI200 Initialization
	RTC_Init();						//DS1302 Initialization
	
	if(EEPROM_Read_Data(EEAddr_New_Flag, EEPROM_TYPE) != 0x55)
	{	
		EEPROM_Write_Data(EEAddr_New_Flag, 0x55, EEPROM_TYPE);
		EEPROM_Write_Data(EEAddr_PLC_Mode, 0x81, EEPROM_TYPE);
		EEPROM_Write_Data(EEAddr_TotalPkg_H, 0x00, EEPROM_TYPE);
		EEPROM_Write_Data(EEAddr_TotalPkg_L, 0x00, EEPROM_TYPE);
		EEPROM_Write_Data(EEAddr_UartRate, 0x03, EEPROM_TYPE);
		EEPROM_Write_Data(EEAddr_NodeAddr, 0x00, EEPROM_TYPE);
		EEPROM_Write_Data(EEAddr_RTCFresh, 0xaa, EEPROM_TYPE);
		EEPROM_Write_Data(EEAddr_WRAR, 0xFF, EEPROM_TYPE);
		EEPROM_Write_Data(EEAddr_WRACD, 0x00, EEPROM_TYPE);
		EEPROM_Write_Data(EEAddr_WRTDR, 0x00, EEPROM_TYPE);
		EEPROM_Write_Data(EEAddr_WRTH0, 0x58, EEPROM_TYPE);
		EEPROM_Write_Data(EEAddr_WRTH1, 0x01, EEPROM_TYPE);
		EEPROM_Write_Data(EEAddr_WR_F1FRE, 0x66, EEPROM_TYPE);
		EEPROM_Write_Data(EEAddr_WR_F1Q, 0x88, EEPROM_TYPE);
		EEPROM_Write_Data(EEAddr_WR_F2FRE, 0x66, EEPROM_TYPE);
		EEPROM_Write_Data(EEAddr_WR_F2Q, 0x88, EEPROM_TYPE);
		EEPROM_Write_Data(EEAddr_WR_F3FRE, 0x66, EEPROM_TYPE);
		EEPROM_Write_Data(EEAddr_WR_F3Q, 0x88, EEPROM_TYPE);
		EEPROM_Write_Data(EEAddr_Debug, 0x01, EEPROM_TYPE);
	}

	if(EEPROM_Read_Data(EEAddr_RTCFresh, EEPROM_TYPE) != 0xaa)
	{	
		EEPROM_Write_Data(EEAddr_RTCFresh, 0xaa, EEPROM_TYPE);
		RTC_Write_Time(Time_Value_Buf);
		Display_RTC_Time(Time_Value_Buf);
		TOOL_Delay_MS(20);
	}
	
	g_cModCfgReg = EEPROM_Read_Data(EEAddr_PLC_Mode, EEPROM_TYPE);
	g_wTotal_Pkg = ((EEPROM_Read_Data(EEAddr_TotalPkg_H, EEPROM_TYPE)<<8) 
			+ EEPROM_Read_Data(EEAddr_TotalPkg_L, EEPROM_TYPE));
	g_cUart_Rate = EEPROM_Read_Data(EEAddr_UartRate, EEPROM_TYPE);
	g_cNode_Address = EEPROM_Read_Data(EEAddr_NodeAddr, EEPROM_TYPE);
	g_cWRAR = EEPROM_Read_Data(EEAddr_WRAR, EEPROM_TYPE);
	g_cWRACD = EEPROM_Read_Data(EEAddr_WRACD, EEPROM_TYPE);
	g_cWRTDR = EEPROM_Read_Data(EEAddr_WRTDR, EEPROM_TYPE);
	g_cWRTH0 = EEPROM_Read_Data(EEAddr_WRTH0, EEPROM_TYPE);
	g_cWRTH1 = EEPROM_Read_Data(EEAddr_WRTH1, EEPROM_TYPE);
	g_cWR_F1FRE = EEPROM_Read_Data(EEAddr_WR_F1FRE, EEPROM_TYPE);
	g_cWR_F1Q = EEPROM_Read_Data(EEAddr_WR_F1Q, EEPROM_TYPE);
	g_cWR_F2FRE = EEPROM_Read_Data(EEAddr_WR_F2FRE, EEPROM_TYPE);
	g_cWR_F2Q = EEPROM_Read_Data(EEAddr_WR_F2Q, EEPROM_TYPE);
	g_cWR_F3FRE = EEPROM_Read_Data(EEAddr_WR_F3FRE, EEPROM_TYPE);
	g_cWR_F3Q = EEPROM_Read_Data(EEAddr_WR_F3Q, EEPROM_TYPE);
	g_cDebug = EEPROM_Read_Data(EEAddr_Debug, EEPROM_TYPE);

	TOOL_Delay_MS(20);
	Set_Recv_Param(g_cModCfgReg & 0x03);
	PLC_Write_Reg(PLCAddrWRMR, g_cModCfgReg);	
	PLC_Write_Reg(PLCAddrWRAR, g_cWRAR);	
	PLC_Write_Reg(PLCAddrWRACD, g_cWRACD);	
	PLC_Write_Reg(PLCAddrWRTDR, g_cWRTDR);	
	PLC_Write_Reg(PLCAddrWRTH0, g_cWRTH0);	
	PLC_Write_Reg(PLCAddrWRTH1, g_cWRTH1);	
	PLC_Write_Reg(PLCAddrWR_F1FRE, g_cWR_F1FRE);	
	PLC_Write_Reg(PLCAddrWR_F1Q, g_cWR_F1Q);	
	PLC_Write_Reg(PLCAddrWR_F2FRE, g_cWR_F2FRE);	
	PLC_Write_Reg(PLCAddrWR_F2Q, g_cWR_F2Q);	
	PLC_Write_Reg(PLCAddrWR_F3FRE, g_cWR_F3FRE);	
	PLC_Write_Reg(PLCAddrWR_F3Q, g_cWR_F3Q);	
	Clear_DSP();

	//DSP_WellcomeMenu();

	g_cMenu_Value = DSP_SETTING;
	g_cMenu_Value_Before = DSP_SETTING;
	g_bRefresh_DSP_Flag = 0;
	TOOL_Delay_S(1);
	//DSP_MainMenu(g_cMenu_Value);//Can delete,because no LCD.

	INIT_Timer0();
	ET0	= 1;
	TR0 = 1;

	switch(g_cUart_Rate & 0x03)
	{	
		case 0:			//Baud Rate = 2400bps;
		{	
			PCON = 0x00;
			g_cUart_Rate_Value = 0xF4;
		}	
		break;
		case 1:			//Baud Rate = 4800bps;	 
		{	
			PCON = 0x00;
			g_cUart_Rate_Value = 0xFA;
		}	
		break;
		case 2:			//Baud Rate = 9600bps;	 	 
		{	
			PCON = 0x00;
			g_cUart_Rate_Value = 0xFD;
		}	
		break;
		case 3:			//Baud Rate = 19200bps;	 	 
		{	
			PCON = 0x80;
			g_cUart_Rate_Value = 0xFD;
		}	
		break;
		default:	
		{	
			PCON = 0x80;
			g_cUart_Rate_Value = 0xFD;
		}
		break;
	}
	BaudRate_Init(g_cUart_Rate_Value);	
	TR1	= 1;	
	ES	= 1;		
	EA	= 1;				//Enable All Interrupt & Enable Serial Interrupt & Enable Timer0 Interrupt

	 
}

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

⌨️ 快捷键说明

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