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

📄 picnic.lst

📁 PIC单片机实现的一种网络单片机
💻 LST
📖 第 1 页 / 共 5 页
字号:
                      00459 ; 读取RTL8019 Status 和 Ethernet Header
0158   01AD           00460         CLRF    remote_adr
0159   087C           00461         MOVF    mdata,W
015A   00AE           00462         MOVWF   remote_adr+1
015B   3012           00463         MOVLW   NE_SIZE+PACKET_SIZE
015C   00AF           00464         MOVWF   remote_len
015D   01B0           00465         CLRF    remote_len+1
015E   2711           00466         CALL    remote_read
                      00467 
015F   3012           00468         MOVLW   NE_SIZE+PACKET_SIZE
0160   00A6           00469         MOVWF   gcn1                            ; Loop Counter
0161   1383           00470         BCF     STATUS,IRP
0162   30DE           00471         MOVLW   ne_header
0163   0084           00472         MOVWF   FSR                             ;读取ne_header的地址
0164   3010           00473         MOVLW   0x10
0165   0087           00474         MOVWF   PORTC
0166                  00475 get_packet0:
0166   1009           00476         BCF     PORTE,RE0                       ;RD
0167   1E87           00477         BTFSS   PORTC,RC5                       ;RDY, ~Wait
MPASM 03.20 Released           PICNIC.ASM   2-9-2003  15:33:59         PAGE 18


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

0168   2967           00478         GOTO    $-1
0169   0808           00479         MOVF    PORTD,W
016A   1409           00480         BSF     PORTE,RE0
016B   0080           00481         MOVWF   INDF                            ;"indirect = data Buffer
016C   0A84           00482         INCF    FSR,F                           ;FSR++
016D   0BA6           00483         DECFSZ  gcn1,F
016E   2966           00484         GOTO    get_packet0
                      00485 ;
                      00486 ;       Ethernet Header的处理判断
016F   1683           00487         BSF     STATUS,RP0
0170   1C5E           00488         BTFSS   ne_stat,0
0171   297E           00489         GOTO    main9
0172   3008           00490         MOVLW   COM_PROTO
0173   026E           00491         SUBWF   eth_type & 0x7F,W
0174   1D03           00492         BTFSS   STATUS,Z                        ; 跳过type的高8bit以外
0175   297E           00493         GOTO    main9
0176   3000           00494         MOVLW   IP_PROTO
0177   026F           00495         SUBWF   eth_type+1,W
0178   1903           00496         BTFSC   STATUS,Z
0179   2A0A           00497         GOTO    do_ip                           ;处理IP协议
017A   3006           00498         MOVLW   ARP_PROTO
017B   026F           00499         SUBWF   eth_type+1,W
017C   1903           00500         BTFSC   STATUS,Z
017D   299B           00501         GOTO    do_arp                          ;处理ARP协议
017E                  00502 main9:                                          ;其他
017E   1383           00503         BCF     STATUS,IRP
017F   1303           00504         BCF     STATUS,RP1
0180   1683           00505         BSF     STATUS,RP0
0181   3046           00506         MOVLW   PAGE_START
0182   025F           00507         SUBWF   ne_next & 0x7F,W
0183   1C03           00508         BTFSS   STATUS,C
0184   28E7           00509         GOTO    overflow2                       ;Error Check and Recover
0185   3080           00510         MOVLW   PAGE_STOP
0186   025F           00511         SUBWF   ne_next & 0x7F,W
0187   1803           00512         BTFSC   STATUS,C
0188   28E7           00513         GOTO    overflow                        ;Error Check and Recover
                      00514 
0189   03DF           00515         DECF    ne_next & 0x7F,F                ;计算下一个边界
018A   3046           00516         MOVLW   PAGE_START
018B   025F           00517         SUBWF   ne_next & 0x7F,W
018C   1803           00518         BTFSC   STATUS,C
018D   2990           00519         GOTO    packet11
018E   307F           00520         MOVLW   PAGE_STOP-1
018F   00DF           00521         MOVWF   ne_next & 0x7F
                      00522 
0190                  00523 packet11:
0190   1283           00524         BCF     STATUS,RP0
                      00525 
0191   0187           00526         CLRF    PORTC
0192   3022           00527         MOVLW   b'00100010'
0193   2760           00528         CALL    assert_wr0
                      00529 
0194   3003           00530         MOVLW   0x03
MPASM 03.20 Released           PICNIC.ASM   2-9-2003  15:33:59         PAGE 19


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

0195   0087           00531         MOVWF   PORTC
0196   30DF           00532         MOVLW   ne_next
0197   0084           00533         MOVWF   FSR
0198   0800           00534         MOVF    INDF,W
0199   2760           00535         CALL    assert_wr0
019A   293A           00536         GOTO    main99
                      00537 
                      00538 ;-----------------------------------------------------------------------------------
                      00539 ;               ARP协议处理
                      00540 ;-----------------------------------------------------------------------------------
019B                  00541 do_arp:
019B   1283           00542         BCF     STATUS,RP0
019C   3012           00543         MOVLW   NE_SIZE+PACKET_SIZE
019D   00AD           00544         MOVWF   remote_adr
019E   30E0           00545         MOVLW   ne_cn_l
019F   0084           00546         MOVWF   FSR
01A0   0800           00547         MOVF    INDF,W
01A1   00AF           00548         MOVWF   remote_len
01A2   0A84           00549         INCF    FSR,F
01A3   0800           00550         MOVF    INDF,W
01A4   00B0           00551         MOVWF   remote_len+1
01A5   3012           00552         MOVLW   NE_SIZE+PACKET_SIZE
01A6   02AF           00553         SUBWF   remote_len,F
01A7   3001           00554         MOVLW   0x01
01A8   1C03           00555         BTFSS   STATUS,C
01A9   02B0           00556         SUBWF   remote_len+1,F
01AA   2711           00557         CALL    remote_read
                      00558 
01AB   3039           00559         MOVLW   ip_header                       ;读出ip_header以后的数据
01AC   0084           00560         MOVWF   FSR
01AD                  00561 get_packet10:
01AD   082F           00562         MOVF    remote_len,W
01AE   0430           00563         IORWF   remote_len+1,W
01AF   1903           00564         BTFSC   STATUS,Z
01B0   29CB           00565         GOTO    get_packet2
                      00566 
01B1   1009           00567         BCF     PORTE,RE0                       ; RD
01B2   1E87           00568         BTFSS   PORTC,RC5                       ; RDY - ~Wait
01B3   29B2           00569         GOTO    $-1
01B4   0808           00570         MOVF    PORTD,W
01B5   1409           00571         BSF     PORTE,RE0                       ; RD
01B6   0080           00572         MOVWF   INDF
01B7   0A84           00573         INCF    FSR,F
                      00574 
01B8   3001           00575         MOVLW   0x01
01B9   02AF           00576         SUBWF   remote_len,F
01BA   1C03           00577         BTFSS   STATUS,C
01BB   02B0           00578         SUBWF   remote_len+1,F
01BC   1F84           00579         BTFSS   FSR,7                           ; Over flow?
01BD   29AD           00580         GOTO    get_packet10
                      00581 ;       80h以后
01BE                  00582 get_packet20:
01BE   082F           00583         MOVF    remote_len,W
MPASM 03.20 Released           PICNIC.ASM   2-9-2003  15:33:59         PAGE 20


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

01BF   0430           00584         IORWF   remote_len+1,W
01C0   1903           00585         BTFSC   STATUS,Z
01C1   29CB           00586         GOTO    get_packet2                     ;读入完了
                      00587 
01C2   1009           00588         BCF     PORTE,RE0                       ;RD
01C3   1E87           00589         BTFSS   PORTC,RC5                       ;RDY - ~Wait
01C4   29C3           00590         GOTO    $-1
01C5   1409           00591         BSF     PORTE,RE0
                      00592 
01C6   3001           00593         MOVLW   0x01
01C7   02AF           00594         SUBWF   remote_len,F
01C8   1C03           00595         BTFSS   STATUS,C
01C9   02B0           00596         SUBWF   remote_len+1,F
01CA   29BE           00597         GOTO    get_packet20
                      00598 ;
                      00599 ;       分析ARP Header
01CB                  00600 get_packet2:
01CB   3000           00601         MOVLW   0x00
01CC   023F           00602         SUBWF   arp_ope,W
01CD   1D03           00603         BTFSS   STATUS,Z
01CE   297E           00604         GOTO    main9                           ; arp_code为0001以外则舍弃
01CF   3001           00605         MOVLW   0x01
01D0   0240           00606         SUBWF   arp_ope+1,W
01D1   1903           00607         BTFSC   STATUS,Z
01D2   29DB           00608         GOTO    arp_req
01D3   3002           00609         MOVLW   0x02
01D4   0240           00610         SUBWF   arp_ope+1,W
01D5   1903           00611         BTFSC   STATUS,Z
01D6   29D8           00612         GOTO    arp_reply
                      00613 
01D7   297E           00614         GOTO    main9
01D8                  00615 arp_reply:
                      00616         ; pagesel ser_arp
01D8   3009           00617         MOVLW   HIGH ser_arp
01D9   008A           00618         MOVWF   PCLATH
01DA   291C           00619         GOTO    ser_arp & 0x7ff
01DB                  00620 arp_req:
01DB                  00621 arp:
01DB   30A0           00622         MOVLW   this_ip                         ;this_ip在Bank 1
01DC   0084           00623         MOVWF   FSR
                      00624 
01DD   0851           00625         MOVF    arp_dest_ip,W
01DE   0200           00626         SUBWF   INDF,W
01DF   1D03           00627         BTFSS   STATUS,Z
01E0   297E           00628         GOTO    main9
01E1   0A84           00629         INCF    FSR,F
01E2   0852           00630         MOVF    arp_dest_ip+1,W
01E3   0200           00631         SUBWF   INDF,W
01E4   1D03           00632         BTFSS   STATUS,Z
01E5   297E           00633         GOTO    main9
01E6   0A84           00634         INCF    FSR,F
01E7   0853           00635         MOVF    arp_dest_ip+2,W
01E8   0200           00636         SUBWF   INDF,W
MPASM 03.20 Released           PICNIC.ASM   2-9-2003  15:33:59         PAGE 21


LOC  OBJECT CODE     LINE SOURCE TEXT
  VALUE

01E9   1D03           00637         BTFSS   STATUS,Z
01EA   297E           00638         GOTO    main9
01EB   0A84           00639         INCF    FSR,F
01EC   0854           00640         MOVF    arp_dest_ip+3,W
01ED   0200           00641         SUBWF   INDF,W
01EE   1D03           00642         BTFSS   STATUS,Z
01EF   297E           00643         GOTO    main9
                      00644 ;       是发送给自己的ARP请求
01F0   2799           00645         CALL    prepare_ether2
                      00646 
01F1   3008           00647         MOVLW   COM_PROTO                       ; 08 Etherframe type
01F2   274B           00648         CALL    assert_wr
01F3   3006           00649         MOVLW   ARP_PROTO                       ; ARP
01F4   274B           00650         CALL    assert_wr
                      00651 
01F5   3010           00652         MOVLW   HIGH arp1
01F6   008A           00653         MOVWF   PCLATH
01F7   209D           00654         CALL    arp1 & 0x7ff
01F8   018A           00655         CLRF    PCLATH
                      00656 
01F9   0187           00657         CLRF    PORTC
01FA   3022           00658         MOVLW   b'00100010'
01FB   2760           00659         CALL    assert_wr0
                      00660 
01FC   3004           00661         MOVLW   0x04
01FD   0087           00662         MOVWF   PORTC
01FE   3040           00663         MOVLW   PAGE_BEGIN                      ; transmit page is start page
01FF   2760           00664         CALL    assert_wr0
                      00665 
0200   3005           00666         MOVLW   0x05
0201   0087           00667         MOVWF   PORTC
0202   303C           00668         MOVLW   0x3C                            ; minimum pakcet = 60
0203   2760           00669         CALL    assert_wr0
                      00670 
0204   3006           00671         MOVLW   0x06
0205   0087           00672         MOVWF   PORTC
0206   0100           00673         dw      0x100                                   ; adr high
0207   2760           00674         CALL    assert_wr0
                      00675 
0208   2789           00676         CALL    transmit                        ;发送ARP应答
0209   297E           00677         GOTO    main9

⌨️ 快捷键说明

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