📄 main.c
字号:
/*
*****************************************************************************************************
*
* File name: main.c
*****************************************************************************************************
*/
#include "..\head\includes.h"
/*
*****************************************************************************************************
* PORTA初始化
*****************************************************************************************************
*/
xdata PSD_REGS PSD_reg _at_ 0x8000; //该地址与PSD软件里RAM配置的地址要一致
void Mcu_Port_Init(void)
{
PSD_reg.CONTROL_A.byte = 255;
PSD_reg.DIRECTION_A.byte = 255;
}
/*
*****************************************************************************************************
* 变量初始化
*****************************************************************************************************
*/
void ValueInit(void)
{
LED(CONNECT_LED,ON); //在线LED
LED(RUN_LED,ON); //运行LED
DEFAULT_PIN = 1; //恢复出厂值引脚初始化为高电平
bConnect = FALSE; //设置未连接
HttpFlag = FALSE; //WEB模式
SendHeartFlag = FALSE; //已发送心跳包
ConnectNum = RECONNECT_NUM; //设置一个本地端口号重连几次
LocalPort = 1024; //本地端口初始设置为1024
ModelStatu = MODEL_CONFIG_STATU; //初始为配置状态
}
/*
*****************************************************************************************************
*FUNC: 各功能初始化
*NOTE:
*****************************************************************************************************
*/
#if 0
#define VOID_FUNC_NUM 9
typedef void(*VoidFuncPtr)(void);
VoidFuncPtr code VoidInitFunc[VOID_FUNC_NUM]=
{
Mcu_Port_Init, //端口PORTA初始化
ValueInit, //变量值初始化
Uart0Init, //波特率要跟根据FALSH里的设置串口初始化
Uart0BufferInit, //串口缓冲区初始化
Timer0Init, //定时器初始化
Rtl8019Init, //初始化8019as
InitPingTable, //初始化PING表
InitArpTable, //初始化ARP表
TcpInit //初始化tcp套接字
};
#endif
void Mcu_Init(void)
{
#if 0
unsigned char i;
for (i=0; i<VOID_FUNC_NUM; i++) {
if (VoidInitFunc[i]) {
VoidInitFunc[i]();
}
}
#endif
Mcu_Port_Init(); //端口PORTA初始化
ValueInit(); //变量值初始化
NetConfigInit(); //网络配置初始化 这一定要在UART0INIT前,因为波特率是根据读出来配置
Uart0Init(); //波特率要跟根据FALSH里的设置串口初始化
Uart0BufferInit(); //串口缓冲区初始化
Timer0Init(); //定时器初始化
Rtl8019Init(); //初始化8019as
InitPingTable(); //初始化PING表
InitArpTable(); //初始化ARP表
TcpInit(); //初始化tcp套接字
DHCPInit();
#ifdef PROTOCOL_2004
Pro2004Init();
#endif
}
/*
*****************************************************************************************************
*FUNC: 模块参数配置
*NOTE:
1:TimerMil[T_DELAY_NUM] int型 每1MS自减一次.
2:1s之内有收到"0x30"空格键,进入配置,ModelStatu = MODEL_CONFIG_STATU
3:退出配置时ModelStatu = MODEL_RUN_STATU;以便主程序里判断
*****************************************************************************************************
*/
void Model_Config(void)
{
unsigned char xdata key=0;
HintMsg(6,NULL);
TimerMil[T_DELAY_NUM] = 1500;
while (TimerMil[T_DELAY_NUM]) {
inRxBuf_Bak = inRxBuf; //减少分侦的可能
Mygetch(&key);
if ((key == 'S')||(key == 's')) {
break;
}
}
if ((key == 'S')||(key == 's')) {
ModelStatu = MODEL_CONFIG_STATU;
TimerSec[T_EXIT_CONFIG] = EXIT_CONFIG_SEC;
HintMsg(3,NULL); //提示进入配置
} else {
ModelStatu = MODEL_RUN_STATU;
HintMsg(4,NULL); //提示退出配置
}
DelayHMSM(0,0,0,100); //进入主程序前初始化指针,这里延时是让提示信息先发完
Uart0BufferInit(); //缓冲区指针一定要初始化
}
/*
*****************************************************************************************************
*FUNC:
*NOTE:
*****************************************************************************************************
*/
void main(void)
{
//WDTEN(); //看门狗使能
WDTDIS();
Mcu_Init(); //单片机定时,串口初始化,网络配置初始化
Model_Config(); //是否进入配置状态
while(1) {
if (Query8019()) { //表示收到数据包
MainCycle();
}
Cycle10ms(); //10MS一个周期运行
Cycle1s(); //1S一个周期运行
Data2_Te2NetBuf(); //串口数据扫描,有数据存入Te2NetBuf
Parse_Te2NetBuf(); //如果Te2NetBuf有数据,解析 配置命令/发到NET
Parse_Net2TeBuf(); //如果Net2TeBuf有数据,解析 配置命令/发到终端
#ifdef PROTOCOL_2004
ParseReSentBuf();
#endif
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -