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

📄 eth.lst

📁 一个通过8051来控制8019上网的程序 该程序已经通过并成功用于键盘
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   ETH                                                                   06/26/2004 13:41:25 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE ETH
OBJECT MODULE PLACED IN ETH.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ETH.C LARGE BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //-----------------------------------------------------------------------------
   2          // Net ETH.C
   3          //
   4          // This module is the Ethernet layer
   5          //-----------------------------------------------------------------------------
   6          #include <string.h>
   7          #include <stdlib.h>
   8          #include <stdio.h>
   9          #include <reg89C58.h>
  10          #include <absacc.h>
  11          #include "net.h"
  12          #include "arp.h"
  13          #include "ip.h"
  14          #include "eth.h"
  15          
  16          
  17          #define reg00   XBYTE[0xc000]  
  18          #define reg01   XBYTE[0xc100]
  19          #define reg02   XBYTE[0xc200]
  20          #define reg03   XBYTE[0xc300]
  21          #define reg04   XBYTE[0xc400]
  22          #define reg05   XBYTE[0xc500]
  23          #define reg06   XBYTE[0xc600]
  24          #define reg07   XBYTE[0xc700]
  25          #define reg08   XBYTE[0xc800]
  26          #define reg09   XBYTE[0xc900]
  27          #define reg0a   XBYTE[0xca00]
  28          #define reg0b   XBYTE[0xcb00]
  29          #define reg0c   XBYTE[0xcc00]
  30          #define reg0d   XBYTE[0xcd00]
  31          #define reg0e   XBYTE[0xce00]
  32          #define reg0f   XBYTE[0xcf00]
  33          #define reg10   XBYTE[0xd000]
  34          
  35          
  36          bit txd_buffer_select=0;                
  37          extern UCHAR idata debug;
  38          extern UCHAR xdata arpbuf[];
  39          extern UCHAR data my_hwaddr[]; 
  40          
  41          void Delay1ms(unsigned char T);
  42          void delay(UINT );
  43          extern UCHAR idata rcve_buf_allocated;
  44          extern UINT volatile event_word;
  45          
  46          sbit RST8019=P3^2;
  47          
  48          //------------------------------------------------------------------------
  49          // Initialize the Cirrus Logic 8019 chip
  50          //------------------------------------------------------------------------
  51          
  52          void page(unsigned char pagenumber)
  53          {
  54   1              unsigned char data temp;
  55   1              temp=reg00;             
C51 COMPILER V7.06   ETH                                                                   06/26/2004 13:41:25 PAGE 2   

  56   1              temp=temp&0x3B ;
  57   1              pagenumber=pagenumber <<6;
  58   1              temp=temp | pagenumber;
  59   1              reg00=temp;
  60   1      }
  61          
  62          void Rtl8019AS_Reset() 
  63          {
  64   1              RST8019=1;
  65   1       delay(10000);
  66   1      
  67   1                      
  68   1      /*
  69   1              Delay1ms(200);
  70   1              Delay1ms(200);
  71   1              Delay1ms(200);
  72   1              Delay1ms(200);
  73   1      */
  74   1              RST8019=0;
  75   1       delay(10000);
  76   1              /*
  77   1      Delay1ms(100);
  78   1              Delay1ms(200);
  79   1              Delay1ms(200);
  80   1              Delay1ms(200);
  81   1      */
  82   1      }
  83          
  84          void ReadRtl8019NodeID(void)
  85          {
  86   1              unsigned char data i;
  87   1              page(0);
  88   1              reg09=0;        
  89   1              reg08=0;
  90   1              reg0b=0;
  91   1              reg0a=12;       
  92   1              reg00=0x0a;     
  93   1              for (i=0;i<6;i++)
  94   1              { 
  95   2      //      my_hwaddr[i]=reg10;
  96   2      //      my_hwaddr[i]=reg10;
  97   2              }
  98   1      }
  99          
 100          void WriteRtl8019NodeID()
 101          {
 102   1              page(1);
 103   1              reg01=my_hwaddr[0];
 104   1              reg02=my_hwaddr[1];
 105   1              reg03=my_hwaddr[2];
 106   1              reg04=my_hwaddr[3];
 107   1          reg05=my_hwaddr[4];
 108   1          reg06=my_hwaddr[5];
 109   1              page(0);
 110   1      }
 111          
 112          
 113          void init_8019(void)
 114          {
 115   1      
 116   1              Rtl8019AS_Reset();              
 117   1      //      R8019_CHIP_SELECT;
C51 COMPILER V7.06   ETH                                                                   06/26/2004 13:41:25 PAGE 3   

 118   1              reg00=0x21;                             
 119   1              page(0);
 120   1              reg0a=0x00;     reg0b=0x00;
 121   1              reg0c= 0xe0;                    
 122   1              reg0d= 0xe2;                    
 123   1              reg01=0x4c;     reg02=0x80;     reg03=0x4c;     reg04=0x40;
 124   1              reg07=0xff;                             
 125   1              reg0f=0x00;                     
 126   1              reg0e=0xc8;                             
 127   1              page(1);
 128   1              reg07=0x4d;     reg08=0x00;     reg09=0x00;     reg0a=0x00;     reg0b=0x00;     
 129   1              reg0c=0x00;     reg0d=0x00;     reg0e=0x00;     reg0f=0x00;
 130   1              reg00=0x22;                             
 131   1              ReadRtl8019NodeID();    
 132   1              WriteRtl8019NodeID();   
 133   1              page(0);
 134   1              reg0c=0xcc;                             
 135   1              reg0d=0xe0;
 136   1              reg00=0x22;                             
 137   1              reg07=0xff;                             
 138   1      }
 139          
 140          //------------------------------------------------------------------------
 141          // This functions checks 8019 status then sends an ethernet
 142          // frame to it by calling an assembler function. 
 143          //------------------------------------------------------------------------
 144          
 145          void send_frame(UCHAR xdata * outbuf, UINT len)
 146          {
 147   1      UCHAR i;
 148   1      UINT ii;
 149   1              page(0);
 150   1              if(len<60)len=60;
 151   1              txd_buffer_select=!txd_buffer_select;
 152   1              if      (txd_buffer_select)
 153   1                      reg09=0x40 ;    //txdwrite highaddress
 154   1              else
 155   1              reg09=0x46 ;    //txdwrite highaddress
 156   1              reg08=0x00;             //read page address low
 157   1              reg0b=len>>8;           //read count high
 158   1              reg0a=len&0xff;         //read count low;
 159   1              reg00=0x12;                     //write dma, page0
 160   1              for     (ii=0;ii<len;ii++)      
 161   1              {
 162   2                 reg10=*(outbuf+ii);  
 163   2              }
 164   1      
 165   1              
 166   1              reg0b=0x00;             //read count high  
 167   1              reg0a=0x00;             //read count low;
 168   1              reg00=0x22;             //complete dma page 0
 169   1      
 170   1              for(i=0;i<16;i++)       
 171   1              {
 172   2                      for(ii=0;ii<1000;ii++)  
 173   2                      {
 174   3                              if ((reg00&0x04)==0) break;
 175   3                      }
 176   2                      if ((reg04&0x01)!=0) break;     
 177   2                      reg00=0x3e;
 178   2              }
 179   1              reg07=0xff;
C51 COMPILER V7.06   ETH                                                                   06/26/2004 13:41:25 PAGE 4   

 180   1              if(txd_buffer_select)

⌨️ 快捷键说明

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