一、实验目的和要求
- 了解微机系统串行口RS-232C的内部结构、工作原理;
- 掌握Ins 8250的初始化编程方法,学会串行通信程序的设计。
二、实验内容
- 实验内容1:完成硬件测试环境,编写程序对微机系统的串口进行查询方式自发自收外环测试。
实验内容2:在查询方式的基础上,设计查询发送,中断方式接收的串行通信自发自收方式测试。
实验原理及实验步骤
实验内容1:
- 串行通信原理:
串行端口的本质功能是作为CPU和串行设备间的编码转换器。当数据从CPU经过串行端口发送出去时,字节数据转换为串行的位。在接收数据时,串行的位被转换为字节数据。
在Windows环境(Windows NT、Win98、Windows2000)下,串口是系统资源的一部分。
应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。
- 串行通信编程源码:
.586
DATA SEGMENT USE16
BUF DB ‘B11111111XYZ’
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
CALL I8250 ; 8250初始化
MOV BX, OFFSET BUF
MOV CX, LENS
SEND:MOV DX, 3FDH
IN AL, DX
TEST AL, 20H ; 发送保存寄存器是否为空,查第5位
JZ SEND
MOV DX, 3F8H
MOV AL,[BX]
OUT DX, AL
INC BX
RECE: MOV DX, 3FDH
IN AL, DX
TEST AL, 01H ; 接收看第0位
JZ RECE ; 判断一帧数据接收完整
MOV DX, 3F8H
IN AL, DX
AND AL, 01111111B
MOV DL,AL
MOV AH,02H
INT 21H
LOOP SCAN
MOV AH,4CH
INT 21H
I8250 PROC
MOV DX, 3FBH
MOV AL, 80H
OUT DX, AL
MOV DX, 3F9H
MOV AL, 0
OUT DX, AL
MOV DX, 3F8H
MOV AL, 30H ;存放分频系数,由两部分组成,高8位送入MSB,低8位送入LSB。
OUT DX, AL
MOV DX, 3FBH
MOV AL, 0AH ;00001010,奇校验,1位,7位
OUT DX, AL
MOV DX, 3F9H
MOV AL, 0
OUT DX, AL
MOV DX, 3FCH
MOV AL, 10H ;D4=1,内环自检
OUT DX, AL
RET
I8250 ENDP
CODE ENDS
END START
程序执行结果如下:屏幕显示字符串。
实验内容2:
查询方式发送,中断方式接收的串行通信程序:
.586
DATA SEGMENT USE16
MESG DB 'B11111111'
LENS EQU $-MESG
OLD0B DD ?
DATA ENDS
CODE SEGMENT USE16
ASSUME CS:CODE,DS:DATA
BEG: MOV AX,DATA
MOV DS,AX
CLI ;关中断
CALL I8250 ;主串口初始化
CALL I8259 ;开放主8259A辅串口中断
CALL RD0B ;读中断向量
CALL WR0B ;写中断向量
STI ;开中断
MOV BX,OFFSET MESG
MOV CX,LENS
SCANT: MOV DX,2FDH
IN AL,DX
TEST AL,20H
JZ SCANT
MOV DX,2F8H
MOV AL,[BX]
OUT DX,AL
INC BX ;计数
MOV DX,0
TWAIT: DEC DX
JNZ TWAIT ;加循环延时来保证中断接收的时间
LOOP SCANT
RETURN:CALL RESET
MOV AH,4CH
INT 21H ;返回 DOS
RECEIVE PROC
PUSHA
PUSH DS
MOV AX,DATA
MOV DS,AX
MOV DX,2F8H
IN AL,DX
AND AL,7FH
MOV AH, 2
MOV DL, AL
INT 21H ;屏幕显示
JMP EXIT
EXIT: MOV AL,20H ;中断结束命令
OUT 20H,AL
POP DS ;恢复现场
POPA
IRET
RECEIVE ENDP
I8250 PROC ;主串口初始化子程序
MOV DX,2FBH
MOV AL,80H
OUT DX,AL ;寻址位置1
MOV DX,2F9H
MOV AL,0
OUT DX,AL ;除数高8位
MOV DX,2F8H
MOV AL,60H
OUT DX,AL ;除数高8位
MOV DX,2FBH
MOV AL,03H
OUT DX,AL
MOV DX,2F9H
MOV AL,01H ;允许接收中断
OUT DX,AL
MOV DX,2FCH
MOV AL,18H ;内环,8250能送出中断请求
OUT DX,AL
RET
I8250 ENDP
I8259 PROC
IN AL,21H
AND AL,11110111B
OUT 21H,AL ;置中断屏蔽寄存器
RET
I8259 ENDP
RD0B PROC ;保存原来系统的0BH 中断向量
MOV AX,350BH
INT 21H
MOV WORD PTR OLD0B,BX
MOV WORD PTR OLD0B+2,ES
RET
RD0B ENDP
WR0B PROC ;置换0BH型中断向量指向自定义中断服务程序
PUSH DS
MOV AX,CODE
MOV DS,AX
MOV DX,OFFSET RECEIVE
MOV AX,250BH
INT 21H
POP DS
RET
WR0B ENDP
RESET PROC ;恢复系统0B中断向量
IN AL,21H
OR AL,00001000B
OUT 21H,AL
MOV AX,250BH
MOV DX,WORD PTR OLD0B
MOV DS,WORD PTR OLD0B+2
INT 21H
RET
RESET ENDP
CODE ENDS
END BEG