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

📄 89c52ctr.lst

📁 使用51单片机实现TCP/IP协议,模块化编程
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.12  89C52CTR                                                               05/16/2008 11:16:47 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE 89C52CTR
OBJECT MODULE PLACED IN .\89C52ctr.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\89C52ctr.c DEBUG OBJECTEXTEND

stmt level    source

   1          #include "GloblDef.h"
   2          //#include "RTL8019.h"
   3          #include  "AT89X52.h"
   4          #include  "math.h"
   5          extern byte MemAllocation(word size);
*** ERROR C141 IN LINE 5 OF .\89C52CTR.C: syntax error near 'size', expected ')'
*** ERROR C129 IN LINE 5 OF .\89C52CTR.C: missing ';' before ')'
   6          extern void FreePage(byte page);
   7          extern byte xdata *MemPageToPoint(byte page);
   8          extern byte WriteQueue(byte page,stuct queue xdata *pQueue);
   9          
  10          byte xdata LocalMACAddr[6]={0x52,0x68,0x3a,0x1c,0x2b,0x56};
  11          struct Queue xdata QueueNetPacketIn;
  12          byte StartPageOfPacket;
  13          
  14          
  15          
  16          
  17          /*接收头文件信息*/
  18          struct RTLReceiveHeader
  19          {
  20             byte ReceiveStatus;
  21          	byte NextPacketStartPage;
  22          	byte PacketSizeLow;
  23          	byte PacketSizeHigh;
  24          }Head;   
  25          byte xdata Head[4];
  26          byte LastSendStartPage;
  27          sbit RTLResetPin = RTL_RESET_PIN;
  28                              
  29          
  30          //读rtl寄存器端口
  31          byte ReadReg(word port)
  32          {
  33              byte xdata *p;
  34          	 p=(byte xdata *)port;   //强制类型转换,为什么不是p=byte xdata port;
  35               
  36          	 return *p;
  37          }
  38          
  39          
  40          void WriteReg(word port,byte value)
  41          {
  42              byte xdata *p;
  43          	 p=(byte xdata *)port;
  44          	 *p=value;
  45          }
  46          
  47          
  48          //chose page
  49          void RTLPage(byte Index)
  50          {
  51                   //set cr,cr_txp 7--6bit0 (1,resend)
  52             byte temp;
  53          	temp=ReadReg(CR);
C51 COMPILER V6.12  89C52CTR                                                               05/16/2008 11:16:47 PAGE 2   

  54          	temp=temp&0x3b;    //set 7-6 and 2 bit(TXP) to 0
  55             Index=Index<<6;      //把页码左移到ps1,ps0 实现选择 ^^;
  56          	temp =temp | Index;
  57          	WriteReg(CR,temp);
  58          }
  59          
  60          
  61                        //PRA为物理地址//
  62          void RTLInitial()
  63          {
  64               byte temp;
  65               int   i;
  66          
  67               /*硬件重启*/
  68          	  RTLResetPin=1;
  69          	  for(i=0;i<255;i++);               //延迟时间让高电平持续1us以上
  70          	  RTLResetPin=0;                    //再给个低电平,从而复位RTL
  71          	  /*若硬件重启延迟很大,rtl自我初始化*/
  72               for(i=0;i<DELAY_AFTER_HARDWARE_RESET;i++);   //复位过程需要一些时间推荐100ms
  73          
  74              /*写重启口*/
  75                temp=ReadReg(RESET_PORT);
  76          	  WriteReg(RESET_PORT,temp);//软件复位通过写ResetPort达到复位,也就是给18~1F之间的任意一个寄存器写入任意
             -一个数,就使得以太网口复位
  77          
  78          	/*初始化rtl寄存器*/
  79               WriteReg(CR,(CR_PAGE0 | CR_ABORT_COMPLETE_DMA | CR_STOP_COMMAND));
  80          	                    //选择page0,stop command
  81          
  82               WriteReg(PSTART_WPAGE0,RECEIVE_START_PAGE);
  83          	  WriteReg(PSTOP_WPAGE0, RECEIVE_STOP_PAGE);
  84          	  WriteReg(BNRY_WPAGE0, RECEIVE_START_PAGE);
  85          	  WriteReg(TPSR_WPAGE0, SEND_START_PAGE0);//Pstart,Pstop,bnry,tpsr
  86          	       
  87          	  WriteReg(RCR_WPAGE0, 0XCE);
  88          	  WriteReg(TCR_WPAGE0, 0XE0);
  89          	  WriteReg(DCR_WPAGE0, 0XC8);      //RCR,TCR,DCR在头文件里定义
  90          
  91          	  WriteReg(IMR_WPAGE0,0);         //RTL接收中断使能
  92          	  WriteReg(ISR_WPAGE0, 0XFF);     //写ff清除所有中断标志
  93          
  94          	  RTLPage(1);
  95          
  96          	  WriteReg(CURR_WPAGE,RECEIVE_START_PAGE+1);
  97          	                                   //MAR0
  98               WriteReg(0x08,0x00);
  99          	  WriteReg(0x09,0x41);
 100          	  WriteReg(0x0a,0x00);
 101          	  WriteReg(0x0b,0x80);
 102               WriteReg(0x0c,0x00);
 103               WriteReg(0x0d,0x00);
 104               WriteReg(0x0e,0x00);
 105          	  WriteReg(0x0f,0x00);
 106                                          //设置物理地址
 107          	  WriteReg(PRA0_WPAGE1,LocalMACAddr[0]);
 108          	  WriteReg(PRA1_WPAGE1,LocalMACAddr[1]);
 109          	  WriteReg(PRA2_WPAGE1,LocalMACAddr[2]);
 110          	  WriteReg(PRA3_WPAGE1,LocalMACAddr[3]);
 111          	  WriteReg(PRA4_WPAGE1,LocalMACAddr[4]);
 112          	  WriteReg(PRA5_WPAGE1,LocalMACAddr[5]);
 113          	                            //传输起始页
 114               LastSendStartPage=SEND_START_PAGE0;
C51 COMPILER V6.12  89C52CTR                                                               05/16/2008 11:16:47 PAGE 3   

 115          	  StartPageOfPacket=RECEIVE_START_PAGE+1;
 116          	                          //初始化结束
 117               WriteReg(CR,(CR_PAGE0|CR_ABORT_COMPLETE_DMA|CR_STOP_COMMAND));
 118          }
 119          
 120          
 121          
 122          //写buffer到rtl ram
 123          void RTLWriteRam(word address,word size,byte xdata *buff)
 124          {
 125               word i;
 126          	  byte PrePage; //store page
 127          	  Prepage=ReadReg(CR);
 128          	  RTLPage(0);
 129          	  WriteReg(RSARH_WPAGE0,(byte)((address>>8)&0x00ff));
 130          	  WriteReg(RSARL_WPAGE0,(byte)address);
 131          	  WriteReg(RBCRH_WPAGE0,(byte)((size>>8)&0x00ff));
 132          	  WriteReg(RBCRL_WPAGE0,(byte)size);
 133          	  WriteReg(CR,(0x00|CR_REMOTE_WRITE|CR_START_COMMAND));
 134          	  for(i=0;i<size;i++)
 135          	  {
 136          	      WriteReg(REMOTE_DMA_PORT,buff[i]);
 137          	  }
 138          	                   //完成DMA
 139          	 WriteReg(RBCRH_WPAGE0,0);
 140          	 WriteReg(RBCRL_WPAGE0,0);
 141          	 WriteReg(CR,((PrePage&0xc0)|CR_ABORT_COMPLETE|CR_STARAT_COMMAND));
 142          }
 143                              
 144          
 145                              //读rtl ram 数据到 buffer
 146          void  RTLReadRam(word address,word size,byte xdata *buff)
 147          {
 148                word i;
 149          		byte PrePage;
 150          
 151          		PrePage=ReadReg(CR);
 152          		RTLPage(0);
 153          	  WriteReg(RSARH_WPAGE0,(byte)((address>>8)&0x00ff));
 154          	  WriteReg(RSARL_WPAGE0,(byte)address);
 155          	  WriteReg(RBCRH_WPAGE0,(byte)((size>>8)&0x00ff));
 156          	  WriteReg(RBCRL_WPAGE0,(byte)size);
 157          	  WriteReg(CR,(0x00|CR_REMOTE_READ|CR_START_COMMAND));
 158          	  for (i=0;i<size;i++)
 159          	  {
 160          	       buff[i]=ReadReg(REMOTE_DMA_PORT);
 161          	  }
 162          	             //完成dma
 163          	 WriteReg(RBCRH_WPAGE0,0);
 164          	 WriteReg(RBCRL_WPAGE0,0);
 165          	 WriteReg(CR,((PrePage&0xc0)|CR_ABORT_COMPLETE|CR_STARAT_COMMAND));
 166          }
 167          
 168          
 169          byte RTLSendPacket(byte xdata *buffer,word size)
 170          {
 171               byte StartPage;
 172          	  byte PrePage;
 173          	  PrePage=ReadReg(CR);
 174                                        //检测包大小
 175              if(size<MIN_PACKET_SIZE||size>MAX_PACKET_SIZE)
 176          	    return FALSE;
C51 COMPILER V6.12  89C52CTR                                                               05/16/2008 11:16:47 PAGE 4   

 177          		                         //写包到ram

⌨️ 快捷键说明

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