实验目的:
学习串行接口8250的工作原理及编程和中断程序的设计,运用微机系统串行通信知识,进行微机系统串行口的测试。
实验要求:文章来源:https://www.toymoban.com/news/detail-765302.html
编写程序对微机系统的串行口进行自发自收内环测试,从键盘键入发送数据,屏幕显示接收数据。发送要求采用查询方式,接收采用中断方式。文章来源地址https://www.toymoban.com/news/detail-765302.html
DATA SEGMENT USE16
OLD0C DD ?
FLAG DB 0
MSG DB 'You can play a key on the keybord!',0AH,0DH,'$'
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA
BEG:
MOV AX,DATA
MOV DS,AX
CLI
CALL I8250
CALL I8259
CALL READ0C
CALL WRITE0C
STI
;--------发送数据--------
SCAN1:
MOV FLAG,0
MOV DX,3FDH
IN AL,DX
TEST AL,00100000B ;发送保持寄存器是否为空
JZ SCAN1
;--------提示信息--------
LEA DX, MSG
MOV AH,09H
INT 21H
SCAN2:
MOV AH,01H
INT 16H
JZ SCAN2 ;查询键盘缓冲区
CMP AL,27 ;判断是否为Esc
JZ EXIT
MOV DX,3F8H
AND AL,7FH ;屏蔽最高位,使用AND指令满足ASCII7位的要求
OUT DX,AL ;发送数据
NEXT1:
MOV DX,3FDH
IN AL,DX ;读取通信线状态寄存器
TEST AL,01000000B ;发送移位寄存器是否为空
JZ NEXT1
;-------接收数据-------
SCAN3:
CMP FLAG,1
JNZ SCAN3
MOV AH,0CH
INT 21H ;清空缓存区
JMP SCAN1
;-------中断服务子程序--------
RECEIVE PROC
PUSH AX
PUSH DX
PUSH DS
MOV AX,DATA
MOV DS,AX
MOV DX,3F8H
IN AL,DX ;读取接收缓冲区的内容
AND AL,01111111B
MOV DL,AL
MOV AH,02H
INT 21H ;显示接收到的字符
MOV DL,0AH
MOV AH,02H
INT 21H ;换行
MOV FLAG,1
MOV AL,20H
OUT 20H,AL
POP DS
POP DX
POP AX
IRET
RECEIVE ENDP
;-------初始化8250--------
I8250 PROC
MOV AL,10000000B
MOV DX,3FDH
OUT DX,AL ;设置访问除数寄存器
MOV AL,0
MOV DX,3F9
OUT DX,AL ;写除数寄存器高八位
MOV AL,60H
MOV DX,3F8H
OUT DX,AL ;写除数寄存器低八位
MOV AL,00000011B
MOV DX,3FBH
OUT DX,AL ;设置数据帧格式
MOV AL,00000001B
MOV DX,3F9H
OUT DX,AL ;设置中断允许寄存器,允许8250内部提出接收中断
MOV AL,00011111B
MOV DX,3FCH
OUT DX,AL ;设置MODEM控制寄存器,允许8250发送中断请求
RET
I8250 ENDP
;-------初始化8259-------
I8259 PROC
IN AL,21H
AND AL,11101111B
OUT 21H,AL
RET
I8259 ENDP
;-------读中断向量------
READ0C PROC
MOV AX,350CH
INT 21H
MOV WORD PTR OLD0C,BX
MOV WORD PTR OLD0C+2,ES
RET
READ0C ENDP
;-------写中断向量------
WRITE0C PROC
PUSH DS
MOV AX,CODE
MOV DS,AX
MOV DX,OFFSET RECEIVE
MOV AX,250CH
INT 21H
POP DS
RET
WRITE0C ENDP
;-----恢复中断向量------
RESET PROC
IN AL,21H
OR AL,000001000B
OUT 21H,AL
MOV AX,250BH
MOV DX,WORD PTR OLD0C
MOV DS,WORD PTR OLD0C+2
INT 21H
RET
RESET ENDP
;-------结束退出--------
EXIT PROC
CALL RESET
MOV AH,4CH
INT 21H
RET
EXIT ENDP
CODE ENDS
END BEG
到了这里,关于南邮|微机系统串行口的测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!