📄 www8051.asm
字号:
.nolist.include "param.inc".include "8019.inc".list.if (MAGIC ^ (VERSION+7)) .print "Invalid ACTIVESTACK/DUALSTACK/SERIAL setings" .err.endif.include "ether.inc".include "ip.inc"; "telnet" .global STACK1MODE .equ STACK1MODE, RESENDMODE .global ETHRETRY1 .equ ETHRETRY1, 5*50 ; timeout = 50 s .global PORT1 ; local port .equ PORT1, 23 .global PORT3 ; remote port .equ PORT3, 23; "http" .global STACK2MODE .equ STACK2MODE, NORESENDMODE .global ETHRETRY2 .equ ETHRETRY2, 5*2 ; timeout = 2 s .global PORT2 ; local port .equ PORT2, 80 .text .global open_stack1 .global process_stack1 .global close_stack1open_stack1: retprocess_stack1: ljmp telnetclose_stack1: ljmp close_telnet .global open_stack2 .global process_stack2 .global close_stack2open_stack2: ljmp open_httpprocess_stack2: ljmp httpclose_stack2: ret .rdata.global data_addr.global data_len.global unwrited.global state80data_addr: .ds 1 ;start of data in TCP packetdata_len: .ds 1 ;length of data in TCP packetunwrited: .ds.b 1 ;unwrited data lengthstate80: .ds.b 1;;PCODE DATA.global chkacc, chklen, chkaddr.global pcodeMSB, pcodeLSBchkacc: .ds 1chklen: .ds 1chkaddr: .ds 1pcodeMSB: .ds.b 1pcodeLSB: .ds.b 1;SERIAL DATA.if RD2SER.global r1point, r2point.global s1point, s2pointr1point: .ds 1r2point: .ds 1s1point: .ds 1s2point: .ds 1.else.global r1point, s1pointr1point: .ds.b 1s1point: .ds.b 1.endif;PACKET DRIVER.global next_packet, curr_recv, curpagenext_packet: .ds.b 1curr_recv: .ds.b 1curpage: .ds.b 1;;#########################################################; Main Loop;#########################################################; .section fast, #alloc;************************************************************* jnb rxint, no23ch ;if Not Data to send, don't make connection jnb flagIPactive,no23ch ;if flash_ip_point = 0.0.0.0, ;don't make connection mov r7,#LASTSTACK1 lcall changeStack mov a,tcpState jnz est23ch ;if Connect Established, don't make new lcall ConnectTCP1 sjmp no23chest23ch: jb flag1WaitForAck,no23ch ;if All previous send data is Acked ;and sizeof(free space in Rx buffer) < 0x100 chars ;then send output packet.if RD2SER clr C mov a, r1point+1 ; LSB subb a, r2point+1 mov a, r1point ; MSB subb a, r2point jnb Acc.7,noadj1 add a,#HIGH(lngrser)noadj1: clr C jnz no23ch ; unused buffer space > 0xFF.else mov a,r1point cjne a,#rser+(MAXCHAR/2),.+3 jc no23ch ;jump if sizeof(unsend data in Rx buffer) < MAXCHAR2/2.endif mov a,r1point cjne a,#rser+(MAXCHAR/2),.+3 jc no23ch ;jump if sizeof(unsend data in Rx buffer) < MAXCHAR/2 lcall OutTCP1 ;send all queued datano23ch: .section slow, #alloc;*************************************************************;; telnet timer;~50 ms loop mov a,Retry1 jz no23timer dec Timeout1 mov a,Timeout1 jnz no23timer;~200 ms loop mov Timeout1,#ethtiming dec Retry1 mov a,Retry1 jz kill23 lcall RetryTCP1 ajmp no23kill23: lcall CloseTCP1 ajmp no23no23timer: mov r7,#LASTSTACK1 lcall changeStack jnb B2B(tcpState, stateEstablished),no23 jbc flag1WaitForAck,no23 jnb rxint,no23 lcall OutTCP1 ;send all queued ;data, don't wait for limit MAXCHAR/2no23:;; http timer;~50 ms loop mov a,Retry2 jz no80 dec Timeout2 mov a,Timeout2 jnz no80;~200 ms loop mov Timeout2,#ethtiming dec Retry2 mov a,Retry2 jnz no80 lcall CloseTCP2no80: ;; END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -