📄 main.c
字号:
返回: 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位 */
RCAP2L = ucBaundLow; /* 串口0重载计数器低8位 */
RCAP2H = ucBaundHigh; /* 串口0重载计数器高8位 */
}
/*********************************************************************
函数名: void Timer0_ISR()
功能: 定时器0 中断服务程序
输入: None
输出: None
返回: None
日期: 2004/02/09
*********************************************************************/
void Timer0_ISR() interrupt 1
{ // 重载定时器计数值
_nop_();
_nop_();
TL0 = TIMER0_LOW_BYTE; // 定时10ms
TH0 = TIMER0_HIGH_BYTE;
if(Key_flag == TRUE) //按键延时三分钟的标志位
{
KeyDelayCount++;
}
++Ms10FlagCount;
if(DelayMSFlag) //10MS定时标志位,开始记时
{
++DelayMsCount;
}
if(Rcv_flag) //串口接收标志位
{
RcvDelayCount++;
if(RcvDelayCount > 10)
{
RcvDelayCount = 0;
RcvCount = 0;
Rcv_ok = TRUE;
Rcv_flag = FALSE;
}
}
MS10_Flag = TRUE; //设置10MS标志位一个
}
/*********************************************************************
函数名: void Timer1_ISR()
功能: 定时器1 中断服务程序
输入: None
输出: None
返回: None
日期: 2004/02/09
*********************************************************************/
void Timer1_ISR() interrupt 3
{ /* 重载定时器计数值 */
_nop_();
_nop_();
Led = ~Led; // 无冲突时1s闪烁
TL1 = TIMER1_LOW_BYTE; /* 定时1ms */
TH1 = TIMER1_HIGH_BYTE;
//TF1 = FALSE; /// 硬件自动清除,清定时器1中断标志 */
}
/*********************************************************************
函数名: void DelayMs(UWORK16 ucTick)
功能: 10ms为单位的延时程序
输入: ucTick
输出: None
返回: None
日期: 2004/02/04
*********************************************************************/
void DelayMs(UWORK16 usTick)
{
DelayMsCount = 0; /* gus10MsTick在10ms定时器中累加 */
DelayMSFlag = TRUE; //启动定时标志位
usTick <<= 1;
while(1)
{
ET0 = FALSE; // 禁止timer0中断
if(DelayMsCount >= usTick)
{
ET0 = TRUE; // 使能timer0中断
break;
}
ET0 = TRUE; // 使能timer0中断
// WDTCONTR |= CLR_WDT; //复位看门狗定时器
}
DelayMSFlag = FALSE; //结束定时标志位
}
/*********************************************************************
函数名: void Delay(UWORK8 ucCount)
功能: 软件延时程序
输入: 延时计数器
输出: None
返回: None
日期: 2004/10/12
*********************************************************************/
void Delay(UWORK8 ucCount)
{
UWORK16 usTemp,usFree = 0;
UWORK8 ucTemp;
for(ucTemp = 0; ucTemp < ucCount; ucTemp++)
{
for(usTemp = 0; usTemp < 3000; usTemp++)
{
usFree++;
}
}
}
/*********************************************************************
函数名: void ResetSystem(void)
功能: 复位系统
输入: None
输出: None
返回: TRUE or FALSE
日期: 2004/02/09
*********************************************************************/
void ResetSystem(void)
{
Delay(200);
EA = FALSE; //关闭中断总开关 /* 关闭全部中断 */
WDTCONTR |= CLR_WDT; //复位看门狗定时器 /* 在复位前喂一次狗,可以精确2S后复位 */
while(1);
}
/************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -