📄 pccom2.asm
字号:
; FILENAME:
; 内容: 微机串口通信功能综合检测
DISP MACRO VAR
MOV AH, 9
MOV DX, OFFSET VAR
INT 21H
ENDM
DATA SEGMENT
TEXT DB 'THE QUICK BROWN FOX JUMPS OVER LAZY DOG',0DH,0AH
LLL EQU $-TEXT
MESG1 DB 0DH,0AH
DB '(1) TEST COM1 (2) TEST COM2 (3) TEST END $'
MESG2 DB 0DH,0AH
DB '(1) INTERNAL LOOP (2) EXTERNAL LOOP $'
MESG3 DB 0DH,0AH,'$'
ERROR DB 'COM BAD !',0DH,0AH,'$'
XF8 DW ?
XFC DW ?
XFD DW ?
COM DW ?
MODE DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
BEG: MOV AX, DATA
MOV DS, AX
LAST1: DISP MESG1 ;显示操作信息
MOV AH, 1
INT 21H ;等待键入
CMP AL,'1'
JE NEXT1 ; 转测主串口,转(这种说法比较随意,应写明转去执行哪个程序。).
CMP AL, '2'
JE NEXT2 ; 转测辅串口,转
CMP AL, '3'
JNE LAST1
JMP EXIT ;测试结束,转退出
NEXT1: MOV XF8,3F8H
MOV XFC, 3FCH
MOV XFD, 3FDH
MOV COM, 0
MOV ERROR+3, '1'
JMP NEXT3
NEXT2: MOV XF8,2F8H
MOV XFC, 2FCH
MOV XFD, 2FDH
MOV COM, 1
MOV ERROR+3, '2'
NEXT3: DISP MESG2 ;显示操作信息
MOV AH, 1
INT 21H ;等待键入
CMP AL,'1'
JE NEXT4 ; 转内环测试,转
CMP AL,'2'
JE NEXT5 ; 转外环测试,转
JMP NEXT3
NEXT4: MOV MODE, 00010000B ;内环控制字→MODE单元
JMP NEXT6
NEXT5: MOV MODE, 00000000B ;正常通信控制字→MODE单元
NEXT6: DISP MESG3
CALL I8250 ;串口初始化
MOV CH,10 ;电文行数→CH
AGAIN: MOV CL, LLL ;电文长度→CL
MOV BX, OFFSET TEXT ;首字符偏移地址→BX
SCANT: MOV DX, XFD
IN AL, DX
TEST AL,20H ;发送保持寄存器空闲?
JZ SCANT ;是,转等待键盘输入
MOV DX, XF8
MOV AL, [BX] ;取数据→AL
OUT DX,AL ;发送一个数据
MOV SI,0 ;计数值→SI
SCANR: MOV DX, XFD
IN AL, DX
TEST AL,01H ;接收数据准备好?
JNZ RECEIVE ;是,转接收数据
DEC SI ;减1计数
JNE SCANR
JMP ERR ;超时,转出错处理
RECEIVE:
MOV DX, XF8
IN AL,DX ;接收1个数据→AL
MOV AH, 0EH
INT 10H ;屏幕显示
INC BX
DEC CL ;电文长度计数
JNZ SCANT
DEC CH ;行计数
JNZ AGAIN
JMP LAST1
ERR: DISP ERROR ;显示出错信息
JMP BEG
EXIT: MOV AH, 4CH
INT 21H
I8250 PROC
MOV AX, 00C7H ;波特率4800
MOV DX,COM ;无校验,8位数据
INT 14H
MOV DX, XFC
MOV AL, MODE
OUT DX, AL ;写MODEM控制字
RET
I8250 ENDP
CODE ENDS
END BEG
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -