📄 main.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 + -