A、B两台PC机利用辅串口进行点-点双工通信(不用联络线),A机发送、接收均采用查询方式,B机发送采用查询方式,接收采用中断方式。要求一帧字符7个数据位,2个停止位,偶校验,通信速率为2400波特(分频系数为0030H)。 ① 画出两台计算机RS232C口间的连线,并标明端子名称和端子号。 ② 用对端口直接编程的方法为A机编写8250初始化程序段。 ③ 用对端口直接编程的方法编写B机8250初始化程序段。 ④ 现通过A机发送一个字符 'E' 给B机。为A机写出使用查询方式发送的程序段。 ⑤ 针对于B机,编写子程序将其接收字符的中断服务程序SERVICE的入口地址写入中断向量表中。
时间: 2024-02-18 18:01:49 浏览: 85
① 两台计算机RS232C口间的连线如下图所示:
```
A机 B机
2(TxD) -------> 3(RxD)
3(RxD) -------> 2(TxD)
7(SG) -------> 7(SG)
```
其中,端子名称和端子号分别为:
- TxD:发送数据,端子号2
- RxD:接收数据,端子号3
- SG:系统地,端子号7
② A机8250初始化程序段:
```assembly
; 8250初始化程序
; A机
; 定义串口端口号
PORT EQU 03F8H
INIT PROC
; 1. 设置波特率为2400,分频系数为0030H
MOV AL, 00110000B
OUT PORT+3, AL ; LCR寄存器
MOV AL, 30H
OUT PORT+0, AL ; DLL
MOV AL, 00H
OUT PORT+1, AL ; DLM
; 2. 设置数据格式为7个数据位、偶校验、2个停止位
MOV AL, 00001011B
OUT PORT+3, AL ; LCR寄存器
; 3. 禁用FIFO缓冲区
MOV AL, 00000000B
OUT PORT+2, AL ; FCR寄存器
RET
INIT ENDP
```
③ B机8250初始化程序段:
```assembly
; 8250初始化程序
; B机
; 定义串口端口号
PORT EQU 02F8H
INIT PROC
; 1. 设置波特率为2400,分频系数为0030H
MOV AL, 00110000B
OUT PORT+3, AL ; LCR寄存器
MOV AL, 30H
OUT PORT+0, AL ; DLL
MOV AL, 00H
OUT PORT+1, AL ; DLM
; 2. 设置数据格式为7个数据位、偶校验、2个停止位
MOV AL, 00001011B
OUT PORT+3, AL ; LCR寄存器
; 3. 禁用FIFO缓冲区
MOV AL, 00000000B
OUT PORT+2, AL ; FCR寄存器
; 4. 设置中断使能
MOV AL, 00000011B
OUT PORT+1, AL ; IER寄存器
; 5. 设置中断服务程序入口地址
MOV AX, OFFSET SERVICE
MOV DS, AX
MOV WORD PTR [IVT+0*4], OFFSET SERVICE
MOV BYTE PTR [IVT+0*4+2], DS
RET
INIT ENDP
```
其中,IVT为中断向量表的地址。
④ A机使用查询方式发送字符的程序段:
```assembly
; 发送'E'给B机
; A机
; 定义串口端口号
PORT EQU 03F8H
SEND PROC
; 等待发送缓冲区为空
MOV DX, PORT+5
IN AL, DX
AND AL, 20H
JZ SEND
; 发送字符'E'
MOV AL, 'E'
OUT PORT+0, AL ; THR寄存器
RET
SEND ENDP
```
其中,THR为发送保持寄存器。
⑤ B机中断服务程序入口地址写入中断向量表的程序段:
```assembly
; 将中断服务程序入口地址写入中断向量表
; B机
; 定义中断向量表地址
IVT EQU 0000H
; 定义串口端口号
PORT EQU 02F8H
INIT PROC
; 设置中断服务程序入口地址
MOV AX, OFFSET SERVICE
MOV DS, AX
MOV WORD PTR [IVT+4*4], OFFSET SERVICE
MOV BYTE PTR [IVT+4*4+2], DS
; 启用接收中断
MOV AL, 00000011B
OUT PORT+1, AL ; IER寄存器
RET
INIT ENDP
```
其中,IER为中断使能寄存器。