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

📄 main.c

📁 RTL8019以太网开发板资料
💻 C
📖 第 1 页 / 共 2 页
字号:
返回:         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 + -