📄 main.lis
字号:
02BC E80F add R30,R24
02BE F91F adc R31,R25
02C0 0081 ldd R16,z+0
02C2 0E940000 xcall _Write_Buffer_Memory_date
02C6 L64:
02C6 .dbline 122
02C6 4395 inc R20
02C8 L66:
02C8 .dbline 122
02C8 ; for(i=6;i<12;i++)Write_Buffer_Memory_date(MACHead[i]); //源MAC地址6字节
02C8 4C30 cpi R20,12
02CA A0F3 brlo L63
02CC .dbline 123
02CC 4CE0 ldi R20,12
02CE 0AC0 xjmp L70
02D0 L67:
02D0 .dbline 123
02D0 80E0 ldi R24,<_Rec_packet
02D2 90E0 ldi R25,>_Rec_packet
02D4 E42F mov R30,R20
02D6 FF27 clr R31
02D8 E80F add R30,R24
02DA F91F adc R31,R25
02DC 0081 ldd R16,z+0
02DE 0E940000 xcall _Write_Buffer_Memory_date
02E2 L68:
02E2 .dbline 123
02E2 4395 inc R20
02E4 L70:
02E4 .dbline 123
02E4 ; for(i=12;i<20;i++)Write_Buffer_Memory_date(Rec_packet[i]);//0x08,0x06,0x00,0x01,0x08,0x00,0x06,0x04
02E4 4431 cpi R20,20
02E6 A0F3 brlo L67
02E8 .dbline 124
02E8 ; Write_Buffer_Memory_date(0x00);
02E8 0027 clr R16
02EA 0E940000 xcall _Write_Buffer_Memory_date
02EE .dbline 125
02EE ; Write_Buffer_Memory_date(0x02);//0x0002表示是应答帧
02EE 02E0 ldi R16,2
02F0 0E940000 xcall _Write_Buffer_Memory_date
02F4 .dbline 126
02F4 46E0 ldi R20,6
02F6 0AC0 xjmp L74
02F8 L71:
02F8 .dbline 126
02F8 80E0 ldi R24,<_MACHead
02FA 90E0 ldi R25,>_MACHead
02FC E42F mov R30,R20
02FE FF27 clr R31
0300 E80F add R30,R24
0302 F91F adc R31,R25
0304 0081 ldd R16,z+0
0306 0E940000 xcall _Write_Buffer_Memory_date
030A L72:
030A .dbline 126
030A 4395 inc R20
030C L74:
030C .dbline 126
030C ; for(i=6;i<12;i++)Write_Buffer_Memory_date(MACHead[i]); //源MAC地址6字节
030C 4C30 cpi R20,12
030E A0F3 brlo L71
0310 .dbline 127
0310 46E2 ldi R20,38
0312 0AC0 xjmp L78
0314 L75:
0314 .dbline 127
0314 80E0 ldi R24,<_Rec_packet
0316 90E0 ldi R25,>_Rec_packet
0318 E42F mov R30,R20
031A FF27 clr R31
031C E80F add R30,R24
031E F91F adc R31,R25
0320 0081 ldd R16,z+0
0322 0E940000 xcall _Write_Buffer_Memory_date
0326 L76:
0326 .dbline 127
0326 4395 inc R20
0328 L78:
0328 .dbline 127
0328 ; for(i=38;i<42;i++)Write_Buffer_Memory_date(Rec_packet[i]);//源IP地址
0328 4A32 cpi R20,42
032A A0F3 brlo L75
032C .dbline 128
032C 46E1 ldi R20,22
032E 0AC0 xjmp L82
0330 L79:
0330 .dbline 128
0330 80E0 ldi R24,<_Rec_packet
0332 90E0 ldi R25,>_Rec_packet
0334 E42F mov R30,R20
0336 FF27 clr R31
0338 E80F add R30,R24
033A F91F adc R31,R25
033C 0081 ldd R16,z+0
033E 0E940000 xcall _Write_Buffer_Memory_date
0342 L80:
0342 .dbline 128
0342 4395 inc R20
0344 L82:
0344 .dbline 128
0344 ; for(i=22;i<32;i++)Write_Buffer_Memory_date(Rec_packet[i]);//目标MAC地址6字节,目标IP地址
0344 4032 cpi R20,32
0346 A0F3 brlo L79
0348 .dbline 129
0348 ; Set_CS(1);//写缓冲寄存器结束
0348 01E0 ldi R16,1
034A 0E940000 xcall _Set_CS
034E .dbline 130
034E ; Write_Control_Register(0x06,42);//ETXNDL,6+6+2+20+8
034E 2AE2 ldi R18,42
0350 06E0 ldi R16,6
0352 0E940000 xcall _Write_Control_Register
0356 .dbline 131
0356 ; Write_Control_Register(0x07,0x00);//ETXNDH,即从0x0000开始写入数据
0356 2227 clr R18
0358 07E0 ldi R16,7
035A 0E940000 xcall _Write_Control_Register
035E .dbline 133
035E ;
035E ; Bit_Field_Clear(0x1c,0x08);//将EIR.TXIF位清零
035E 28E0 ldi R18,8
0360 0CE1 ldi R16,28
0362 0E940000 xcall _Bit_Field_Clear
0366 .dbline 134
0366 ; Bit_Field_Set(0x1f,0x08);//将ECON1.TXRTS 位置1开始发送
0366 28E0 ldi R18,8
0368 0FE1 ldi R16,31
036A 0E940000 xcall _Bit_Field_Set
036E .dbline -2
036E .dbline 135
036E ; }
036E L58:
036E 0E940000 xcall pop_gset1
0372 .dbline 0 ; func end
0372 0895 ret
0374 .dbsym r i 20 c
0374 .dbend
0374 .dbfunc e Receive_Packets _Receive_Packets fV
0374 ; Receive_Byte_Number -> R20,R21
0374 ; i -> R22
.even
0374 _Receive_Packets::
0374 0E940000 xcall push_gset2
0378 .dbline -1
0378 .dbline 138
0378 ; //##########################接收数据包处理##########################//
0378 ; void Receive_Packets(void)//
0378 ; {uchar i=0;
0378 .dbline 138
0378 6627 clr R22
037A .dbline 139
037A ; uint Receive_Byte_Number=0;
037A 4427 clr R20
037C 5527 clr R21
037E .dbline 140
037E ; enc28j60SetBank(0x00);//通过ECON1先选中当前控制寄存器组是Bank0
037E 0027 clr R16
0380 0E940000 xcall _enc28j60SetBank
0384 .dbline 141
0384 ; Receive_Status[0]=Read_Buffer_Memory();//存放下一个数据包的起始位置低8位
0384 0E940000 xcall _Read_Buffer_Memory
0388 00930100 sts _Receive_Status,R16
038C .dbline 142
038C ; Receive_Status[1]=Read_Buffer_Memory();//存放下一个数据包的起始位置高8位
038C 0E940000 xcall _Read_Buffer_Memory
0390 00930200 sts _Receive_Status+1,R16
0394 .dbline 143
0394 ; Receive_Status[2]=Read_Buffer_Memory();//存放当前接收到的数据包的字节数低8位
0394 0E940000 xcall _Read_Buffer_Memory
0398 00930300 sts _Receive_Status+2,R16
039C .dbline 144
039C ; Receive_Status[3]=Read_Buffer_Memory();//存放当前接收到的数据包的字节数高8位
039C 0E940000 xcall _Read_Buffer_Memory
03A0 00930400 sts _Receive_Status+3,R16
03A4 .dbline 145
03A4 ; Receive_Status[4]=Read_Buffer_Memory();//其它,参看数据手册
03A4 0E940000 xcall _Read_Buffer_Memory
03A8 00930500 sts _Receive_Status+4,R16
03AC .dbline 146
03AC ; Receive_Status[5]=Read_Buffer_Memory();//其它,参看数据手册
03AC 0E940000 xcall _Read_Buffer_Memory
03B0 00930600 sts _Receive_Status+5,R16
03B4 .dbline 148
03B4 ;
03B4 ; Receive_Byte_Number +=Receive_Status[3];
03B4 20900400 lds R2,_Receive_Status+3
03B8 3324 clr R3
03BA 420D add R20,R2
03BC 531D adc R21,R3
03BE .dbline 149
03BE ; Receive_Byte_Number =Receive_Byte_Number<<8;
03BE 542F mov R21,R20
03C0 4427 clr R20
03C2 .dbline 150
03C2 ; Receive_Byte_Number +=Receive_Status[2];
03C2 20900300 lds R2,_Receive_Status+2
03C6 3324 clr R3
03C8 420D add R20,R2
03CA 531D adc R21,R3
03CC .dbline 152
03CC 0AC0 xjmp L94
03CE L91:
03CE .dbline 152
03CE 0E940000 xcall _Read_Buffer_Memory
03D2 80E0 ldi R24,<_Rec_packet
03D4 90E0 ldi R25,>_Rec_packet
03D6 E62F mov R30,R22
03D8 FF27 clr R31
03DA E80F add R30,R24
03DC F91F adc R31,R25
03DE 0083 std z+0,R16
03E0 L92:
03E0 .dbline 152
03E0 6395 inc R22
03E2 L94:
03E2 .dbline 152
03E2 ; //得到接收到的数据包长度包括目标地址,源地址,类型/长度,数据,填充,CRC字段
03E2 ; for(i=0;i<Receive_Byte_Number;i++)Rec_packet[i]=Read_Buffer_Memory();//将接收到的当前数据包存放在Rec_packet[255]中等待处理
03E2 262E mov R2,R22
03E4 3324 clr R3
03E6 2416 cp R2,R20
03E8 3506 cpc R3,R21
03EA 88F3 brlo L91
03EC .dbline 153
03EC ; i=ARP_request_or_answer();
03EC 03DF xcall _ARP_request_or_answer
03EE 602F mov R22,R16
03F0 .dbline 154
03F0 ; if(i==0x01)Transmit_ARP_Packets();//如果是本地ARP请求帧,则响应请求,发送ARP应答帧
03F0 0130 cpi R16,1
03F2 09F4 brne L95
03F4 .dbline 154
03F4 2CDF xcall _Transmit_ARP_Packets
03F6 L95:
03F6 .dbline 156
03F6 ;
03F6 ; putchar(0x4C);
03F6 0CE4 ldi R16,76
03F8 0E940000 xcall _putchar
03FC .dbline 157
03FC ; putchar(0x48);
03FC 08E4 ldi R16,72
03FE 0E940000 xcall _putchar
0402 .dbline 158
0402 ; putchar(0x46);//发送"LHF"通知上位机,紧接着要发送刚接收到的数据帧给上位机
0402 06E4 ldi R16,70
0404 0E940000 xcall _putchar
0408 .dbline 159
0408 6627 clr R22
040A 0AC0 xjmp L100
040C L97:
040C .dbline 159
040C 80E0 ldi R24,<_Rec_packet
040E 90E0 ldi R25,>_Rec_packet
0410 E62F mov R30,R22
0412 FF27 clr R31
0414 E80F add R30,R24
0416 F91F adc R31,R25
0418 0081 ldd R16,z+0
041A 0E940000 xcall _putchar
041E L98:
041E .dbline 159
041E 6395 inc R22
0420 L100:
0420 .dbline 159
0420 ; for(i=0;i<Receive_Byte_Number;i++)putchar(Rec_packet[i]);
0420 262E mov R2,R22
0422 3324 clr R3
0424 2416 cp R2,R20
0426 3506 cpc R3,R21
0428 88F3 brlo L97
042A .dbline 162
042A ; //将接收到的数据发送到上位机软件,包括目标地址,源地址,类型/长度,数据,填充,CRC字段。
042A ;
042A ; Bit_Field_Set(0x1e,0x40);//数据处理完后,然后清零待处理中断标志位PKTIF
042A 20E4 ldi R18,64
042C 0EE1 ldi R16,30
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -