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

📄 appdatatrans.lst

📁 基于STC单片机与MICROCHIP ENC28J60的TCPIP以太网控制器
💻 LST
字号:
C51 COMPILER V8.08   APPDATATRANS                                                          08/22/2008 14:32:50 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE APPDATATRANS
OBJECT MODULE PLACED IN appdatatrans.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE appdatatrans.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "uip.h"
   2          #include "appdatatrans.h"
   3           #include "reg51.h"
   4          #define  DATANUM  200
   5          #ifdef DEBUG
              #include <stdio.h>
              #define PRINT(x) printf("%s", x)
              #define PRINTLN(x) printf("%s\n", x)
              #else /* DEBUG */
  10          #define PRINT(x)
  11          #define PRINTLN(x)
  12          #endif /* DEBUG */
  13             sbit P11 = P1^1;
  14             sbit P10 = P1^0;
  15          #ifdef F_STATISTICS
  16          #if F_STATISTICS == 1
  17          #define BUG_NUM 50
  18          u8_t xdata count_rx[DATANUM]={0};
  19          static u8_t xdata count_tx[DATANUM]={0};
  20          #endif /* F_STATISTICS */
  21          #endif /* F_STATISTICS */
  22          
  23          #define OVER 0
  24          #define READY  1
  25          
  26          #define TURNON  1
  27          #define TURNOFF 0
  28          
  29          #define ISO_G        0x47
  30          #define ISO_E        0x45
  31          #define ISO_T        0x54
  32          struct datatrans_state *s;
  33          static unsigned char UART_state;                        //串口发送状态
  34          static unsigned int UART_len;                                   //串口数据长度
  35           unsigned char *ptr_tx;                                 //串口接收指针
  36          unsigned int temp_len;                                  //串口接收数据长度
  37          extern unsigned char  connect_state;
  38          unsigned char ab_count;                         //不同的计数值在做服务器和做客户端的时候
  39           //extern unsigned char tick_count;
  40          unsigned char xdata STAT_AB;
  41          //unsigned char xdata  UARTtimer;
  42          void
  43          file_init(void)
  44          {
  45   1      #ifdef F_STATISTICS
  46   1      #if F_STATISTICS == 1
  47   1       // u8_t idata i;
  48   1              s->count=0;      temp_len=0;
  49   1              ptr_tx=&count_tx[0];
  50   1               STAT_AB=0;             
  51   1      #endif /* F_STATISTICS */
  52   1      #endif /* F_STATISTICS */
  53   1      }
  54          
  55          
C51 COMPILER V8.08   APPDATATRANS                                                          08/22/2008 14:32:50 PAGE 2   

  56          void
  57          datatrans_init(void)
  58                  {
  59   1                file_init();
  60   1                
  61   1                /* Listen to port 80. HTTP WEB PORT 80*/
  62   1                uip_listen(HTONS(1234));
  63   1              
  64   1              }
  65                  
  66          void
  67          datatrans_appcall(void)
  68          
  69          {
  70   1        u8_t idata i;
  71   1        u8_t xdata *dataptr;           //串口发送指针
  72   1      
  73   1       if((uip_conn->lport==HTONS(1234))||(uip_conn->rport==HTONS(1280))) 
  74   1         /* Pick out the application state from the uip_conn structure. */
  75   1              {   s = (struct datatrans_state xdata *)(uip_conn->appstate);
  76   2                       if(uip_conn->lport==HTONS(1234))
  77   2                       ab_count=40;
  78   2                       else ab_count=20;
  79   2          /* We use the uip_ test functions to deduce why we were
  80   2             called. If uip_connected() is non-zero, we were called
  81   2             because a remote host has connected to us. If
  82   2             uip_newdata() is non-zero, we were called because the
  83   2             remote host has sent us new data, and if uip_acked() is
  84   2             non-zero, the remote host has acknowledged the data we
  85   2             previously sent to it. */
  86   2            
  87   2               if(uip_poll()) {                 
  88   3                                      // if( (RI==0)&&(temp_len!=0))                          //串口接收数据完毕
  89   3                                                        //    {       delay();
  90   3                                      if( (RI==0)&&(temp_len!=0)&&count_tx[temp_len-1]==0xff) 
  91   3                                                                      {s->state=READY;  }     
  92   3                                                                       
  93   3                                                              // }
  94   3                                      if((s->state==READY)&&(temp_len!=0))              //状态可删除 
  95   3                                              {  s->count=0;  //tick_count = 0;                //add9
  96   4                                              if(temp_len>DATANUM)                                             //可删除
  97   4                                              {temp_len=DATANUM;}
  98   4                                               uip_slen=temp_len;                                     //从串口接收到的数据    add7
  99   4                                              uip_sappdata = &count_tx[0];                            //add5  经过  
 100   4                                              s->state=OVER;
 101   4                                              temp_len=0;                        //串口接收到的数据已经发送出去,串口接收指针复位
 102   4                                              ptr_tx = &count_tx[0];
 103   4      
 104   4                                              uip_flags=UIP_ACKDATA;                                          //add8
 105   4                                              }
 106   3                              if((s->count==0)){Timer1on();STAT_AB=1;} 
 107   3                              else if(s->count == ab_count)                                   //每次完成一次传送就关闭
 108   3                                               {                                                                                      //不是此地
 109   4                                                      uip_abort(); 
 110   4                                                       s->count=0; 
 111   4                                                       connect_state=TURNOFF;
 112   4                                                       }                                                              //建立时间过长,连接关闭          
 113   3                                              return;         
 114   3                                              }
 115   2              else if(uip_newdata())          
 116   2                              {
 117   3                                       s->count=0;    
C51 COMPILER V8.08   APPDATATRANS                                                          08/22/2008 14:32:50 PAGE 3   

 118   3                                      P10=~P10;                                       //add6
 119   3                                      uip_slen=uip_len;       
 120   3                              if(uip_slen<=DATANUM)
 121   3                                              {
 122   4                                              s->dataptr=uip_appdata;                                  //add4
 123   4                                              for(i=0;i<uip_slen;i++)
 124   4                                                              {       
 125   5                                                                      count_rx[i]=*(s->dataptr++);
 126   5                                                              }
 127   4                                                      uip_slen=0;                                                             //important
 128   4       
 129   4                                                        UART_state=READY;                                     //add7
 130   4                                                        UART_len=uip_len;
 131   4                                              }
 132   3                                              if(UART_state==READY)  //确定为电脑发过来的数据,而不是要本机传数据给PC
 133   3                                               {       dataptr=&count_rx[0]; UART_state=OVER; ES=0;
 134   4                                                      while (UART_len--)
 135   4                                                      { TI=0; 
 136   5                                                              SBUF=*dataptr++;
 137   5                                                              while(!TI) ;    //串口发送数据
 138   5                                                                                         //可考虑将这段发送的移到poll()中
 139   5                                                      }
 140   4                                                      ES=1;
 141   4                                               }
 142   3                         /**************************数据的复制********************               
 143   3                                      if(s->state==READY){
 144   3                                                      uip_slen=uip_len;                                                       //add5
 145   3                                              for(i=0;i<uip_slen;i++)
 146   3                                              {       count_tx[i]=count_rx[i];
 147   3                                              }
 148   3                                              uip_sappdata = &count_tx[0];                            //add5  经过  
 149   3                                              s->state=OVER;
 150   3                                              }
 151   3                                      //else  {uip_flags=UIP_CLOSE;}                  //add6  可以连续传数据            */
 152   3                                      
 153   3                              
 154   3                               
 155   3                                      return; 
 156   3                                      }
 157   2              else if(uip_connected()) {      
 158   3                                                              //      s->state=READY;
 159   3                                                                 
 160   3                                                                       
 161   3                                              }
 162   2              else if(uip_acked())
 163   2                              {         
 164   3                              
 165   3                      
 166   3                                                      return;
 167   3                              }
 168   2      
 169   2              
 170   2              else if (uip_timedout())         {              P11=1;                          //add6
 171   3                                                              return;
 172   3              }
 173   2              else if(uip_close()||uip_stop()|| ( uip_rexmit()))
 174   2                              {                         
 175   3                                                              return;
 176   3                                      }       
 177   2              }                                                 
 178   1       else{                    //可删除
 179   2                                P11=~P11;
C51 COMPILER V8.08   APPDATATRANS                                                          08/22/2008 14:32:50 PAGE 4   

 180   2          /* Should never happen. */
 181   2              uip_abort();    
 182   2              return; 
 183   2              }
 184   1                return;
 185   1      }
 186          
 187          /*******************串口程序********************************/
 188          static void etherdev_UART_isr(void) interrupt 4                                 //串口中断
 189                  {       if(RI==1)                                                                               //add8
 190   1                       {
 191   2                      RI=0;           ES=0;
 192   2                      if(temp_len<DATANUM){
 193   3                      *ptr_tx++=SBUF;
 194   3                      temp_len++;     }       ES=1;
 195   2                      return;         }
 196   1                      TI=0;
 197   1                      return;
 198   1              }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    628    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =    401    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     12       2
   IDATA SIZE       =   ----       1
   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 + -