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

📄 picweb.lst

📁 《嵌入式系统 Web 服务器:TCP/IP Lean》
💻 LST
📖 第 1 页 / 共 5 页
字号:
....................  
.................... /* 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 + -