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

📄 global.lst

📁 51单片机上实现tcp/ip的源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.06   GLOBAL                                                                05/27/2008 11:02:05 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE GLOBAL
OBJECT MODULE PLACED IN .\RUN\global.obj
COMPILER INVOKED BY: D:\Keil7_06\C51\BIN\C51.EXE global.c OBJECT(.\RUN\global.obj)

stmt level    source

   1          /*********************************************************************
   2           *            Copright(c) 2004,张会福 湖南科技大学计算机学院 
   3           *                        All rights reserved.
   4           *
   5           *文件名称:    global.c
   6           *文件标识: 
   7           *摘    要: 定义全局变量,网络底层驱动程序,校验和计算,处理器相关设定
   8           *
   9           *当前版本: V1.0
  10           *作    者: 张会福
  11           *完成日期: 2004.4.10
  12           *
  13           *********************************************************************/
  14          
  15          /*********************************************************************
  16           *                            公共变量定义
  17           *
  18           ********************************************************************/
  19          //#include "uart.c"
  20          #define  GLOBAL_GLOBALS
  21          #include "net_cfg.h"
  22          
  23          
  24          /****************************************************************/
  25          uchar   Ping_Count;         //ping的次数,决定本地回显次数
  26          uchar   Ping_IP_TTL=0;      //ping的主机的物理地址生存时间,单位分钟,为0表示IP地址没有解析
  27          uchar   Gateway_IP_TTL=0 ;  //网关IP地址的物理地址生存时间,单位分钟
  28                                      //=0表示还没有解析,<5分钟时需要更新
  29                      
  30          uchar   Udp_Count;
  31          uchar   Msec=0;             //10毫秒
  32          uchar   Sec=0;              //秒钟
  33          uchar   Min=0;              //分钟
  34          uchar   i=0;
  35          uchar   bnry;               //读芯片RAM指针
  36          uchar   curr;               //写芯片RAM指针
  37          uchar   RtTime=20;          //重发时间
  38          uchar   Tcp_Drop_Count=0;   //用于关闭tcp连接的计数
  39          uint    FrameIndex=0;       //IP包的序列号
  40          uint    ComRxdRead=0;       //串口接收读指针
  41          uint    ComTxdRead=0;       //串口发送读指针
  42          uint    ComRxdWrite=0;      //串口接收写指针
  43          uint    ComTxdWrite=0;      //串口发送写指针
  44          
  45          bit     ComTxdBufempty=0;   //串口发送缓冲区数据空的标志
  46          bit     Tx_Buff_Sel=0;      //芯片的发送缓冲区选择
  47          bit     BiSecond;           //两秒时,该标志置1
  48          bit     Tcp_Timeout=0;      //TCP超时标志,定时器0中断中将该标志置位
  49          bit     TcpConnected=0;     //TCP连接建立标志
  50          
  51          uchar   code    MacID[6]=MY_MAC_ID;//将RTL8019的物理地址存储在程序空间中
  52          uchar   code    HexTable[]={"0123456789ABCDEF"}; //为ascii->hex的转换表
  53          xdata   uchar   Command_Buf[COMMAND_BUFF_SIZE];  //命令缓冲区
  54          xdata   uchar   IpStr[16]; 
  55          xdata   uchar   PortStr[5];
C51 COMPILER V7.06   GLOBAL                                                                05/27/2008 11:02:05 PAGE 2   

  56          xdata   struct  Socket_Type TCP1024;
  57          
  58          xdata   uchar   ComRxdBuf[COM_RXD_BUFF_SIZE];    //串口的接收缓冲区
  59          xdata   uchar   ComTxdBuf[COM_TXD_BUFF_SIZE];    //串口的发送缓冲区
  60          
  61          xdata   union   Netcard  RxdNetBuff;             //数据接收缓冲区
  62          xdata   union   Netcard  TxdNetBuff;             //数据发送缓冲区
  63          xdata   union   Netcard  Resend_Buff;
  64          
  65          xdata   union   Ethernet_Address_Type My_MAC  ;      //本机的物理地址
  66          xdata   union   Ethernet_Address_Type Gateway_MAC;   //网关的物理地址
  67          xdata   union   Ethernet_Address_Type Ping_MAC;      //PING的物理地址
  68          
  69          xdata   union   Ip_Address_Type My_Ip_Address ;      //本机IP地址
  70          xdata   union   Ip_Address_Type Gateway_Ip_Address;  //网关IP地址
  71          xdata   union   Ip_Address_Type Mask_Ip_Address;     //子网掩码
  72          xdata   union   Ip_Address_Type Ping_Ip_Address;     //保存PING命令的目的主机的物理地址
  73          
  74          union   u     RemotePort;
  75          union   w     CrcTemp;
  76          /**********************************************************************
  77          **函数原型:    void   delay_ms(uint ms_number)
  78          **入口参数:    ms_number: 延时的毫秒数
  79          **出口参数:    无
  80          **返 回 值:   无      
  81          **说    明:   延时预定的时间,延时时间与特定的处理器有关
  82          ************************************************************************/
  83          void Delay_MS(uint ms_number)
  84          {
  85   1        uint  i;
  86   1        uint  j;
  87   1        for(j = 0;j < ms_number;j++)
  88   1        for(i = 0;i < 229;i++);
  89   1      }
  90          
  91          /**********************************************************************
  92          **函数原型:   void  page(uchar pagenumber)
  93          **入口参数:   uchar pagenumber: 要切换的页
  94          **出口参数:   无
  95          **返 回 值:  无      
  96          **说    明:  选择页,可选择0,1,2三页,第四页ne000兼容芯片保留 
  97          ************************************************************************/
  98          void page(uchar pagenumber)
  99          {
 100   1        uchar data temp;
 101   1        temp=Reg00;      //command register
 102   1        //temp=temp&0x3f;
 103   1        temp=temp&0x3B ; //注意txp位不能要
 104   1        pagenumber=pagenumber <<6;
 105   1        temp=temp | pagenumber;
 106   1        Reg00=temp;
 107   1      }
 108          
 109          /**********************************************************************
 110          **函数原型:   void SetMacID()
 111          **入口参数:   无
 112          **出口参数:   无
 113          **返 回 值:  无            
 114          **说    明:  设置芯片物理地址,物理地址已经存储在程序空间内 
 115          ************************************************************************/
 116          void SetMacID()
 117          {
C51 COMPILER V7.06   GLOBAL                                                                05/27/2008 11:02:05 PAGE 3   

 118   1        My_MAC.bytes[0] = MacID[0];  //取出物理地址,填充到
 119   1        My_MAC.bytes[1] = MacID[1];
 120   1        My_MAC.bytes[2] = MacID[2];
 121   1        My_MAC.bytes[3] = MacID[3];
 122   1        My_MAC.bytes[4] = MacID[4];
 123   1        My_MAC.bytes[5] = MacID[5];
 124   1        page(1);
 125   1        Reg01 = My_MAC.bytes[0];
 126   1        Reg02 = My_MAC.bytes[1];
 127   1        Reg03 = My_MAC.bytes[2];
 128   1        Reg04 = My_MAC.bytes[3];
 129   1        Reg05 = My_MAC.bytes[4];
 130   1        Reg06 = My_MAC.bytes[5];
 131   1        page(0);
 132   1      }
 133          
 134          /**********************************************************************
 135          **函数原型:   void  Send_Packet(union Netcard *TxdNetBuff,uint length)
 136          **入口参数:   union Netcard *TxdNetBuff    :指向发送缓冲区
 137          **            uint length                  :发送数据包的长度
 138          **出口参数:   无
 139          **返 回 值:  无              
 140          **说    明:  发送数据包,以太网底层驱动程序,所有的数据发送都要通过该程序
 141          ************************************************************************/
 142          void Send_Packet(union Netcard *TxdNetBuff,uint length)
 143          {
 144   1        uchar i;
 145   1        uint ii;
 146   1        page(0);                   //切换至第0页
 147   1        if(length<60)
 148   1            length=60;             //如果数据长度<60字节,设置长度为60字节
 149   1        for(i=0;i<3;i++)           //设置源物理地址
 150   1        {
 151   2            TxdNetBuff->EtherFrame.SourceMacId[i]=My_MAC.words[i];
 152   2        }
 153   1        Tx_Buff_Sel=!Tx_Buff_Sel;  //设置两个发缓区,提高发送效率
 154   1        if(Tx_Buff_Sel)
 155   1            Reg09=0x40 ;           //设置发送页地址
 156   1        else
 157   1            Reg09=0x46 ;           //设置发送页地址
 158   1        
 159   1        Reg08=0x00;                //read page address low
 160   1        Reg0b=length>>8;           //read count high
 161   1        Reg0a=length&0xff;         //read count low;
 162   1        Reg00=0x12;                //write dma, page0
 163   1      
 164   1        for(ii=4;ii<length+4;ii++)
 165   1        {
 166   2           Reg10=TxdNetBuff->bytes.bytebuf[ii];
 167   2        }
 168   1      /***************************************/
 169   1      //以下为终止DMA操作
 170   1        Reg0b=0x00; 
 171   1        Reg0a=0x00;
 172   1        Reg00=0x22;            //结束或放弃DMA操作
 173   1      /***************************************/
 174   1      
 175   1        for(i=0;i<6;i++)       //最多重发6次
 176   1        {
 177   2            for(ii=0;ii<1000;ii++)
 178   2            {//检查CR寄存器的txp位是否为低,为1说明正在发送,为0说明发完或出错放弃
 179   3                if((Reg00&0x04)==0)  
C51 COMPILER V7.06   GLOBAL                                                                05/27/2008 11:02:05 PAGE 4   

 180   3                    { break; }
 181   3            }
 182   2            if((Reg04&0x01)!=0)//表示发送成功,判断发送状态寄存器TSR,决定是否出错
 183   2                {break;};
 184   2            Reg00=0x3e;
 185   2        }
 186   1      
 187   1        Reg07=0xff;
 188   1        if(Tx_Buff_Sel)
 189   1        {
 190   2            Reg04=0x40;   //txd packet start;
 191   2        }
 192   1        else
 193   1        {
 194   2            Reg04=0x46;   //txd packet start;
 195   2        }
 196   1        Reg06=length>>8;  //high byte counter
 197   1        Reg05=length&0xff;//low byte counter
 198   1        Reg07=0xff;
 199   1        Reg00=0x3e;       //to sendpacket;
 200   1      
 201   1      }
 202          
 203          /**********************************************************************
 204          **函数原型:   bit        Rec_NewPacket()
 205          **入口参数:   无
 206          **出口参数:   无
 207          **返 回 值:  0          没有新数据包
 208          **            1          接收到新数据包
 209          **说    明:  查询是否有新数据包并接收进缓冲区
 210          ************************************************************************/
 211          bit Rec_NewPacket()
 212          {
 213   1        uchar i;

⌨️ 快捷键说明

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