A、B两台PC机利用辅串口进行点-点双工通信(不用联络线),A机发送、接收均采用查询方式,B机发送采用查询方式,接收采用中断方式。要求一帧字符7个数据位,2个停止位,偶校验,通信速率为2400波特(分频系数为0030H)。 ① 画出两台计算机RS232C口间的连线,并标明端子名称和端子号。 ② 用对端口直接编程的方法为A机编写8250初始化程序段。 ③ 用对端口直接编程的方法编写B机8250初始化程序段。 ④ 现通过A机发送一个字符 'E' 给B机。为A机写出使用查询方式发送的程序段。 ⑤ 针对于B机,编写子程序将其接收字符的中断服务程序SERVICE的入口地址写入中断向量表中。
时间: 2023-11-27 10:51:18 浏览: 210
①连线图如下:
A机 B机
TxD----------------------RxD
RxD----------------------TxD
GND----------------------GND
其中,A机的串口端口名称和端子号为COM1,B机的串口端口名称和端子号为COM2。
② A机8250初始化程序段如下:
```
MOV AL, 00H ; 复位芯片
OUT 3F8H, AL ; 发送初始化命令
MOV AL, 80H ; 设置波特率发生器
OUT 3F8H, AL ; 发送波特率高字节
MOV AL, 30H ; 设置波特率发生器
OUT 3F9H, AL ; 发送波特率低字节
MOV AL, 03H ; 设置帧格式:7个数据位,2个停止位,偶校验
OUT 3F8H, AL ; 发送帧格式命令
RET ; 初始化结束返回
```
③ B机8250初始化程序段如下:
```
MOV AL, 00H ; 复位芯片
OUT 2F8H, AL ; 发送初始化命令
MOV AL, 80H ; 设置波特率发生器
OUT 2F8H, AL ; 发送波特率高字节
MOV AL, 30H ; 设置波特率发生器
OUT 2F9H, AL ; 发送波特率低字节
MOV AL, 03H ; 设置帧格式:7个数据位,2个停止位,偶校验
OUT 2F8H, AL ; 发送帧格式命令
MOV AL, 01H ; 开启接收中断
OUT 2F9H, AL ; 发送中断控制命令
RET ; 初始化结束返回
```
④ A机使用查询方式发送字符 'E' 的程序段如下:
```
CALL INIT_A ; 初始化A机串口
MOV DX, 3F8H ; 设置串口端口地址
MOV AL, 'E' ; 准备发送的字符
WAIT_SEND:
IN AL, DX+5 ; 查询发送缓冲区状态
AND AL, 20H ; 判断发送缓冲区是否为空
JZ WAIT_SEND ; 如果不为空则等待
OUT DX, AL ; 发送字符
RET ; 发送结束返回
```
其中,INIT_A 为A机的串口初始化程序入口地址。
⑤ B机接收中断服务程序SERVICE的入口地址写入中断向量表中的程序段如下:
```
MOV AX, SEG SERVICE ; 获取SERVICE子程序所在的段地址
MOV DS, AX ; 将段地址保存到DS寄存器中
MOV AX, OFFSET SERVICE ; 获取SERVICE子程序的偏移地址
MOV WORD PTR [09*04], AX ; 将偏移地址写入中断向量表中
MOV WORD PTR [09*04+2], DS ; 将段地址写入中断向量表中
MOV AL, 0B8H ; 开启串口接收中断
OUT 21H, AL ; 发送中断控制命令给主芯片
MOV AL, 00000100B ; 开启串口接收中断
OUT 2F8H+1, AL ; 发送中断控制命令给8259A从芯片
IRET ; 返回
```
其中,SERVICE 是B机的串口接收中断服务程序的入口地址。
阅读全文