📄 5t.asm
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; 两台PC机间RS-232串口通信 ;;;
;;; 发送程序 ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DATA SEGMENT
;COM1 EQU 3F8H-3FFH ;PC机上自带的两个串口地址
;COM2 EQU 2F8H-2FFH
IO8250TR EQU 3F8H ;发送端数据寄存器地址
IO8250RR EQU 3F8H ;接受端数据寄存器地址
IO8250DIVL EQU 3F8H ;除数寄存器低字节地址
IO8250DIVH EQU 3F9H ;除数寄存器高字节地址
IO8250IER EQU 3F9H ;中断允许寄存器地址
IO8250IIR EQU 3FAH ;中断识别寄存器地址
IO8250LCR EQU 3FBH ;线路控制寄存器地址
IO8250MCR EQU 3FCH ;MODEM控制寄存器地址
IO8250LSR EQU 3FDH ;线路状态寄存器地址
IO8250MSR EQU 3FEH ;MODEM状态寄存器地址
DATA ENDS
STACK1 SEGMENT STACK
DB 100 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START: MOV AL,10000000B ;8250初始化,设DLAB=1
MOV DX,IO8250LCR
OUT DX,AL
MOV AX,30H ;波特率2400 kb/s
MOV DX,IO8250DIVL
OUT DX,AL ;写入除数低字节
MOV AL,AH
MOV DX,IO8250DIVH
OUT DX,AL ;写入除数高字节
MOV AL,00001011B ;8位数据,1位停止,奇校验
MOV DX,IO8250LCR
OUT DX,AL ;写入线路控制寄存器
MOV AL,00000011B ;自检关闭,请求发送
MOV DX,3FCH
OUT DX,AL ;写入MODEM控制寄存器
MOV AL,0
MOV DX,IO8250IER
OUT DX,AL ;禁止中断
SEND: MOV AH,1
INT 21H ;读键盘
CMP AL,21H ;判断是否是字符'!'
JZ EN ;是的话结束发送
MOV DX,IO8250TR ;发送
OUT DX,AL
MOV DX,IO8250LSR ;读线路状态
RE: IN AL,DX ;发送寄存器是否空闲
TEST AL,00100000B
JZ RE ;不空闲的话继续等待
JMP SEND
EN: MOV DX,IO8250TR ;将结束信息发送另外一台机器,通知结束
OUT DX,AL
MOV AH,4CH
INT 21H
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -