实验三 串行通信
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本科实验报告
实验名称: 串行通信
课程名称: 计算机原理与应用实验时间: 2014/5/27 任课教师: 马永锋实验地点: 10-102
实验教师: 苏京霞
实验类型: ■原理验证□综合设计□自主创新
学生姓名: 姚晨
学号/班级: 1120110334/05111103 组号:
学院: 信息与电子学院同组搭档:
专业: 信息工程成绩:
一、实验目的
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
、
发
送
端
程
序
:
;
T
R
A
N
S LATE 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(?)