北京理工大学微机原理实验报告三
发布时间:2024-08-25
发布时间:2024-08-25
本科实验报告
实验名称: 串行通信
实验三 串行通信
一、 实验目的
1、了解串行通信的基本原理。
2、掌握串行接口芯片8251的工作原理和编程方法。 3、掌握串行接口芯片8250的工作原理和编程方法。
4、掌握对串行接口芯片的初始化编程;学会串行通信半双工和全双工的编程技巧。
二、 实验内容与步骤
1、利用PC机系统的串行通信接口实现与实验系统的双机通信。PC机的串行通信接口的端口地址为3F8H。并画出三线连接。七线连接通信接口的连线图。接口为标准RS—232(25芯)插座。
2、按图1连接好电路,其中8254计数器用于产生8251的发生和接收时钟,TXD和RXD连在九针接口处。
3、接线:
4、8254计数器的计数初值=时钟频率/(波特率乘以波特率因子),这里的时钟频率接1MHz。波特率若选1200,波特率因子若选16,则计数器初值为52.
5、设串行通信的波特率为1200,偶校验、数据位为7位,1位停止位。利用查询方式实现单工通信。要求发送方将任一文件传送到收方,收方收到后将源程序写入磁盘。分别编写收方和发方的通信程序。
6、上述参数不变,用中断方式实现半双工通信,编写程序。 7、PC机寄存器的端口地址如下表所示
线路控制寄存器第七位 DLAB=0 线路控制寄存器第七位 DLAB=1
程序流程图如下图
三、 实验过程
将实验板的USB接口与电脑1相连,打开HQFC软件,找到USB接口,进行编程,用于接收文件。代码见四中的代码1。
再将实验板的PCI接口与电脑2相连,打开MASM软件,进行编程,用于发送文件。代码见四中的代码2。
四、实验代码及注释
代码1 : DATA SEGMENT
IO8254A EQU 280H IO8251A EQU 2B8H IO8251B EQU 2B9H
DATA ENDS
STACK SEGMENT PARA STACK
DB 256 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK START:
MOV AX,DATA MOV DS,AX MOV DX,IO8254A+3 MOV AL,00010110B OUT DX,AL MOV DX,IO8254A MOV AL,52
;给8254计数器0送初值 ;设置8254计数器0工作方式
OUT DX,AL
MOV DX,IO8251B MOV AX,0
MOV CX,3
reset8251: OUT DX,AL PUSH CX
MOV CX,40H LOOP $ POP CX LOOP reset8251 MOV AL,40H OUT DX,AL MOV CX,40H LOOP $ MOV AL,5AH OUT DX,AL MOV AL,27H
OUT DX,AL
FOREVER: MOV DX,IO8251B IN AL,DX
TEST AL,38H JNZ ERROR TEST AL,02H JNZ RECEIVE TEST AL,01H
JNZ send ;对8251进行初始化 ;向8251控制端口送40H,使其复位 ;从线路状态寄存器读状态 ;检测是否为00111000 ;传输线状态寄存器全部都是0 ;检测接受数据是否准备好了 ;等于0则表示数据没有准备好 ;数据没有准备好 ;没有,则跳转等待
JMP FOREVER
send: MOV AH,1 ;检测键盘按下 INT 16H
JZ FOREVER ;有键盘按下 MOV AH,0 ;读键盘 INT 16H
MOV DX,IO8251A OUT DX,AL CMP AL,03H JZ DONE MOV DL,AL MOV AH,02H INT 21H CMP AL,0DH JNZ FOREVER MOV DL,0AH MOV AH,02H INT 21H
JMP FOREVER
RECEIVE: MOV DX,IO8251A IN AL,DX
AND AL,7FH CMP AL,03H; JZ DONE MOV DL,AL MOV AH,02H INT 21H CMP AL,0DH JNZ FOREVER
MOV DL,0AH MOV AH,02H INT 21H
JMP FOREVER
;将键盘的数据输出发送到缓冲器 ;接收数据 ;最高位为停止位
CMP AL,0DH JNZ FOREVER
ERROR:
MOV DX,IO8251A IN AL,DX MOV DL,'?' MOV AH,02H INT 21H JMP FOREVER
DONE:
MOV AH,4CH INT 21H
CODE ENDS END START 代码2:
STACK SEGMENT PARA STACK
DB 256 DUP(0)
STACK ENDS CODE SEGMENT
ASSUME CS:CODE,SS:STACK
START:
MOV DX,3FBH MOV AX,80H OUT DX,AL MOV DX,3F8H MOV AX,60H OUT DX,AL MOV DX,3F9H MOV AX,0 OUT DX,AL MOV DX,3FBH MOV AX,0AH OUT DX,AL MOV DX,3FCH;
MOV AX,03H OUT DX,AL MOV DX,3F9H MOV AX,0 OUT DX,AL
FOREVER: MOV DX,3FDH IN AL,DX TEST AL,1EH
JNZ ERROR TEST AL,01H JNZ RECEIVE TEST AL,20H JNZ send
JMP FOREVER
send:
MOV AH,1 INT 16H JZ FOREVER MOV AH,0 INT 16H MOV DX,3F8H OUT DX,AL CMP AL,03H JZ DONE MOV DL,AL MOV AH,02H INT 21H CMP AL,0DH JNZ FOREVER MOV DL,0AH MOV AH,02H
INT 21H
;从线路状态寄存器读状态 ;传输线状态寄存器全部都是0 ;检测接受数据是否准备好了 ;等于0则表示数据没有准备好;数据没有准备好 ;没有,则跳转等待
JMP FOREVER
RECEIVE:
MOV DX,3F8H IN AL,DX AND AL,7FH CMP AL,03H; JZ DONE MOV DL,AL MOV AH,02H INT 21H CMP AL,0DH JNZ FOREVER MOV DL,0AH MOV AH,02H INT 21H JMP FOREVER
ERROR:
MOV DX,3F8H IN AL,DX MOV DL,0AH MOV AH,02H INT 21H JMP FOREVER
DONE:
CODE ENDS END STAR
MOV AH,4CH INT 21H
五、实验心得
这次实验难度较大,最后实现了两台电脑之间的文件传输。通过这次实验,我了解了串行通信的基本原理,掌握了串行接口芯片8251的工作原理和编程方法,学会了串行通信半双工和全双工的编程技巧。