main.c

来自「RTL8019以太网开发板资料」· C语言 代码 · 共 416 行 · 第 1/2 页

C
416
字号
    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标志位一个
	if(Test_Flag == 0x11)	  //测试LED灯
	{
		TestCount++;
		if(TestCount > 20)
		{
			TestCount = 0;
			TEST_LED = !TEST_LED;
		}
	}	
}
/*********************************************************************
函数名:       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);
}
void ResetUart(void)
{
    UWORK8 ucTemp;  
	for(ucTemp = 0; ucTemp < 30; ucTemp++)
    {
		Delay(10);
        Led = ~Led;
        WDTCONTR |= CLR_WDT;   //复位看门狗定时器 
    }

    REN = TRUE;    // 串口接收使能
    ES = TRUE;       // 使能串口中断
	RcvDelayCount = 0;
	RcvCount = 0;
	Rcv_ok = FALSE;
	Rcv_flag = FALSE;
	for(ucTemp = 0; ucTemp < 10; ucTemp++)
    {
		Delay(10);
        Led = ~Led;
        WDTCONTR |= CLR_WDT;   //复位看门狗定时器 
    } 
}

/************************************************************************/
/************************************************************************/
//       主程序
/************************************************************************/
void main(void)
{
    UWORK8 ucTemp;  
                                                        /* 上电复位运行灯和告警灯快闪8下 */
    for(ucTemp = 0; ucTemp < 30; ucTemp++)
    {
		Delay(10);
        Led = ~Led;
    }

	ucTemp = sizeof(Setup_Parameter);
    Led = OFF;		  						//关掉LED
    InitCPU();								//初始化CPU
	FlashCheck();			//检测Flash数据
    InitSerial();            // 初始化串口 
    InitPara();              // 初始化网口,串口参数 
	init_tcp();				//初始化TCP接收组别
//	init_http();
	if(ERROR == RTL8019asInit())        ResetSystem();              // 初始化以太网芯片 
	if(ERROR == RTL8019asCheck())       ResetSystem();               // 以太网芯片环回自测 
    WDTCONTR |= CLR_WDT;   //复位看门狗定时器
	StopTimer(13); 
    ucTemp = 0; 
	LinkFlag = 0;
	ResetUart();
    while(1)
    {
        // ................. 读网口数据,劈以太网帧 .............................                   
        RcvEthernetData();   

       if(OK == If8019SendReady())                   // 以太网发送准备好 
        { 
           if(0 != Rcv_ok)               // 串口接收队列不为空 
            {                                           // 将串口接收到的数据发往数据库 
		        WDTCONTR |= CLR_WDT;   //复位看门狗定时器 
				TcpFromSeries(&Rcv_buf[0],RcvLen);
			    Rcv_ok = 0;
            } 
        }

        // ............................. 软件定时器处理 .............................
        
       if(MS10_Flag)                                     //每10MS处理1次 
        {
            SystemTimerProc();                          // 处理相对定时器中的事务            
        }
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?