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

📄 s2.asm

📁 51单片机模拟串口
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	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 + -