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

📄 arp.lis

📁 AVR以太网开发板中的几个例子。文件中定义了网卡芯片的IP地址,默认值是192.168.0.99。
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module arp.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\hexok项目\AVRNET项目\AVRNET光盘\icc例子\arp.c
 0000                   .dbfunc e arp_response _arp_response fV
 0000           ;        ip_sou3 -> R14
 0000           ;        ip_sou2 -> R12
 0000           ;        ip_sou1 -> R10
 0000           ;        ip_sou0 -> R20
 0000           ;       mac_sou5 -> R22
 0000           ;       mac_sou4 -> y+28
 0000           ;       mac_sou3 -> y+27
 0000           ;       mac_sou2 -> y+26
 0000           ;       mac_sou1 -> y+25
 0000           ;       mac_sou0 -> y+24
 0000           ;       arpbegin -> R4,R5
                        .even
 0000           _arp_response::
 0000 0E940000          xcall push_gset5
 0004 2801              movw R4,R16
 0006 6D97              sbiw R28,29
 0008                   .dbline -1
 0008                   .dbline 9
 0008           ; #include "main.h"
 0008           ; #include "rtl8019as.h"
 0008           ; #include "arp.h"
 0008           ; #include "ip.h"
 0008           ; #include "icmp.h"
 0008           ; #include "udp.h"
 0008           ; 
 0008           ; void arp_response(unsigned char *arpbegin)
 0008           ; {
 0008                   .dbline 10
 0008           ;  unsigned char mac_sou0=0;
 0008 0024              clr R0
 000A 088E              std y+24,R0
 000C                   .dbline 11
 000C           ;  unsigned char mac_sou1=0;
 000C 098E              std y+25,R0
 000E                   .dbline 12
 000E           ;  unsigned char mac_sou2=0;
 000E 0A8E              std y+26,R0
 0010                   .dbline 13
 0010           ;  unsigned char mac_sou3=0;
 0010 0B8E              std y+27,R0
 0012                   .dbline 14
 0012           ;  unsigned char mac_sou4=0;
 0012 0C8E              std y+28,R0
 0014                   .dbline 15
 0014           ;  unsigned char mac_sou5=0;
 0014 6627              clr R22
 0016                   .dbline 16
 0016           ;  unsigned char ip_sou0=0;
 0016 4427              clr R20
 0018                   .dbline 17
 0018           ;  unsigned char ip_sou1=0;
 0018 AA24              clr R10
 001A                   .dbline 18
 001A           ;  unsigned char ip_sou2=0;
 001A CC24              clr R12
 001C                   .dbline 19
 001C           ;  unsigned char ip_sou3=0;
 001C EE24              clr R14
 001E                   .dbline 22
 001E           ;  
 001E           ;  
 001E           ;  if((*arpbegin==0) && (*(arpbegin+1))==1 &&         //只处理以太网数据包
 001E F201              movw R30,R4
 0020 2080              ldd R2,z+0
 0022 2220              tst R2
 0024 09F0              breq X1
 0026 C4C0              xjmp L1
 0028           X1:
 0028 8181              ldd R24,z+1
 002A 8130              cpi R24,1
 002C 09F0              breq X2
 002E C0C0              xjmp L1
 0030           X2:
 0030 F201              movw R30,R4
 0032 8281              ldd R24,z+2
 0034 8830              cpi R24,8
 0036 09F0              breq X3
 0038 BBC0              xjmp L1
 003A           X3:
 003A F201              movw R30,R4
 003C 2380              ldd R2,z+3
 003E 2220              tst R2
 0040 09F0              breq X4
 0042 B6C0              xjmp L1
 0044           X4:
 0044                   .dbline 24
 0044           ;     (*(arpbegin+2)==0x08) && (*(arpbegin+3))==0x00) //只处理IPv4数据包
 0044           ;  {
 0044                   .dbline 25
 0044           ;     if((*(arpbegin+24)!=myip_3) || //匹配本地IP,不匹配者忽略
 0044 F201              movw R30,R4
 0046 808D              ldd R24,z+24
 0048 803C              cpi R24,192
 004A 61F4              brne L8
 004C F201              movw R30,R4
 004E 818D              ldd R24,z+25
 0050 883A              cpi R24,168
 0052 41F4              brne L8
 0054 F201              movw R30,R4
 0056 228C              ldd R2,z+26
 0058 2220              tst R2
 005A 21F4              brne L8
 005C F201              movw R30,R4
 005E 838D              ldd R24,z+27
 0060 8336              cpi R24,99
 0062 09F0              breq L4
 0064           L8:
 0064                   .dbline 30
 0064           ;       (*(arpbegin+25)!=myip_2) ||
 0064           ;         (*(arpbegin+26)!=myip_1) ||
 0064           ;         (*(arpbegin+27)!=myip_0)
 0064           ;        )
 0064           ;        {
 0064                   .dbline 31
 0064           ;         return;
 0064 A5C0              xjmp L1
 0066           L4:
 0066                   .dbline 33
 0066           ;        }
 0066           ;   switch(*(arpbegin+7))
 0066 F201              movw R30,R4
 0068 2780              ldd R2,z+7
 006A 3324              clr R3
 006C 3F8A              std y+23,R3
 006E 2E8A              std y+22,R2
 0070 C101              movw R24,R2
 0072 8130              cpi R24,1
 0074 E0E0              ldi R30,0
 0076 9E07              cpc R25,R30
 0078 81F0              breq L12
 007A 8230              cpi R24,2
 007C E0E0              ldi R30,0
 007E 9E07              cpc R25,R30
 0080 09F4              brne X5
 0082 96C0              xjmp L1
 0084           X5:
 0084 8330              cpi R24,3
 0086 E0E0              ldi R30,0
 0088 9E07              cpc R25,R30
 008A 09F4              brne X6
 008C 91C0              xjmp L1
 008E           X6:
 008E 8430              cpi R24,4
 0090 E0E0              ldi R30,0
 0092 9E07              cpc R25,R30
 0094 09F4              brne X7
 0096 8CC0              xjmp L1
 0098           X7:
 0098 8BC0              xjmp L1
 009A           X0:
 009A                   .dbline 34
 009A           ;   {
 009A           L12:
 009A                   .dbline 36
 009A           ;    case 0x01:   //处理ARP请求
 009A           ;         mac_sou5=*(arpbegin+8);
 009A F201              movw R30,R4
 009C 6085              ldd R22,z+8
 009E                   .dbline 37
 009E           ;               mac_sou4=*(arpbegin+9);
 009E F201              movw R30,R4
 00A0 2184              ldd R2,z+9
 00A2 2C8E              std y+28,R2
 00A4                   .dbline 38
 00A4           ;               mac_sou3=*(arpbegin+10);
 00A4 F201              movw R30,R4
 00A6 2284              ldd R2,z+10
 00A8 2B8E              std y+27,R2
 00AA                   .dbline 39
 00AA           ;               mac_sou2=*(arpbegin+11);
 00AA F201              movw R30,R4
 00AC 2384              ldd R2,z+11
 00AE 2A8E              std y+26,R2
 00B0                   .dbline 40
 00B0           ;               mac_sou1=*(arpbegin+12);
 00B0 F201              movw R30,R4
 00B2 2484              ldd R2,z+12
 00B4 298E              std y+25,R2
 00B6                   .dbline 41
 00B6           ;               mac_sou0=*(arpbegin+13);
 00B6 F201              movw R30,R4
 00B8 2584              ldd R2,z+13
 00BA 288E              std y+24,R2
 00BC                   .dbline 42
 00BC           ;               ip_sou3=*(arpbegin+14);
 00BC F201              movw R30,R4
 00BE E684              ldd R14,z+14
 00C0                   .dbline 43
 00C0           ;               ip_sou2=*(arpbegin+15);
 00C0 F201              movw R30,R4
 00C2 C784              ldd R12,z+15
 00C4                   .dbline 44
 00C4           ;         ip_sou1=*(arpbegin+16);
 00C4 F201              movw R30,R4
 00C6 A088              ldd R10,z+16
 00C8                   .dbline 45
 00C8           ;               ip_sou0=*(arpbegin+17);
 00C8 F201              movw R30,R4
 00CA 4189              ldd R20,z+17
 00CC                   .dbline 46
 00CC           ;               buildpack(mac_sou5,mac_sou4,mac_sou3,mac_sou2,mac_sou1,mac_sou0,
 00CC 86E0              ldi R24,2054
 00CE 98E0              ldi R25,8
 00D0 9D8B              std y+21,R25
 00D2 8C8B              std y+20,R24
 00D4 85E4              ldi R24,69
 00D6 8A8B              std y+18,R24
 00D8 83E4              ldi R24,67

⌨️ 快捷键说明

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