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

📄 main.lst

📁 RTL8019AS以太网控制器以寄存器(16K的RAM)为核心
💻 LST
字号:
C51 COMPILER V7.06   MAIN                                                                  12/07/2004 08:46:36 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c DEBUG OBJECTEXTEND

stmt level    source

   1          /*********************************************************************
   2           *文件名称:     main.c
   3           *文件标识: 
   4           *摘    要: 主程序,  串口工作在中断方式的接收和发送,可通过串口显示相关信息以及输入信息
   5           *
   6           *********************************************************************/
   7          
   8          /**********************************************************************************************/
   9          
  10          #include "net_cfg.h"
  11          //#include "global.c"           //全局变量以及以太网底层驱动程序
  12          //#include "uart.c"     //串口相关的程序
  13          //#include "arp.c"              //地址解析程序
  14          //#include "udp.c"              //
  15          //#include "icmp.c"             //ping操作的程序
  16          //#include "tcp.c"              //
  17          //#include "input.c"            //串口服务器数据接收程序
  18          //=============================================================================================
  19          
  20          sfr ckcon=0x8f;
  21          
  22          
  23          main()
  24          {
  25   1      unsigned char i;
  26   1      ckcon=0x01;
  27   1      AUXR = 0x00;            
  28   1      RESET=0;
  29   1      Delay_MS(60);
  30   1      RESET=1;
  31   1      Delay_MS(60);
  32   1      RESET=0;
  33   1      /*********************************************************************************
  34   1      用户可在下面的程序中修改IP地址,只要输入您要设定的IP地址和网关地址分别代替下面程序中
  35   1      字符串的值即可
  36   1      *********************************************************************************/                              
  37   1      My_Ip_Address.dwords = IP_SETTING;//函数的参数就是IP地址,可以直接设定       
  38   1      Gateway_Ip_Address.dwords = GATEWAY_SETTING;    //可在此设置合适的网关值
  39   1      Mask_Ip_Address.dwords=IP_MARK_SETTING;                 //255.255.255.0,子网掩码
  40   1      
  41   1      /********************************************************************************/
  42   1      
  43   1      initial_system();
  44   1      
  45   1      Printf_String("\r\n**************WWW.Teamkit.COM***************");
  46   1      Printf_String("\r\n**************欢迎使用本实验系统*****(**********");
  47   1      Printf_String("\r\n**********这是一个TCP/IP的实验程序***************");
  48   1      Printf_String("\r\nLocalHost IP = ");
  49   1      Printf_IPStr(My_Ip_Address);
  50   1      Printf_String("\r\nGateWay IP = ");
  51   1      Printf_IPStr(Gateway_Ip_Address);
  52   1      Printf_String("\r\nSubNet Mask= ");
  53   1      Printf_IPStr(Mask_Ip_Address);
  54   1      Printf_String("\r\n");
  55   1      
C51 COMPILER V7.06   MAIN                                                                  12/07/2004 08:46:36 PAGE 2   

  56   1      while(1)
  57   1      {
  58   2              //超时处理把Tcp_Timeout清零Tcp_Timeout每10ms由定时器置位
  59   2              if(Tcp_Timeout)Process_Tcp_Timeout();//处理TCP超时,Tcp_Timeout标志在中断中置位
  60   2              //Process_Tcp_Timeout()每10ms处理一次
  61   2              if(BiSecond)
  62   2              { //两秒处理一次
  63   3                      BiSecond=0;
  64   3                      if(TCP1024.State==0)    //本地机处于监听状态
  65   3                      process_command();      //处理串口输入,可引发本地发起通讯
  66   3                      Process_Ping();
  67   3                      Process_Udp_Command();  //
  68   3                      Gateway_Arp_Request();  //对网关的IP进行解析
  69   3              }
  70   2      
  71   2              for(i=0;i<5;i++)
  72   2              {//检查是否有新的数据包收到,如果有将置位have_new_packet,并将数据包接收进由RxdNetBuff指向的缓冲区
  73   3                      if(Rec_NewPacket())
  74   3                      {
  75   4                              if(RxdNetBuff.EtherFrame.NextProtocal==0x0806)          //表示收到一个arp请求包
  76   4                              {
  77   5                                      if(RxdNetBuff.ArpFrame.Operation==0x0001)               //表示收到的数据包是一个ARP请求报文
  78   5                                      {
  79   6                                      Arp_Answer();
  80   6                              }       //对ARP请求报文进行回答
  81   5                              else if( RxdNetBuff.ArpFrame.Operation==0x0002) //表示收到的数据包是一个ARP回答报文
  82   5                              {
  83   6                                      Arp_Process();
  84   6                              }//对ARP回答报文进行处理        
  85   5                              }
  86   4                              else if(RxdNetBuff.EtherFrame.NextProtocal==0x0800)     //表示收到的数据包是一个IP数据报
  87   4                              if((RxdNetBuff.IpFrame.VerandIphLen&0xf0)==0x40)        //表示收到的IP数据报是IPv4版本
  88   4                              if(VerifyIpHeadCrc())   //IP首部校验和正确
  89   4                      {                                       //这时表示正确地接收到一个ip包,下面按照IP的下层协议类型进行相应处理
  90   5                                      switch(RxdNetBuff.IpFrame.NextProtocal)
  91   5                              {
  92   6                                      case 1:                 //表示收到的IP数据报为ICMP查询报文(本程序仅对PING操作进行处理)
  93   6                                      if(RxdNetBuff.IcmpFrame.type==8)                //表示收到的ICMP报文是一个ping的请求包
  94   6                                      {
  95   7                                                              Ping_Answer();
  96   7                                                      }                                       //PING回答
  97   6                                                      else if(RxdNetBuff.IcmpFrame.type==0)   //表示收到的ICMP报文是一个ping的应答包
  98   6                                              {
  99   7                                                              Ping_Echo();
 100   7                                                      }                                               //PING操作的信息在本地回显,本程序通过串口实现
 101   6                                                      break;
 102   6                                      case 6:                 //IPFrame的下层协议字段为6表示下层协议为TCP,表示收到TCP报文
 103   6                                      Process_Tcp();
 104   6                                              break;
 105   6                                      case 0x11:              //IPFrame的下层协议字段为17表示下层协议UDP,表示收到UDP报文
 106   6                                          Process_Udp();
 107   6                                          break;
 108   6                                      default:;
 109   6                                      }
 110   5                      }
 111   4                      }
 112   3              }
 113   2      }
 114   1      }
 115          
 116          /**********************************************************************
 117          **函数原型:     void    timer0() interrupt 1
C51 COMPILER V7.06   MAIN                                                                  12/07/2004 08:46:36 PAGE 3   

 118          **入口参数:     无
 119          **出口参数:     无
 120          **返 回 值:     无
 121          **说    明:     中断函数,10ms中断一次,进行ARP老化处理,设置TCP超时
 122          ************************************************************************/
 123          void timer0() interrupt 1
 124          {
 125   1      //工作在16位定时模式,中断时间为10毫秒中断一次,误差小于千分之1,晶振使用22.1184Mhz
 126   1      tl0=9;
 127   1      th0=184;
 128   1      Msec++;
 129   1      Tcp_Timeout=1;  //置位TCP超时标志
 130   1      if(Msec==100){  //100分频,就是1秒一次
 131   2                     Msec=0;
 132   2                                 Sec++;
 133   2                                 BiSecond=1;          //置位两秒标志
 134   2                                 if(Sec==60){Sec=0;   //每分钟一次
 135   3                                             Min++;
 136   3                                             if(Min==60)Min=0;
 137   3                                                         //网关和PING操作对象主机的以太网地址生存时间每秒减一,实际上是ARP老化操作简单处理
 138   3                                 if(Gateway_IP_TTL>0)Gateway_IP_TTL=Gateway_IP_TTL-1;
 139   3                                         if(Ping_IP_TTL>0)Ping_IP_TTL=Ping_IP_TTL-1;
 140   3                                             }
 141   2      
 142   2                    }
 143   1      
 144   1      }
 145          
 146          /**********************************************************************
 147          **函数原型:     void    serial(void) interrupt 4
 148          **入口参数:     无
 149          **出口参数:     无
 150          **返 回 值:     无
 151          **说    明:     串口中断函数:中断函数在接收中断处理中将接收数据放到接收缓冲区
 152          **                :     接收缓冲区ComRxdBuf大小可根据需要进行调整,由两个指针管理
 153                                  ComRxdWrite和ComRxdRead进行管理;在发送中断处理中将数据由发送
 154                                  缓冲区输出到串口,输出缓冲区由指针ComTxdRead和ComTxdWrite管理.
 155                                  在global.c定义了一组对缓冲区进行操作的程序.
 156          ************************************************************************/
 157          void serial(void) interrupt 4
 158          { unsigned char temp;
 159   1      if(ti) {        //串口发送中断处理
 160   2                      ti=0;
 161   2              if(ComTxdRead!=ComTxdWrite)//发缓区有数据,继续发送数据
 162   2                              {sbuf=ComTxdBuf[ComTxdRead];
 163   3                       ComTxdRead++;
 164   3                       if(ComTxdRead==COM_TXD_BUFF_SIZE)
 165   3                                      ComTxdRead=0;
 166   3                       ComTxdBufempty=0;
 167   3                  }
 168   2              else 
 169   2                              {ComTxdBufempty=1;}
 170   2             }
 171   1      if (ri){        //串口接收中断处理
 172   2                      ri=0;
 173   2              temp=sbuf;
 174   2              ComRxdBuf[ComRxdWrite]=temp;
 175   2              if(!TcpConnected)
 176   2                              { Printf_Char(temp);}
 177   2              ComRxdWrite++;
 178   2              if(ComRxdWrite==COM_TXD_BUFF_SIZE)
 179   2                              ComRxdWrite=0;
C51 COMPILER V7.06   MAIN                                                                  12/07/2004 08:46:36 PAGE 4   

 180   2              if(temp==0x0d)
 181   2                      {if(!TcpConnected)
 182   3                                      {Printf_Char(0x0a);}
 183   3                  }
 184   2      
 185   2                      }
 186   1      }
 187          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    621    ----
   CONSTANT SIZE    =    228    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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