📄 net.lst
字号:
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 + -