A、B两台PC机利用辅串口进行点-点双工通信(不用联络线),A机发送、接收均采用查询方式,B机发送采用查询方式,接收采用中断方式。要求一帧字符7个数据位,2个停止位,偶校验,通信速率为2400波特(分频系数为0030H)。 ① 画出两台计算机RS232C口间的连线,并标明端子名称和端子号。 ② 用对端口直接编程的方法为A机编写8250初始化程序段。 ③ 用对端口直接编程的方法编写B机8250初始化程序段。 ④ 现通过A机发送一个字符 'E' 给B机。为A机写出使用查询方式发送的程序段。 ⑤ 针对于B机,编写子程序将其接收字符的中断服务程序SERVICE的入口地址写入中断向量表中。
时间: 2024-03-07 12:49:30 浏览: 119
两台PC机通信程序
1. 连线图如下:
```
A机 B机
┌───────────────────┐ ┌───────────────────┐
│ │ │ │
│ 9针 D型 │ │ 9针 D型 │
│ │ │ │
│ 2 ────────────────┼──┼──────────────── 2 │
│ │ │ │
│ 3 ────────────────┼──┼──────────────── 3 │
│ │ │ │
│ 4 ────────────────┼──┼──────────────── 4 │
│ │ │ │
│ 5 ────────────────┼──┼──────────────── 5 │
│ │ │ │
│ 6 ────────────────┼──┼──────────────── 6 │
│ │ │ │
│ 7 ────────────────┼──┼──────────────── 7 │
│ │ │ │
│ 8 ────────────────┼──┼──────────────── 8 │
│ │ │ │
└───────────────────┘ └───────────────────┘
```
其中,A机和B机的串口分别连接到对方的串口,并且要保证连接的两个端子号相同。
2. A机8250初始化程序段:
```
MOV DX, 3F8H ;设置串口端口号
MOV AL, 0 ;禁止UART中断
OUT DX, AL ;写入IER寄存器
MOV AL, 80H ;设置DLAB位
OUT DX, AL ;写入LCR寄存器
MOV AL, 30H ;设置波特率分频系数低字节
OUT DX, AL ;写入DLL寄存器
MOV AL, 00H ;设置波特率分频系数高字节
OUT DX, AL ;写入DLM寄存器
MOV AL, 03H ;设置数据位为7位,无校验位,2个停止位
OUT DX, AL ;写入LCR寄存器
RET ;返回
```
3. B机8250初始化程序段:
```
MOV DX, 2F8H ;设置串口端口号
MOV AL, 0 ;禁止UART中断
OUT DX, AL ;写入IER寄存器
MOV AL, 80H ;设置DLAB位
OUT DX, AL ;写入LCR寄存器
MOV AL, 30H ;设置波特率分频系数低字节
OUT DX, AL ;写入DLL寄存器
MOV AL, 00H ;设置波特率分频系数高字节
OUT DX, AL ;写入DLM寄存器
MOV AL, 03H ;设置数据位为7位,无校验位,2个停止位
OUT DX, AL ;写入LCR寄存器
MOV AL, 01H ;使能UART中断
OUT DX, AL ;写入IER寄存器
MOV AX, SEG SERVICE ;将SERVICE的段地址保存到AX中
MOV DS, AX ;将DS指向SERVICE所在的段
MOV AX, OFFSET SERVICE ;将SERVICE的偏移地址保存到AX中
MOV WORD PTR DS:[0], AX ;将AX中的值写入中断向量表
MOV WORD PTR DS:[2], CS ;将CS的值写入中断向量表
RET ;返回
```
4. A机的查询方式发送程序段:
```
MOV DX, 3F8H ;设置串口端口号
MOV AL, 'E' ;将要发送的字符'E'保存到AL中
WAIT_SEND:
IN AL, DX ;查询LSR寄存器
AND AL, 20H ;检查THRE位
JZ WAIT_SEND ;如果THRE位为0,则等待
OUT DX, AL ;将AL中的字符发送出去
RET ;返回
```
5. B机的中断服务程序为SERVICE,其入口地址为偏移地址为OFFSET和段地址为SEGMENT。将其写入中断向量表的子程序如下:
```
MOV AX, SEG SERVICE ;将SERVICE的段地址保存到AX中
MOV DS, AX ;将DS指向SERVICE所在的段
MOV AX, OFFSET SERVICE ;将SERVICE的偏移地址保存到AX中
MOV WORD PTR DS:[8], AX ;将AX中的值写入中断向量表
MOV WORD PTR DS:[10], CS ;将CS的值写入中断向量表
MOV AH, 0 ;将AH清零
INT 21H ;调用DOS功能
```
其中,8和10是1号串口的中断向量表地址,DS指向SERVICE所在的段,使用MOV指令将AX中的值写入中断向量表。最后,调用DOS功能,将写入中断向量表的结果保存到AH寄存器中。
注意:以上代码仅为示例,实际应用中要根据硬件和操作系统的要求进行相应的修改。
阅读全文