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

📄 main.c

📁 RTL8019以太网开发板资料
💻 C
📖 第 1 页 / 共 2 页
字号:
/************************************************************************   
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"
#include "lcd.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 main(void)
{
    UWORK8 ucTemp;  
                                                        /* 上电复位运行灯和告警灯快闪8下 */
    for(ucTemp = 0; ucTemp < 30; ucTemp++)
    {
		Delay(10);
        Led = ~Led;
    }

	ucTemp = sizeof(Setup_Parameter);
    Led = OFF;		  						//关掉LED
    InitCPU();								//初始化CPU
	LCD_Init(); //LCM初始化 
	FlashCheck();			//检测Flash数据
    InitSerial();            // 初始化串口 
    InitPara();              // 初始化网口,串口参数 
	init_tcp();				//初始化TCP接收组别
//	init_http();
	if(ERROR == RTL8019asInit()) 
	{
		LCD_DisplayString(1, 0, "RTL8019Init_ERR");   //在第一行显示"RTL8019Init_ERR" 
		DelayMs(1000);  
        ResetSystem();             
	}
	if(ERROR == RTL8019asCheck()) 			   // 以太网芯片环回自测
	{
		LCD_DisplayString(1, 0, "RTL8019Check_ERR");   //在第一行显示"RTL8019Check_ERR" 
		DelayMs(1000); //启动等待,等LCM讲入工作状态 
        ResetSystem();              // 初始化以太网芯片 
	}
    WDTCONTR |= CLR_WDT;   //复位看门狗定时器
	StopTimer(13); 
    ucTemp = 0; 
	LinkFlag = 0;
	Rs485En = FALSE;		//485通信使能
    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();                          // 处理相对定时器中的事务            
        }
		LCD_DisplayString(0, 0, "IP:192.168.1.111");   //在第一行显示"RTL8019Check_ERR" 
		LCD_DisplayString(0, 1, "ip:192.168.1.100");      //在第二行显示"hxl_raien." 
    }
}
/*********************************************************************
函数名:       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

⌨️ 快捷键说明

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