当前位置:文档之家› 实验三 串行通信

实验三 串行通信

本科实验报告实验名称:串行通信
一、实验目的
1.了解串行通信的基本原理。

2.掌握串行接口芯片8251的工作原理和编程方法。

3.掌握串行接口芯片8250的工作原理和编程方法。

4.掌握对串行接口芯片的初始化编程;学会串行半双工和全双工的编程技巧。

二、实验内容及步骤
1. 利用PC机系统的串行通信接口实现与实验系统的双机通信,PC机的串行通信接口的
端口地址为3F8H,并画出三线连接,七线连接通信接口的连线图,接口为标准RS—232(25芯)插座。

2. 按图1连接好电路,其中8254计数器用于产生8251的发送和接收时钟,TXD和RXD
连在九针接口处。

串行通讯电路
3.连线:
CLK0/8254 接1M时钟
CLK/8251 接1M时钟(系统已经连接,不用学生连接)
GATE0/8254 接+5V
OUT0 /8254 接TX/RXCLK/8251
CS/8254 接Y0/IO地址
CS/8251 接Y7/IO地址
RXD/8251 接TXD/九针接口
TXD/8251 接RXD/九针接口
4. 8254计数器的计数初值=时钟频率/(波特率X波特率因子),这里的时钟频率接1MHz,波特率若选1200,波特因子若选16,则计数器初值为52。

5. 设串行通信的波特率为1200、偶校验、数据位为7位、1位停止位,利用查询方式实现单工通信。

要求发送方将任一文件传送到收方,收方收到后将源程序写入磁盘。

分别编写收方和发方的通信程序。

6. 上述参数不变,用中断方式实现半双工通信,编写程序。

7. PC机寄存器的端口地址如下表所示:
线路控制寄存器第七位DLAB=0
线路控制寄存器第七位DLAB=1
三、编程提示
1、可以首先采用查询方式,实现单工PC机系统与实验系统的双机通信,之后再实现双工
方式通信;
2、再尝试实现利用中断方式,实现单工PC机系统与实验系统的双机通信,之后再实现双
工方式通信;
3、要求能实现字符和文件的传输;
4、程序流程图如图所示:
四、实验程序
1. 发送端程序:
;TRANSLATE FILES
stack segment para stack'stack'
db 256 dup(0)
stack ends
data s egment
name0 db 64h
db 64h dup(?)
buff d w 64h dup(?)
data ends
code segment para public 'code'
start p roc far
assume cs: code,ds:data,es:data
push ds
mov ax,0
push ax
mov ax,data
mov ds,ax
mov dx,3fbh ;3fb ctrl register
mov al,80h ;
out dx,al ;给线路控制寄存器DLAB位置1
mov dx,3f8h
mov al,60h ;写除数因子低位
out dx,al
inc dx ;写除数因子高位
mov al,00
out dx,al ;写除数因子寄存器,1200baud
mov dx,3fbh
mov al,00011011b ;0寻址识别位,0禁止间断,**,11偶校验,1位停止位,8位数据
out dx,al
inc dx ;设置调制解调器控制寄存器MCR
mov al,00001111b ;正常工作状态,引脚低电平
out dx,al
mov dx,3fdh ;线路状态寄存器
in al,dx
test al,20h ;判断是否显示好,发出数据jz fa
tr:
mov ah,01h
int 21h
mov dx,3f8h
out dx,al
push bx
int 10h
pop bx
push cx
mov cx,0fh
gg:
nop
nop
nop
loop gg ;循环延迟
pop cx
jmp tr
start e ndp
code ends
end start
2. 接收端程序:
;TRANSLATE FILES
stack segment para stack'stack'
db 256 dup(0)
stack ends
data s egment
name0 db 64h
db 64h dup(?)
buff d w 64h dup(?)
data e nds
code segment para public 'code'
start p roc far
assume cs: code,ds:data,es:data
push ds
mov ax,0
push ax
mov ax,data
mov ds,ax
mov dx,3fbh ;3fb ctrl register
mov al,80h
out dx,al ;给线路控制寄存器DLAB位置1
mov dx,3f8h
mov al,60h ;写除数因子低位
out dx,al
inc dx ;写除数因子高位
mov al,00
out dx,al ;写除数因子寄存器,1200baud
mov dx,3fbh
mov al,00011011b ;0寻址识别位,0禁止间断,**,11偶校验,1位停止位,8位数据
out dx,al
inc dx ;设置调制解调器控制寄存器MCR
mov al,00001111b ;正常工作状态,引脚低电平
out dx,al
shoufa:
mov dx,3fdh ;读高位寄存器,判断是否接收好
in al,dx
test al,01h
jz shoufa
recv:
mov dx,3f8h ;读数据
in al,dx
push bx
m ov bx,0
mov ah,14 ;显示
int 10h
pop bx
mov cx,0fh
gg:
nop
nop
nop
loop gg ;循环延迟
pop cx
jmp shoufa
start endp
code ends
end start
五、实验结果
将两台电脑通过九针接口相连,一端运行收端代码一端运行发端代码,发端发送的字符全都及时正确的在收端显示。

六、实验感想
本次实验最大的难度是对于8254的初始化编程以及控制字各位的含义理解不到位,导致一开始无从下手。

编程过程中遇到了许多问题,但是在参考了书本上的例题后基本上得到了解决。

程序最后运行的结果相对令人满意。

本来想做出一个双工的通信系统,但是由于知识的欠缺,没能够完成。

相关主题