📄 main.c
字号:
/************************************************************************
FileName: Main.c
Description: Main protocol process
Date: 2007 09 21
************************************************************************/
#include "Main.h"
#include "rtl8019.h"
#include "ip.h"
#include "TCP.h"
#include "http.h"
/************************************************************************/
bit MS10_Flag; // 10MS到时标志位,也就是TIMER0的中断标志位
bit gbRs232End; /* 打印完毕 */
bit DelayMSFlag; /* 延时程序开始 */
UWORK8 LinkFlag; // 连接标志位
data UWORK16 Ms10FlagCount; // 定时器记数器
data UWORK16 DelayMsCount; /* 10ms计数器,软件延时中用 */
xdata UWORK32 gulPassWord;
Setup_Parameter NetParameter;
code UWORK16 BaudRate[12] = {0xfb80, 0xfdc0, 0xfee0, 0xff40, 0xff70, 0xffa0, 0xffb8, 0xffd0, 0xffdc, 0xffe8, 0xffee, 0xfff4};
code UWORK8 test_buf[12] = {0x55};
code UWORK8 StartFlag_buf[FLASH_FLAG_NUM] = {0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa}; //开机初始化
code UWORK8 StartParameter_buf[NET_PARA_LEN] =
{
0x00,
0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa, //上位机设置进的引导码 默认八组:0x55 0xAA
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, //上位机设置进的标志码 默认十六个:0xff
0x05, // 转换器名字长度 5
0x68,0x6f,0x73,0x74,0x31,'\0','\0','\0','\0','\0','\0','\0','\0','\0','\0', //转换器名字 host1
0x0, // ip模式 */
0x00,0xab,0xcc,0x65,0xde,0xaa, // MAC */
0xc0,0xa8,0x01,0x6f, // 本地IP 192.168.0.111
0xff,0xff,0xff,0x00, // 掩码 255.255.255.0 */
0xc0,0xa8,0x01,0x01, // 默认网关192.168.1.1
0xc0,0xa8,0x01,0x64, // 远程IP地址192.168.0.95
0xc3,0x50, // 本地端口地址50000
0xc3,0x50, // 远程端口号50000
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 保留
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x03, // 选择 3 波特率,9600 */
0x31,0x30,0x30,0x2e,0x31,0x30,0x30, //版本号:100.100
};
code UWORK16 BaudRate_buf[8] = {BAUND_RATE_1200, BAUND_RATE_2400, //定时时间
BAUND_RATE_4800, BAUND_RATE_9600,BAUND_RATE_19200,
BAUND_RATE_38400,BAUND_RATE_57600,BAUND_RATE_115200};
/*********************************************************************
函数名: void InitCPU(void)
功能: 初始化CPU
输入: None
输出: None
返回: None
日期: 2004/02/04
*********************************************************************/
void InitCPU(void)
{
// CPU内核设置
AUXR |= 0x02; //禁止内部XRAM // 禁止内部XRAM
AUXR |= 0x01; //禁止ALE信号
TMOD=0x11; //定时器0与1工作模式1
TL0 = TIMER0_LOW_BYTE; // 定时5ms
TH0 = TIMER0_HIGH_BYTE;
TL1 = TIMER1_LOW_BYTE; // 定时1ms
TH1 = TIMER1_HIGH_BYTE;
TF0 = FALSE; //清定时器0中断标志
TF1 = FALSE; //清定时器1中断
// 串口0初始化, 定时器2用作串口0波特率发生器
TMOD|=0x20;
SCON=0x50; // 模式1,8位可变波特率,无奇偶校验
PCON |= SMOD; //波特率加倍
T2CON = 0x34; //使用T2作为波特率
TL2 = TIMER2_LOW_BYTE; // 定时器低8位
TH2 = TIMER2_HIGH_BYTE; // 定时器高8位
RCAP2L = TIMER2_LOW_BYTE; // 串口0重载计数器低8位
RCAP2H = TIMER2_HIGH_BYTE; // 串口0重载计数器高8位
TR2 = TRUE; //启动timer2 timer2开始计数
RI = FALSE; //清除串口接收中断标志
TI = FALSE; // 清除串口发送中断标志
REN = TRUE; // 串口接收使能
ES = TRUE; // 使能串口中断
//中断0初始化
IT0 = FALSE; //外部中断0低电平触发
EX0=TRUE;
//优先级设置
IP = 0x11; //串口优先级最高,其次是中断0,其次是定时器1,最后是定时器0
IPH = 0x18;
TR0 = TRUE; //启动timer0 /* timer0开始计数 */
ET0 = TRUE; // 使能timer0中断
ET1 = TRUE; //使能timer1中断
EA = TRUE; //打开中断总开关 /* 初始化完数据后才能打开中断,中断里面会对许多全局变量进行操作 */
// 看门狗初始化
WDTCONTR |= 0x07; // 模式7,看门狗定时1.26S
WDTCONTR |= EN_WDT; //使能看门狗中断
WDTCONTR |= CLR_WDT; //复位看门狗定时器 复位,使能看门狗计数器
}
/*********************************************************************
函数名: void FlashInit(void)
功能: 初始化Flash数据
输入: ucType(0:全部初始化,包括标志位 1:全部初始化 2:初始化UART 3:初始化net)
输出: None
返回: none
日期: 2004/08/08
*********************************************************************/
void FlashInit(void)
{
bit bFlag = FALSE;
if(OK != FlashWriteData(FLASH_INIT_FLAG_ADDR,StartFlag_buf,FLASH_FLAG_NUM)) bFlag = TRUE; //初始化标志位
if(OK != FlashWriteData(NetParameter_Addr,StartParameter_buf,sizeof(Setup_Parameter))) bFlag = TRUE; //初始化网口参数
if(OK != FlashWriteData(NetParameter_BakAddr,StartParameter_buf,sizeof(Setup_Parameter))) bFlag = TRUE; //初始化网口参数 ,写在备份地址
if(bFlag)
{
Led = ON;
ResetSystem();
}
}
/*********************************************************************
函数名: UWORK8 FlashCheck(void)
功能: 检测是否已经置上标志
输入: none
输出: None
返回: none
日期: 2005/11/19
*********************************************************************/
void FlashCheck(void)
{
UWORK8 Temp_buf[150];
FlashReadData(FLASH_INIT_FLAG_ADDR,&Temp_buf[0],10); //读取初始化标志数
if((0x55 != Temp_buf[0]) || (0xaa != Temp_buf[1]) || (0x55 != Temp_buf[2]) ||
(0xaa != Temp_buf[3]) || (0x55 != Temp_buf[4]) || (0xaa != Temp_buf[5]) ||
(0x55 != Temp_buf[6]) || (0xaa != Temp_buf[7]) || (0x55 != Temp_buf[8]) ||
(0xaa != Temp_buf[9]))
{
FlashInit(); // 初始化FLASH
ResetSystem();
}
if(OK != FlashReadData(NetParameter_Addr,&Temp_buf[0],sizeof(Setup_Parameter))) //读取设置的网络参数
{
if(OK != FlashReadData(NetParameter_BakAddr,&Temp_buf[0],sizeof(Setup_Parameter))) //读取设置的网络参数
{
FlashInit(); // 初始化FLASH
ResetSystem();
}
FlashWriteData(NetParameter_Addr,&Temp_buf[0],sizeof(Setup_Parameter)); //初始化网口参数
}
memcpy((UWORK8 *)&NetParameter.startFlag, &Temp_buf[0],sizeof(Setup_Parameter)); //把读取的参数据考入结构体
IpModeNum = 1; //设置IP模式
KeyDelayCount = 0;
while(0 == Key) //按键为0时有效
{
Key_flag = TRUE;
if(KeyDelayCount >= 300) // 按住3秒进行复位
{
FlashInit(); // 初始化FLASH
ResetSystem();
}
if(Key == 1)
{
Key_flag = FALSE;
KeyDelayCount = 0;
}
else
{
Key_flag = TRUE;
}
}
}
/*********************************************************************
函数名: void InitSerial(void)
功能: 初始化串口
输入: 系统启动或者保存参数
输出: 改变串口波特率
返回: None
日期: 2005/07/12
*********************************************************************/
void InitSerial(void)
{
xdata UWORK8 ucBaundLow,ucBaundHigh;
xdata UWORK16 TempBaundRate;
PCON |= SMOD;
TempBaundRate = BaudRate_buf[NetParameter.Baud_Select];
ucBaundLow = (UWORK8)TempBaundRate;
ucBaundHigh = (UWORK8)(TempBaundRate >> 8);
TL2 = ucBaundLow; /* 定时器低8位 */
TH2 = TIMER2_HIGH_BYTE;
TH2 = ucBaundHigh; /* 定时器高8位 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -