📄 s2.asm
字号:
MOV WORD PTR CS:RDSTT_4,5
MOV AX,OFFSET ATC1
MOV WORD PTR CS:RDSTT_5,AX
MOV AX,SEG ATC1
MOV WORD PTR CS:RDSTT_6,AX
CALL RS232T
MOV WORD PTR CS:RDSTT_0,0*12 ;X
MOV WORD PTR CS:RDSTT_1,2*16 ;Y
MOV WORD PTR CS:RDSTT_2,34H
MOV WORD PTR CS:RDSTT_3,0
MOV WORD PTR CS:RDSTT_4,5
MOV AX,OFFSET ATC2
MOV WORD PTR CS:RDSTT_5,AX
MOV AX,SEG ATC2
MOV WORD PTR CS:RDSTT_6,AX
CALL RS232T
MOV WORD PTR CS:RDSTT_0,0*12 ;X
MOV WORD PTR CS:RDSTT_1,3*16 ;Y
MOV WORD PTR CS:RDSTT_2,34H
MOV WORD PTR CS:RDSTT_3,0
MOV WORD PTR CS:RDSTT_4,5
MOV AX,OFFSET ATC3
MOV WORD PTR CS:RDSTT_5,AX
MOV AX,SEG ATC3
MOV WORD PTR CS:RDSTT_6,AX
CALL RS232T
MOV AX,WORD PTR DST5_0
MOV DL,60
DIV DL
PUSH AX
XOR AH,AH
MOV DL,10
DIV DL
ADD AL,20H
ADD AH,20H
MOV BYTE PTR TC2_0[0],AL
MOV BYTE PTR TC2_0[1],AH
POP AX
XCHG AH,AL
XOR AH,AH
MOV DL,10
DIV DL
ADD AL,20H
ADD AH,20H
MOV BYTE PTR TC2_0[3],AL
MOV BYTE PTR TC2_0[4],AH
MOV WORD PTR CS:RDSTT_0,5*12 ;X
MOV WORD PTR CS:RDSTT_1,0*16 ;Y
MOV WORD PTR CS:RDSTT_2,34H
MOV WORD PTR CS:RDSTT_3,0
MOV WORD PTR CS:RDSTT_4,5
MOV AX,OFFSET TC2_0
MOV WORD PTR CS:RDSTT_5,AX
MOV AX,SEG TC2_0
MOV WORD PTR CS:RDSTT_6,AX
CALL RS232T
MOV AX,WORD PTR DST5_1
MOV DL,60
DIV DL
PUSH AX
XOR AH,AH
MOV DL,10
DIV DL
ADD AL,20H
ADD AH,20H
MOV BYTE PTR TC2_1[0],AL
MOV BYTE PTR TC2_1[1],AH
POP AX
XCHG AH,AL
XOR AH,AH
MOV DL,10
DIV DL
ADD AL,20H
ADD AH,20H
MOV BYTE PTR TC2_1[3],AL
MOV BYTE PTR TC2_1[4],AH
MOV WORD PTR CS:RDSTT_0,5*12 ;X
MOV WORD PTR CS:RDSTT_1,1*16 ;Y
MOV WORD PTR CS:RDSTT_2,34H
MOV WORD PTR CS:RDSTT_3,0
MOV WORD PTR CS:RDSTT_4,5
MOV AX,OFFSET TC2_1
MOV WORD PTR CS:RDSTT_5,AX
MOV AX,SEG TC2_1
MOV WORD PTR CS:RDSTT_6,AX
CALL RS232T
MOV AX,WORD PTR DST5_2
MOV DL,60
DIV DL
PUSH AX
XOR AH,AH
MOV DL,10
DIV DL
ADD AL,20H
ADD AH,20H
MOV BYTE PTR TC2_2[0],AL
MOV BYTE PTR TC2_2[1],AH
POP AX
XCHG AH,AL
XOR AH,AH
MOV DL,10
DIV DL
ADD AL,20H
ADD AH,20H
MOV BYTE PTR TC2_2[3],AL
MOV BYTE PTR TC2_2[4],AH
MOV WORD PTR CS:RDSTT_0,5*12 ;X
MOV WORD PTR CS:RDSTT_1,2*16 ;Y
MOV WORD PTR CS:RDSTT_2,34H
MOV WORD PTR CS:RDSTT_3,0FFH
MOV WORD PTR CS:RDSTT_4,5
MOV AX,OFFSET TC2_2
MOV WORD PTR CS:RDSTT_5,AX
MOV AX,SEG TC2_2
MOV WORD PTR CS:RDSTT_6,AX
CALL RS232T
MOV AX,WORD PTR DST5_3
MOV DL,60
DIV DL
PUSH AX
XOR AH,AH
MOV DL,10
DIV DL
ADD AL,20H
ADD AH,20H
MOV BYTE PTR TC2_3[0],AL
MOV BYTE PTR TC2_3[1],AH
POP AX
XCHG AH,AL
XOR AH,AH
MOV DL,10
DIV DL
ADD AL,20H
ADD AH,20H
MOV BYTE PTR TC2_3[3],AL
MOV BYTE PTR TC2_3[4],AH
MOV WORD PTR CS:RDSTT_0,5*12 ;X
MOV WORD PTR CS:RDSTT_1,3*16 ;Y
MOV WORD PTR CS:RDSTT_2,34H
MOV WORD PTR CS:RDSTT_3,0
MOV WORD PTR CS:RDSTT_4,5
MOV AX,OFFSET TC2_3
MOV WORD PTR CS:RDSTT_5,AX
MOV AX,SEG TC2_3
MOV WORD PTR CS:RDSTT_6,AX
CALL RS232T
MOV DI,OFFSET TC2_2
MOV BP,2*16
CALL TRSS
CMP AL,'0' ;acknowledge key
JZ TRS2
JMP TRSZ
TRS2: CMP WORD PTR DST6_0,0
JNZ TRS3
JMP TRSZ
TRS3: MOV WORD PTR CS:RDSTT_0,5*12 ;X
MOV WORD PTR CS:RDSTT_1,2*16 ;Y
MOV WORD PTR CS:RDSTT_2,34H
MOV WORD PTR CS:RDSTT_3,0
MOV WORD PTR CS:RDSTT_4,5
MOV AX,OFFSET TC2_2
MOV WORD PTR CS:RDSTT_5,AX
MOV AX,SEG TC2_2
MOV WORD PTR CS:RDSTT_6,AX
CALL RS232T
MOV WORD PTR CS:RDSTT_0,5*12 ;X
MOV WORD PTR CS:RDSTT_1,3*16 ;Y
MOV WORD PTR CS:RDSTT_2,34H
MOV WORD PTR CS:RDSTT_3,0FFH
MOV WORD PTR CS:RDSTT_4,5
MOV AX,OFFSET TC2_3
MOV WORD PTR CS:RDSTT_5,AX
MOV AX,SEG TC2_3
MOV WORD PTR CS:RDSTT_6,AX
CALL RS232T
MOV DI,OFFSET TC2_3
MOV BP,3*16
CALL TRSS
CMP AL,'0' ;acknowledge key
JZ TRS4
JMP TRSZ
TRS4: MOV DL,10
MOV AL,BYTE PTR TC2_2[0]
XOR CX,CX
MOV CL,BYTE PTR TC2_2[1]
SUB AL,20H
MUL DL
SUB CL,20H
ADD AX,CX
MOV DX,60
MUL DX
PUSH AX
MOV DL,10
MOV AL,BYTE PTR TC2_2[3]
XOR CX,CX
MOV CL,BYTE PTR TC2_2[4]
SUB AL,20H
MUL DL
SUB CL,20H
ADD AX,CX
POP CX
ADD AX,CX
MOV WORD PTR DST5_2,AX
MOV DL,10
MOV AL,BYTE PTR TC2_3[0]
XOR CX,CX
MOV CL,BYTE PTR TC2_3[1]
SUB AL,20H
MUL DL
SUB CL,20H
ADD AX,CX
MOV DX,60
MUL DX
PUSH AX
MOV DL,10
MOV AL,BYTE PTR TC2_3[3]
XOR CX,CX
MOV CL,BYTE PTR TC2_3[4]
SUB AL,20H
MUL DL
SUB CL,20H
ADD AX,CX
POP CX
ADD AX,CX
MOV WORD PTR DST5_3,AX
MOV BX,WORD PTR DST7_4
MOV AX,WORD PTR DST5_2
MOV WORD PTR DST6_1,AX
MOV WORD PTR DST1[BX+2],AX
MOV AX,WORD PTR DST5_3
SUB AX,WORD PTR DST5_2
MOV WORD PTR DST6_2,AX
MOV WORD PTR DST1[BX+4],AX
MOV DX,OFFSET FILE1
MOV CX,0
MOV AH,3CH
INT 21H
MOV BX,AX
MOV CX,2947
MOV DX,OFFSET DST1
SUB DX,200H
MOV AH,40H
INT 21H
MOV AH,3EH
INT 21H
TRSZ: POP BP
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
RET
;
TRSS: XOR SI,SI
CALL TRSSX
TRSS0: MOV AH,07H
INT 21H
CMP AL,'1' ;down arrow key
JNE TRSS2
CMP BYTE PTR DS:[DI],20H ;'0'
JNZ TRSS1
MOV BYTE PTR DS:[DI],29H ;'9'
CALL TRSSZ
JMP TRSS0
TRSS1: DEC BYTE PTR DS:[DI]
CALL TRSSZ
JMP TRSS0
TRSS2: CMP AL,'3' ;up arrow key
JNZ TRSS4
CMP BYTE PTR DS:[DI],29H ;'9'
JNZ TRSS3
MOV BYTE PTR DS:[DI],20H ;'0'
CALL TRSSZ
JMP TRSS0
TRSS3: INC BYTE PTR DS:[DI]
CALL TRSSZ
JMP TRSS0
TRSS4: CMP AL,'5' ;<- key
JNZ TRSS7
CMP SI,0
JZ TRSS6
CALL TRSSY
CMP SI,3
JNZ TRSS5
DEC SI
DEC DI
TRSS5: DEC SI
DEC DI
CALL TRSSX
TRSS6: JMP TRSS0
TRSS7: CMP AL,'n' ;-> key
JNZ TRSSA
CMP SI,4
JZ TRSS9
CALL TRSSY
CMP SI,1
JNZ TRSS8
INC SI
INC DI
TRSS8: INC SI
INC DI
CALL TRSSX
TRSS9: JMP TRSS0
TRSSA: CMP AL,' ' ;reset key
JNZ TRSSB
JMP TRSSC
TRSSB: CMP AL,'0' ;ACK key
JZ TRSSC
JMP TRSS0
TRSSC: RET
;
TRSSX: PUSH AX
MOV AX,12
MUL SI
MOV WORD PTR CS:RDSTT_0,AX ;X
ADD WORD PTR CS:RDSTT_0,5*12
MOV WORD PTR CS:RDSTT_1,BP ;Y
MOV WORD PTR CS:RDSTT_2,34H
MOV WORD PTR CS:RDSTT_3,0
MOV WORD PTR CS:RDSTT_4,1
MOV AX,DI
MOV WORD PTR CS:RDSTT_5,AX
MOV AX,SEG TC2_0
MOV WORD PTR CS:RDSTT_6,AX
CALL RS232T
POP AX
RET
;
TRSSY: PUSH AX
MOV AX,12
MUL SI
MOV WORD PTR CS:RDSTT_0,AX ;X
ADD WORD PTR CS:RDSTT_0,5*12
MOV WORD PTR CS:RDSTT_1,BP ;Y
MOV WORD PTR CS:RDSTT_2,34H
MOV WORD PTR CS:RDSTT_3,0FFH
MOV WORD PTR CS:RDSTT_4,1
MOV AX,DI
MOV WORD PTR CS:RDSTT_5,AX
MOV AX,SEG TC2_0
MOV WORD PTR CS:RDSTT_6,AX
CALL RS232T
POP AX
RET
;
TRSSZ: CMP BP,2*16
JZ TRSSZ1
JMP TRSSZ4
TRSSZ1: PUSH AX
MOV DL,10
MOV AL,BYTE PTR TC2_2[0]
XOR CX,CX
MOV CL,BYTE PTR TC2_2[1]
SUB AL,20H
MUL DL
SUB CL,20H
ADD AX,CX
MOV DX,60
MUL DX
PUSH AX
MOV DL,10
MOV AL,BYTE PTR TC2_2[3]
XOR CX,CX
MOV CL,BYTE PTR TC2_2[4]
SUB AL,20H
MUL DL
SUB CL,20H
ADD AX,CX
POP CX
ADD CX,AX
POP AX
CMP CX,WORD PTR DST5_3
JAE TRSSZ2
MOV WORD PTR DST5_2,CX
JMP TRSSZA
TRSSZ2: CMP AL,'1' ;down arrow key
JNE TRSSZ3
JMP TRSSZ8
TRSSZ3: JMP TRSSZ6
TRSSZ4: PUSH AX
MOV DL,10
MOV AL,BYTE PTR TC2_3[0]
XOR CX,CX
MOV CL,BYTE PTR TC2_3[1]
SUB AL,20H
MUL DL
SUB CL,20H
ADD AX,CX
MOV DX,60
MUL DX
PUSH AX
MOV DL,10
MOV AL,BYTE PTR TC2_3[3]
XOR CX,CX
MOV CL,BYTE PTR TC2_3[4]
SUB AL,20H
MUL DL
SUB CL,20H
ADD AX,CX
POP CX
ADD CX,AX
POP AX
CMP CX,WORD PTR DST5_0
JA TRSSZ5
CMP CX,WORD PTR DST5_2
JBE TRSSZ5
MOV WORD PTR DST5_3,CX
JMP TRSSZA
TRSSZ5: CMP AL,'1' ;down arrow key
JNE TRSSZ6
JMP TRSSZ8
TRSSZ6: CMP BYTE PTR DS:[DI],20H ;'0'
JNZ TRSSZ7
MOV BYTE PTR DS:[DI],29H ;'9'
JMP TRSSZE
TRSSZ7: DEC BYTE PTR DS:[DI]
JMP TRSSZE
TRSSZ8: CMP BYTE PTR DS:[DI],29H ;'9'
JNZ TRSSZ9
MOV BYTE PTR DS:[DI],20H ;'0'
JMP TRSSZE
TRSSZ9: INC BYTE PTR DS:[DI]
JMP TRSSZE
TRSSZA: CALL TRSSX
MOV AX,WORD PTR DST5_3
SUB AX,WORD PTR DST5_2
MOV WORD PTR DST5_1,AX
MOV DL,60
DIV DL
PUSH AX
XOR AH,AH
MOV DL,10
DIV DL
ADD AL,20H
ADD AH,20H
MOV BYTE PTR TC2_1[0],AL
MOV BYTE PTR TC2_1[1],AH
POP AX
XCHG AH,AL
XOR AH,AH
MOV DL,10
DIV DL
ADD AL,20H
ADD AH,20H
MOV BYTE PTR TC2_1[3],AL
MOV BYTE PTR TC2_1[4],AH
MOV WORD PTR CS:RDSTT_0,5*12 ;X
MOV WORD PTR CS:RDSTT_1,1*16 ;Y
MOV WORD PTR CS:RDSTT_2,34H
MOV WORD PTR CS:RDSTT_3,0
MOV WORD PTR CS:RDSTT_4,5
MOV AX,OFFSET TC2_1
MOV WORD PTR CS:RDSTT_5,AX
MOV AX,SEG TC2_1
MOV WORD PTR CS:RDSTT_6,AX
CALL RS232T
TRSSZE: RET
TRS ENDP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RS232 PROC
RDSTT_0 DW 0
RDSTT_1 DW 0
RDSTT_2 DW 0
RDSTT_3 DW 0
RDSTT_4 DW 0
RDSTT_5 DW 0
RDSTT_6 DW 0
RDSTT_7 DW 0
RS232I: PUSH AX
PUSH DX
MOV AL,80H
MOV DX,3FBH
OUT DX,AL
MOV AL,06H ;19200 bits/s
MOV DX,3F8H
OUT DX,AL
MOV AL,00H
MOV DX,3F9H
OUT DX,AL
MOV AL,00000011B
MOV DX,3FBH
OUT DX,AL
POP DX
POP AX
RET
;
RS232C: PUSH AX
PUSH DX
CALL RSC1
MOV AL,1BH
CALL RSC3
MOV AL,51H
CALL RSC3
MOV AL,00H
CALL RSC3
POP DX
POP AX
RET
;
RS232T: PUSH AX
PUSH BX
PUSH CX
PUSH DX
CMP WORD PTR CS:RDSTT_3,0
JNZ RS232T0
OR WORD PTR CS:RDSTT_0,0F000H
OR WORD PTR CS:RDSTT_1,08000H
JMP RS232T1
RS232T0:OR WORD PTR CS:RDSTT_0,08000H
OR WORD PTR CS:RDSTT_1,0F000H
RS232T1:CALL RSC1
MOV AL,1BH
CALL RSC3
MOV AL,BYTE PTR CS:RDSTT_2
CALL RSC3
CALL RSC1
MOV AL,1BH
CALL RSC3
MOV AL,7AH
CALL RSC3
MOV AL,BYTE PTR CS:RDSTT_0[1]
CALL RSC3
MOV AL,BYTE PTR CS:RDSTT_0[0]
CALL RSC3
MOV AL,BYTE PTR CS:RDSTT_1[1]
CALL RSC3
MOV AL,BYTE PTR CS:RDSTT_1[0]
CALL RSC3
XOR BX,BX
MOV CX,WORD PTR CS:RDSTT_4
RS232T2:PUSH DS
PUSH BX
MOV AX,WORD PTR CS:RDSTT_6
MOV DS,AX
ADD BX,WORD PTR CS:RDSTT_5
CALL RSC1
MOV AL,BYTE PTR DS:[BX]
CALL RSC3
POP BX
POP DS
INC BX
LOOP RS232T2
POP DX
POP CX
POP BX
POP AX
RET
;
RSC1: MOV DX,3FEH ;3F8H+6=3FEH
IN AL,DX
TEST AL,00010000B ;BUSY
;????? JNZ RSC2
JZ RSC1 ;????? JMP RSC1
;????? RSC2: CALL DELAY
RET
RSC3: MOV DX,3F8H
OUT DX,AL
RSC4: MOV DX,3FDH
IN AL,DX
TEST AL,01000000B ;
JZ RSC4
;????? CALL DELAY
RET
;?????
;DELAY PROC
; PUSH CX
; MOV CX,10000 ;;;;;;;;;;
;DELAY1: NOP
; LOOP DELAY1
; POP CX
; RET
;DELAY ENDP
RS232 ENDP
CODE ENDS
END START
;----发送1字节(在AL中)---------------------
transmit_byte proc near
pusha
mov ah,al
mov dx,portiobas
add dx,6
;portiobas+6为MODEM状态寄存器,D4位为串口的CTS状态
;等待终端发出的"忙"BUSY信号,如BUSY=1则循环等待.BUSY经RS232板电平转换后,接微机串口的CTS端
wait_busy:in al,dx ;
test al,10h
jz wait_busy ;
mov dx,portiobas
mov al,ah
out dx,al ;发出数据,将数据送"发送保持寄存器"
add dx,5
;portiobas+5为线路状态寄存器,D6=1:表示"发送保持寄存器"和"发送移位寄存器"都处于空闲状态,如不空则等待
waittransmit:in al,dx
test al,40h
jz waittransmit
popa
ret
transmit_byte endp
;--------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -