📄 picweb.lst
字号:
....................
.................... /* Write a byte to the Tx buffer */
.................... void write_txbuff(int &oset, BYTE &b)
.................... {
.................... txbuff[oset] = b;
*
08B3: MOVLW 10
08B4: ADDWF 4C,W
08B5: MOVWF 79
08B6: MOVLW 01
08B7: MOVWF 7A
08B8: MOVF 79,W
08B9: BTFSC 03,0
08BA: INCF 7A,F
08BB: MOVWF 04
08BC: BCF 03,7
08BD: BTFSC 7A,0
08BE: BSF 03,7
08BF: BSF 03,5
08C0: BSF 03,6
08C1: MOVF 26,W
08C2: MOVWF 00
08C3: BCF 03,5
08C4: BCF 03,6
.................... }
....................
.................... /* Rx interrupt handler */
.................... #INT_RDA
.................... void rx_handler(void)
.................... {
.................... BYTE b;
.................... BOOL escflag;
....................
.................... if (kbhit()) // Make sure serial character received
*
00CA: BTFSS 0C,5
00CB: GOTO 17F
.................... {
.................... if ((b = getchar()) == SLIP_ESC)
00CC: GOTO 0BB
00CD: MOVF 78,W
00CE: BSF 03,5
00CF: BSF 03,6
00D0: MOVWF 33
00D1: MOVLW DB
00D2: SUBWF 33,W
00D3: BTFSC 03,2
00D4: GOTO 0D8
00D5: BCF 03,5
00D6: BCF 03,6
00D7: GOTO 0E0
00D8: BCF 03,5
00D9: BCF 03,6
.................... escflag = 1; // SLIP escape character?
00DA: BSF 03,5
00DB: BSF 03,6
00DC: BSF 34,0
.................... else if (b == SLIP_END)
00DD: BCF 03,5
00DE: BCF 03,6
00DF: GOTO 17F
00E0: MOVLW C0
00E1: BSF 03,5
00E2: BSF 03,6
00E3: SUBWF 33,W
00E4: BTFSC 03,2
00E5: GOTO 0E9
00E6: BCF 03,5
00E7: BCF 03,6
00E8: GOTO 0F3
00E9: BCF 03,5
00EA: BCF 03,6
.................... { // SLIP end-of-frame character?
.................... if (rxin > 0)
00EB: MOVF 50,F
00EC: BTFSC 03,2
00ED: GOTO 0F2
.................... { // If non-zero frame length..
.................... rxflag = 1; // ..set Rx frame flag
00EE: BSF 4B,2
.................... rxcount = rxin; // Reset counter for new frame
00EF: MOVF 50,W
00F0: MOVWF 52
.................... rxin = 0;
00F1: CLRF 50
.................... }
.................... } // Modem command 'AT...<CR>'?
.................... else if (b=='\r' && rxbuff[0]=='A')
00F2: GOTO 17F
00F3: MOVLW 0D
00F4: BSF 03,5
00F5: BSF 03,6
00F6: SUBWF 33,W
00F7: BTFSC 03,2
00F8: GOTO 0FC
00F9: BCF 03,5
00FA: BCF 03,6
00FB: GOTO 109
00FC: BCF 03,5
00FD: BCF 03,6
00FE: MOVLW 41
00FF: BSF 03,5
0100: SUBWF 20,W
0101: BTFSC 03,2
0102: GOTO 105
0103: BCF 03,5
0104: GOTO 109
0105: BCF 03,5
.................... {
.................... modemflag = 1; // Set flag (can't be handled on interrupt)
0106: BSF 4B,3
.................... rxin = 0;
0107: CLRF 50
.................... }
.................... else // Normal SLIP character..
0108: GOTO 17F
.................... {
.................... if (escflag) // ..following an escape char?
0109: BSF 03,5
010A: BSF 03,6
010B: BTFSC 34,0
010C: GOTO 110
010D: BCF 03,5
010E: BCF 03,6
010F: GOTO 136
0110: BCF 03,5
0111: BCF 03,6
.................... b = b==ESC_END ? SLIP_END : b==ESC_ESC ? SLIP_ESC : b;
0112: MOVLW DC
0113: BSF 03,5
0114: BSF 03,6
0115: SUBWF 33,W
0116: BTFSC 03,2
0117: GOTO 11B
0118: BCF 03,5
0119: BCF 03,6
011A: GOTO 11F
011B: BCF 03,5
011C: BCF 03,6
011D: MOVLW C0
011E: GOTO 131
011F: MOVLW DD
0120: BSF 03,5
0121: BSF 03,6
0122: SUBWF 33,W
0123: BTFSC 03,2
0124: GOTO 128
0125: BCF 03,5
0126: BCF 03,6
0127: GOTO 12C
0128: BCF 03,5
0129: BCF 03,6
012A: MOVLW DB
012B: GOTO 131
012C: BSF 03,5
012D: BSF 03,6
012E: MOVF 33,W
012F: BCF 03,5
0130: BCF 03,6
0131: BSF 03,5
0132: BSF 03,6
0133: MOVWF 33
0134: BCF 03,5
0135: BCF 03,6
.................... escflag = 0;
0136: BSF 03,5
0137: BSF 03,6
0138: BCF 34,0
.................... if (rxin == RXHDR_LEN-1)
0139: MOVLW 27
013A: BCF 03,5
013B: BCF 03,6
013C: SUBWF 50,W
013D: BTFSS 03,2
013E: GOTO 143
.................... { // If nearly at end of hdrs, reset checksum
.................... rdcheckhi = rdchecklo = 0;
013F: CLRF 56
0140: MOVF 56,W
0141: MOVWF 55
.................... rdcheckflag = 0;
0142: BCF 4B,6
.................... } // If after headers, calculate checksum
.................... if (rxin >= RXHDR_LEN)
0143: MOVLW 28
0144: SUBWF 50,W
0145: BTFSS 03,0
0146: GOTO 16E
.................... { // Alternate between checksum bytes..
.................... if (rdcheckflag)
0147: BTFSS 4B,6
0148: GOTO 15B
.................... { // Update lo byte value
.................... if ((rdchecklo = b+rdchecklo) < b)
0149: BSF 03,5
014A: BSF 03,6
014B: MOVF 33,W
014C: BCF 03,5
014D: BCF 03,6
014E: ADDWF 56,F
014F: BSF 03,5
0150: BSF 03,6
0151: MOVF 33,W
0152: BCF 03,5
0153: BCF 03,6
0154: SUBWF 56,W
0155: BTFSC 03,0
0156: GOTO 15A
.................... { // If lo byte overflow, increment hi byte
.................... if (++rdcheckhi == 0)
0157: INCFSZ 55,F
0158: GOTO 15A
.................... rdchecklo++;
0159: INCF 56,F
.................... } // ..and maybe carry back to lo byte!
.................... }
.................... else
015A: GOTO 16C
.................... { // Update hi byte value
.................... if ((rdcheckhi = b+rdcheckhi) < b)
015B: BSF 03,5
015C: BSF 03,6
015D: MOVF 33,W
015E: BCF 03,5
015F: BCF 03,6
0160: ADDWF 55,F
0161: BSF 03,5
0162: BSF 03,6
0163: MOVF 33,W
0164: BCF 03,5
0165: BCF 03,6
0166: SUBWF 55,W
0167: BTFSC 03,0
0168: GOTO 16C
.................... { // If hi byte overflow, increment lo byte
.................... if (++rdchecklo == 0)
0169: INCFSZ 56,F
016A: GOTO 16C
.................... rdcheckhi++;
016B: INCF 55,F
.................... } // ..and maybe carry back to hi byte!
.................... }
.................... rdcheckflag = !rdcheckflag; // Next time, check other byte
016C: MOVLW 40
016D: XORWF 4B,F
.................... }
.................... if (rxin < RXBUFFLEN) // Save char if room left in buffer
016E: MOVLW 50
016F: SUBWF 50,W
0170: BTFSC 03,0
0171: GOTO 17F
.................... {
.................... rxbuff[rxin++] = b;
0172: MOVF 50,W
0173: INCF 50,F
0174: MOVWF 77
0175: MOVLW A0
0176: ADDWF 77,W
0177: MOVWF 04
0178: BCF 03,7
0179: BSF 03,5
017A: BSF 03,6
017B: MOVF 33,W
017C: MOVWF 00
017D: BCF 03,5
017E: BCF 03,6
.................... }
.................... }
.................... }
.................... }
.................... /* EOF */
....................
017F: BCF 0A,3
0180: BCF 0A,4
0181: GOTO 020
.................... #include "\picc\io\pictcp.h" // ..and TCP functions
.................... /* TCP/IP functions for PIC Web server Copyright (c) Iosoft Ltd 2000
.................... **
.................... ** This software is only licensed for distribution with the book 'TCP/IP Lean',
.................... ** and may only be used for personal experimentation by the purchaser
.................... ** of that book, on condition that this copyright notice is retained.
.................... ** For commercial licensing, contact license@iosoft.co.uk
.................... **
.................... ** This is experimental software; use it entirely at your own risk */
....................
.................... /* Revisions:
.................... ** v0.01 JPB 30/3/00
.................... */
....................
.................... BOOL get_tcp(void);
.................... void put_tcp(void);
.................... BOOL get_ping_req(void);
.................... void put_ping_rep(void);
.................... BOOL get_ip(void);
.................... void put_ip(WORD len);
.................... void inc_lword(LWORD &lw);
.................... void add_lword(LWORD &lw, WORD val);
....................
.................... /* Get a TCP seqment, return 0 if error */
.................... BOOL get_tcp(void)
.................... {
.................... int hlen, n;
*
0DB3: BSF 03,5
0DB4: BSF 03,6
0DB5: BCF 17,0
.................... BOOL ret=0;
....................
.................... checkhi = checklo = 0;
0DB6: BCF 03,5
0DB7: BCF 03,6
0DB8: CLRF 54
0DB9: MOVF 54,W
0DBA: MOVWF 53
.................... if (get_word(remport) && get_word(locport) && // Source & dest ports
.................... get_lword(rseq.l) && get_lword(rack.l) && // Seq & ack numbers
.................... get_byte(hlen) && get_byte(rflags) && // Header len & flags
.................... skip_word() && skip_lword()) // Window, csum, urgent ptr
*
0DE8: MOVF 78,F
0DE9: BTFSC 03,2
0DEA: GOTO 70A
*
0E18: MOVF 78,F
0E19: BTFSC 03,2
0E1A: GOTO 70A
*
0E2B: MOVF 78,F
0E2C: BTFSC 03,2
0E2D: GOTO 70A
*
0E3E: MOVF 78,F
0E3F: BTFSC 03,2
0E40: GOTO 70A
*
0E4C: MOVF 78,F
0E4D: BTFSC 03,2
0E4E: GOTO 70A
*
0E56: MOVF 78,F
0E57: BTFSC 03,2
0E58: GOTO 70A
0E59: CALL 0A8
0E5A: MOVF 78,F
0E5B: BTFSC 03,2
0E5C: GOTO 70A
*
0E65: MOVF 78,F
0E66: BTFSC 03,2
0E67: GOTO 70A
.................... {
.................... iplen -= IPHDR_LEN; // Get TCP segment length
0E68: MOVLW 14
0E69: SUBWF 42,F
0E6A: MOVLW 00
0E6B: BTFSS 03,0
0E6C: DECF 43,F
0E6D: SUBWF 43,F
.................... check_byte(iplen>>8); // Check pseudoheader
0E6E: MOVF 43,W
0E6F: BSF 03,5
0E70: BSF 03,6
0E71: MOVWF 18
0E72: CLRF 19
0E73: MOVF 18,W
0E74: MOVWF 2D
0E75: BCF 03,5
0E76: BCF 03,6
0E77: CALL 046
.................... check_byte(iplen);
0E78: MOVF 42,W
0E79: BSF 03,5
0E7A: BSF 03,6
0E7B: MOVWF 2D
0E7C: BCF 03,5
0E7D: BCF 03,6
0E7E: CALL 046
.................... check_lword(local.l);
.................... check_lword(remote.l);
.................... check_byte(0);
*
0EB7: BSF 03,5
0EB8: BSF 03,6
0EB9: CLRF 2D
0EBA: BCF 03,5
0EBB: BCF 03,6
0EBC: CALL 046
.................... check_byte(PCOL_TCP);
0EBD: MOVLW 06
0EBE: BSF 03,5
0EBF: BSF 03,6
0EC0: MOVWF 2D
0EC1: BCF 03,5
0EC2: BCF 03,6
0EC3: CALL 046
.................... rxout = (hlen>>2) + IPHDR_LEN;
0EC4: BSF 03,5
0EC5: BSF 03,6
0EC6: MOVF 15,W
0EC7: BCF 03,5
0EC8: BCF 03,6
0EC9: MOVWF 77
0ECA: RRF 77,F
0ECB: RRF 77,F
0ECC: MOVLW 3F
0ECD: ANDWF 77,F
0ECE: MOVF 77,W
0ECF: MOVWF 77
0ED0: MOVLW 14
0ED1: ADDWF 77,W
0ED2: MOVWF 51
.................... rpdlen = iplen - rxout + IPHDR_LEN;
0ED3: MOVF 42,W
0ED4: BSF 03,5
0ED5: BSF 03,6
0ED6: MOVWF 18
0ED7: BCF 03,5
0ED8: BCF 03,6
0ED9: MOVF 51,W
0EDA: BSF 03,5
0EDB: BSF 03,6
0EDC: SUBWF 18,F
0EDD: BCF 03,5
0EDE: BCF 03,6
0EDF: MOVF 43,W
0EE0: BSF 03,5
0EE1: BSF 03,6
0EE2: MOVWF 19
0EE3: CLRW
0EE4: BTFSS 03,0
0EE5: DECF 19,F
0EE6: SUBWF 19,F
0EE7: MOVLW 14
0EE8: ADDWF 18,W
0EE9: BCF 03,5
0EEA: BCF 03,6
0EEB: MOVWF 44
0EEC: MOVLW 00
0EED: BTFSC 03,0
0EEE: ADDLW 01
0EEF: BSF 03,5
0EF0: BSF 03,6
0EF1: ADDWF 19,W
0EF2: BCF 03,5
0EF3: BCF 03,6
0EF4: MOVWF 45
.................... checkhi += rdcheckhi;
0EF5: MOVF 55,W
0EF6: ADDWF 53,F
.................... checklo += rdchecklo;
0EF7: MOVF 56,W
0EF8: ADDWF 54,F
.................... ret = (checkhi==0xff) && (checklo==0xff);
0EF9: INCF 53,W
0EFA: BTFSS 03,2
0EFB: GOTO 6FF
0EFC: INCF 54,W
0EFD: BTFSC 03,2
0EFE: GOTO 705
0EFF: BSF 03,5
0F00: BSF 03,6
0F01: BCF 17,0
0F02: BCF 03,5
0F03: BCF 03,6
0F04: GOTO 70A
0F05: BSF 03,5
0F06: BSF 03,6
0F07: BSF 17,0
0F08: BCF 03,5
0F09: BCF 03,6
.................... }
.................... return(ret);
0F0A: MOVLW 00
0F0B: BSF 03,5
0F0C: BSF 03,6
0F0D: BTFSC 17,0
0F0E: MOVLW 01
0F0F: BCF 03,5
0F10: BCF 03,6
0F11: MOVWF 78
.................... }
....................
.................... /* Put out a TCP segment. Checksum must be set to correct value for data */
.................... void put_tcp(void)
.................... {
.................... WORD len;
....................
.................... checkflag = 0; // Ensure we're on an even byte
*
09FB: BCF 4B,5
.................... put_word(locport); // Local and remote ports
09FC: MOVF 33,W
09FD: BSF 03,5
09FE: BSF 03,6
09FF: MOVWF 21
0A00: BCF 03,5
0A01: BCF 03,6
0A02: MOVF 32,W
0A03: BSF 03,5
0A04: BSF 03,6
0A05: MOVWF 20
0A06: BCF 03,5
0A07: BCF 03,6
0A08: CALL 1E9
.................... put_word(remport);
0A09: MOVF 35,W
0A0A: BSF 03,5
0A0B: BSF 03,6
0A0C: MOVWF 21
0A0D: BCF 03,5
0A0E: BCF 03,6
0A0F: MOVF 34,W
0A10: BSF 03,5
0A11: BSF 03,6
0A12: MOVWF 20
0A13: BCF 03,5
0A14: BCF 03,6
0A15: CALL 1E9
..................
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -