实验三 串行通信

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本科实验报告实验名称:串行通信

一、实验目的

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

相关文档
最新文档