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

📄 net.lst

📁 8051单片机与RTL8019AS的UDP协议栈
💻 LST
📖 第 1 页 / 共 3 页
字号:
 484          {
 485   1          unsigned int X_length;
 486   1          unsigned int i;
 487   1              page_select(0);
C51 COMPILER V7.06   NET                                                                   02/28/2008 17:09:34 PAGE 9   

 488   1              bnry=reg03;
 489   1              page_select(1);
 490   1              curr=reg07;
 491   1              page_select(0);
 492   1          if((curr==0))       
 493   1              return 0;       //读的过程出错
 494   1              bnry=bnry++;
 495   1              if(bnry>0x7f)
 496   1                      bnry=0x4c;
 497   1              if(bnry!=curr)
 498   1              {
 499   2                      page_select(0);
 500   2                      reg09=bnry;
 501   2                      reg08=0x00;
 502   2                      reg0b=0x00;
 503   2                      reg0a=18;
 504   2                      reg00=0x0a;
 505   2                      for(i=0;i<18;i++)
 506   2                      {
 507   3                              Receive_Buff[i]=reg10;
 508   3                      }
 509   2                      reg0b=0x00;
 510   2                  reg0a=0x00;
 511   2                  reg00=0x22;
 512   2                      Protocol=Receive_Buff[16];
 513   2                  Protocol=Protocol<<8;
 514   2                      Protocol+=Receive_Buff[17];     
 515   2              X_length=Receive_Buff[3];
 516   2              X_length<<=8;
 517   2              X_length+=Receive_Buff[2];
 518   2                      if((Receive_Buff[1]>0x7f)||(Receive_Buff[1]<0x4c)||(Receive_Buff[3])>0x06)
 519   2                      {
 520   3                           page_select(1);
 521   3                               curr=reg07;
 522   3                               page_select(0);
 523   3                               bnry=curr-1;
 524   3                               if(bnry<0x4c)
 525   3                                   bnry=0x7f;
 526   3                               reg03=bnry;
 527   3                               reg07=0xff;
 528   3                               return 0;
 529   3                      }
 530   2                      else
 531   2                      {
 532   3                          
 533   3                              reg09=bnry;
 534   3                              reg08=0x00;
 535   3                              reg0b=X_length>>8;
 536   3                              reg0a=X_length&0xff;
 537   3                              reg00=0x0a;
 538   3                              for(i=0;i<X_length;i++)
 539   3                              {
 540   4                                   Receive_Buff[i]=reg10;
 541   4                              }
 542   3                              reg0b=0x00;
 543   3                          reg0a=0x00;
 544   3                          reg00=0x22;
 545   3                              bnry=Receive_Buff[1]-1;
 546   3                              if(bnry>0x7f)
 547   3                                      bnry=0x4c;
 548   3                              reg03=bnry;
 549   3                              reg07=0xff;
C51 COMPILER V7.06   NET                                                                   02/28/2008 17:09:34 PAGE 10  

 550   3                                  return 1;
 551   3                      }
 552   2              }    
 553   1      }
 554          //***********OKOKOKOKOKOKOK*************************
 555          void ARP_Request()
 556          {
 557   1              unsigned char i;
 558   1              for(i=0;i<6;i++)
 559   1              {
 560   2                      Send_Buff[i]=0xff;
 561   2                      Send_Buff[i+6]=hard_add[i];
 562   2              }
 563   1              Send_Buff[12]=0x08;
 564   1              Send_Buff[13]=0x06;
 565   1              Send_Buff[14]=0x00;
 566   1              Send_Buff[15]=0x01;
 567   1              Send_Buff[16]=0x08;
 568   1              Send_Buff[17]=0x00;
 569   1              Send_Buff[18]=0x06;
 570   1              Send_Buff[19]=0x04;
 571   1              Send_Buff[20]=0x00;
 572   1              Send_Buff[21]=0x01;
 573   1              Send_Buff[28]=0x0a;
 574   1              Send_Buff[29]=0x05;
 575   1              Send_Buff[30]=0x84;
 576   1              Send_Buff[31]=0xd7;
 577   1              Send_Buff[38]=0x0a;
 578   1              Send_Buff[39]=0x05;
 579   1              Send_Buff[40]=0x84;
 580   1              Send_Buff[41]=0x37;
 581   1              for(i=0;i<6;i++)
 582   1              {
 583   2                      Send_Buff[i+22]=hard_add[i];
 584   2                      Send_Buff[i+32]=0x00;
 585   2              }
 586   1              for(i=42;i<64;i++)
 587   1              {
 588   2                  Send_Buff[i]=i;
 589   2              }
 590   1              RTL8019_send();
 591   1      }
 592          //************************************************************
 593          void RARP(void)
 594          {
 595   1          unsigned int i;
 596   1          for(i=0;i<558;i++)
 597   1              Send_Buff[i]=0x00;
 598   1              for(i=0;i<6;i++)
 599   1              {
 600   2                  Send_Buff[i]=Receive_Buff[i+10];
 601   2                      Send_Buff[i+6]=hard_add[i];
 602   2          }
 603   1              Send_Buff[12]=0x08;
 604   1              Send_Buff[13]=0x06;
 605   1              Send_Buff[14]=0x00;
 606   1              Send_Buff[15]=0x01;
 607   1              Send_Buff[16]=0x08;
 608   1              Send_Buff[17]=0x00;
 609   1              Send_Buff[18]=0x06;
 610   1              Send_Buff[19]=0x04;
 611   1              Send_Buff[20]=0x00;
C51 COMPILER V7.06   NET                                                                   02/28/2008 17:09:34 PAGE 11  

 612   1              Send_Buff[21]=0x02;
 613   1              for(i=22;i<28;i++)
 614   1                  Send_Buff[i]=hard_add[i-22];
 615   1          for(i=28;i<32;i++)
 616   1                  Send_Buff[i]=IP_add[i-28];
 617   1          for(i=32;i<38;i++)
 618   1                  Send_Buff[i]=Receive_Buff[i-22];
 619   1          for(i=38;i<42;i++)
 620   1                  Send_Buff[i]=Receive_Buff[i-6];
 621   1              RTL8019_send();
 622   1      }
 623          //****************************************************************
 624          void ACK_Send(unsigned int count)
 625          {
 626   1              unsigned int i;
 627   1              for(i=0;i<558;i++)
 628   1                  Send_Buff[i]=0x00;
 629   1              Send_Buff[42]=0x00;
 630   1              Send_Buff[43]=0x02;                             //填入包类型
 631   1              Send_Buff[44]=count>>8; 
 632   1              Send_Buff[45]=count;                            //填入当前包数
 633   1          for(i=0;i<42;i++)
 634   1                      Send_Buff[i]=pac_head[i];                   //填入IP头
 635   1              for(i=0;i<6;i++)
 636   1                      pac_head[i]=A_m_a[i];                  //填入目的物理地址
 637   1      //      pac_head[0]=0x00;
 638   1        //  pac_head[1]=0x13;
 639   1      //      pac_head[2]=0xd4;
 640   1      //      pac_head[3]=0x3e;
 641   1      //      pac_head[4]=0x58;
 642   1      //      pac_head[5]=0x67;
 643   1          for(i=0;i<4;i++)
 644   1             pac_head[30+i]=A_IP_add[i];                //填入目的IP地址
 645   1              //pac_head[30]=0x0a;
 646   1              //pac_head[31]=0x05;
 647   1              //pac_head[32]=0x84;
 648   1              //pac_head[33]=0x37;
 649   1          H_H_Length=0x00;                                //IP报总长度高位
 650   1              L_H_Length=0x2e;                                //IP包总长度低位
 651   1          H_Loc_Port=Loc_Port>>8;
 652   1              L_Loc_Port=Loc_Port;                            //填入源端口
 653   1              H_Aim_Port=Aim_Port>>8;
 654   1          L_Aim_Port=Aim_Port;                            //填入目的端口
 655   1              H_UDP_Length=0x00;
 656   1              L_UDP_Length=0x1E;                              //填入UDP长度
 657   1          for(i=0;i<42;i++)
 658   1                      Send_Buff[i]=pac_head[i];                   //填入IP头
 659   1          kk=CRC_Process(20,14,0);
 660   1          H_CRC=kk>>8;
 661   1              L_CRC=kk;                                      //填入IP首部校验和
 662   1              kk=CRC_Process(30,34,1);                       //求UDP校验和
 663   1          HUDPCRC=kk>>8;
 664   1              LUDPCRC=kk;                                    //填入校验和
 665   1              RTL8019_send();                                 //发送
 666   1      }
 667          //****************************************************************
 668          unsigned int CRC_Process(unsigned char LEN,unsigned char mov,unsigned char type)
 669          {
 670   1              unsigned int b;
 671   1              unsigned long Crc=0x0000;
 672   1              unsigned int i;
 673   1              //p=a;
C51 COMPILER V7.06   NET                                                                   02/28/2008 17:09:34 PAGE 12  

 674   1              for(i=0;i<LEN;i+=2)
 675   1              {
 676   2                       //a[i]=~a[i];
 677   2                       //printf("%x  ",a[i]);
 678   2                       b=Send_Buff[i+mov];
 679   2                       b<<=8;
 680   2                       b+=Send_Buff[i+mov+1];
 681   2                       Crc+=b;
 682   2               }
 683   1               if(type)
 684   1               {
 685   2                   for(i=0;i<13;i++)
 686   2                           UDP_F_Head[i]=0x00;
 687   2                   for(i=0;i<4;i++)
 688   2                       {
 689   3                           UDP_F_Head[i]=IP_add[i];
 690   3                               UDP_F_Head[i+4]=A_IP_add[i];
 691   3                       }
 692   2                       UDP_F_Head[9]=0x11;
 693   2                       UDP_F_Head[10]=0x00;
 694   2                       UDP_F_Head[11]=0x1e;
 695   2                       for(i=0;i<12;i+=2)
 696   2                       {
 697   3                          b=UDP_F_Head[i];
 698   3                              b<<=8;
 699   3                              b+=UDP_F_Head[i+1];
 700   3                              Crc+=b;               
 701   3                       }
 702   2               }
 703   1              //Crc=~Crc;
 704   1              Crc=((Crc>>16)&0xffff)+(Crc&0xffff);
 705   1              if(Crc&0xffff0000)
 706   1                 Crc++;
 707   1          return ((unsigned int)(~(Crc&0xffff)));
 708   1      }
 709          //*******************************************************
 710          void Pag_TimeOut(void)
 711          {
 712   1              ACK_Send(Package);                          //重发ACK包
 713   1      }
 714          //*******************************************************


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2685    ----
   CONSTANT SIZE    =     83    ----
   XDATA SIZE       =   1212    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     22      12
   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 + -