汇编的。原C的汇编版本
END_F EQU 7FH
START_F EQU 7EH
ESC_F EQU 7DH
SEND_DIR BIT T1
CSEG AT 23H
JMP SERPROC
RSEG BITS
PUBLIC SER_RCVED
SEND_FINISH: DBIT 1
SER_RCVED: DBIT 1
ESC_FLAG: DBIT 1
IS_RCVING: DBIT 1
RSEG DATAS
PUBLIC R_PNT
R_PNT : DS 2
S_PNT : DS 2
RSEG CODES
PUBLIC INIT_SER_SEND
INIT_SER_SEND:
USING 0
MOV S_PNT, #HIGH(0A000H)
MOV S_PNT+1, #LOW(0A000H)
SETB SEND_DIR
CLR SEND_FINISH
SETB TI
RET
RSEG CODES
SERPROC:
USING 2
PUSH ACC
PUSH B
PUSH PSW
MOV PSW, #10H
JBC TI, SER_SEND
; ser recive proc
CLR RI
MOV A, SBUF
MOV B, A
CJNE A, #START_F, SER_NOT_R_START
CLR A
MOV R_PNT, A
MOV R_PNT+1, A
CLR SER_RCVED
CLR ESC_FLAG
SETB IS_RCVING
JMP SER_R_DATA
SER_NOT_R_START:
JNB IS_RCVING, SER_EXIT
CJNE A, #END_F, SER_NOT_R_END
SETB SER_RCVED
CLR IS_RCVING
JMP SER_R_DATA
SER_NOT_R_END:
JBC ESC_FLAG, SER_ESC_PREV
CJNE A, #ESC_F, SER_R_DATA
SETB ESC_FLAG
JMP SER_EXIT
SER_ESC_PREV:
XRL B, #20H
SER_R_DATA:
BACKUP_HI_ADDR
PUSH DPS
PUSH DPH
PUSH DPL
MOV DPS, #0
CHANGE_RAM 1
MOV DPH, R_PNT
MOV DPL, R_PNT + 1
MOV A, B
MOVX @DPTR, A
INC DPTR
MOV R_PNT, DPH
MOV R_PNT+1, DPL
CALL CHANGECOMMLAMP
POP DPL
POP DPH
POP DPS
RESTORE_HI_ADDR
JMP SER_EXIT
SER_SEND:
JB SEND_FINISH, SER_S_FIN
BACKUP_HI_ADDR
PUSH DPS
PUSH DPH
PUSH DPL
CHANGE_RAM 1
MOV DPS, #0
MOV DPH, S_PNT
MOV DPL, S_PNT + 1
MOVX A, @DPTR
MOV SBUF, A
INC DPTR
MOV S_PNT, DPH
MOV S_PNT + 1, DPL
CJNE A, #END_F, SER_S_EXIT
SETB SEND_FINISH
SER_S_EXIT:
POP DPL
POP DPH
POP DPS
RESTORE_HI_ADDR
JMP SER_EXIT
SER_S_FIN:
CLR SEND_DIR
SER_EXIT:
POP PSW
POP B
POP ACC
RETI
END
发表时间:2004年7月16日14:07:11