北理工微机原理实验三使用8251A的串行接口应用实验.docx

上传人:b****6 文档编号:7907747 上传时间:2023-05-12 格式:DOCX 页数:12 大小:661.49KB
下载 相关 举报
北理工微机原理实验三使用8251A的串行接口应用实验.docx_第1页
第1页 / 共12页
北理工微机原理实验三使用8251A的串行接口应用实验.docx_第2页
第2页 / 共12页
北理工微机原理实验三使用8251A的串行接口应用实验.docx_第3页
第3页 / 共12页
北理工微机原理实验三使用8251A的串行接口应用实验.docx_第4页
第4页 / 共12页
北理工微机原理实验三使用8251A的串行接口应用实验.docx_第5页
第5页 / 共12页
北理工微机原理实验三使用8251A的串行接口应用实验.docx_第6页
第6页 / 共12页
北理工微机原理实验三使用8251A的串行接口应用实验.docx_第7页
第7页 / 共12页
北理工微机原理实验三使用8251A的串行接口应用实验.docx_第8页
第8页 / 共12页
北理工微机原理实验三使用8251A的串行接口应用实验.docx_第9页
第9页 / 共12页
北理工微机原理实验三使用8251A的串行接口应用实验.docx_第10页
第10页 / 共12页
北理工微机原理实验三使用8251A的串行接口应用实验.docx_第11页
第11页 / 共12页
北理工微机原理实验三使用8251A的串行接口应用实验.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

北理工微机原理实验三使用8251A的串行接口应用实验.docx

《北理工微机原理实验三使用8251A的串行接口应用实验.docx》由会员分享,可在线阅读,更多相关《北理工微机原理实验三使用8251A的串行接口应用实验.docx(12页珍藏版)》请在冰点文库上搜索。

北理工微机原理实验三使用8251A的串行接口应用实验.docx

北理工微机原理实验三使用8251A的串行接口应用实验

本科实验报告

实验名称:

实验三使用8251A的串行接口应用实验

课程名称:

电脑原理与应用实验

实验时间:

任课教师:

实验地点:

实验教师:

实验类型:

□原理验证

■综合设计

□自主创新

学生:

学号/班级:

组号:

学院:

同组搭档:

专业:

成绩:

 

1.实验目的

1)掌握串行通信原理及半双工和全双工的编程方法;

2)掌握用8251A接口芯片实现微机间的同步和异步通信;

3)掌握8251A芯片与微机的接口技术和编程方法。

2.实验原理和内容

8251A是一种可编程的同步/异步串行通信接口芯片,具有独立的接收器和发送器,能实现单工、半双工、双工通信。

1)8251A内部结构

8251A通过引脚D0~D7和系统数据总线直接接口,用于和CPU传递命令、数据、状态信息。

读写控制逻辑用来接收CPU的控制信号、控制数据传送方向。

CPU对8251A的读写操作控制表如表3-4所示。

表3-4CPU对8251A的读写操作控制表

2)8251A的方式控制字和命令控制字

方式控制字确定8251A的通信方式〔同步/异步〕、校验方式〔奇校/偶校/不校〕、字符长度及波特率等,格式如图3-10所示。

命令控制字使8251A处于规定的状态以准备收发数据,格式如图3-11所示。

方式控制字和命令控制字无独立的端口地址,8251A根据写入的次序来区分。

CPU对8251A初始化时先写方式控制字,后写命令控制字。

3)状态寄存器

8251状态寄存器用于寄存8251A的状态信息,供CPU查询,定义如图3-12所示。

TXRDY位:

当数据缓冲器空时置位,而TXRDY引脚只有当条件(数据缓冲器空•/CTS•TXE)成立时才置位。

溢出错误:

CPU没读走前一个字符,下一个字符又接收到,称为溢出错误。

帧错误:

在字符结尾没检测到停止位,称为帧错误。

4)PC机寄存器的端口地址

其中:

线路控制寄存器第七位:

DLAB=0;线路控制寄存器第七位:

DLAB=1。

5)波特率和除数因子对照表

实验硬件连接方法:

通过电脑点到点三线制串口通信线,掌握接线的方法以及RS-232标准的机械、电气标准。

3.实验连接方法

按图连接好电路,其中8254计数器用于产生8251的发送和接收时钟,TXD和RXD连在一起。

1)8254/CLK0连接时钟/1MHz;

2)8254/CS连接I/O译码/Y0(280H---287H);

3)8254/OUT0连接8251/TX/RXCLK;

4)8254/GATE0连接+5V;

5)8251/TXD连接8251/RXD;

6)8251/CS连接I/O译码/Y7(2B8H---2BFH。

4.编程提示

8251的控制口地址为2B9H,数据口地址为2B8H。

8254计数器的计数初值=时钟频率/(波特率X波特率因子),这里的时钟频率接1MHz,波特率假设选1200,波特率因子16,则计数器初值52。

1MHz=1000000Hz

基于8251芯片实现异步串行通信一般有两种方式,一种是查询方式,另一种是中断方式,使用哪种方式取决于进行初始化时寄存器的设置。

8254计数器的计数初值=时钟频率/(波特率×波特率因子),这里的时钟频率接1MHz,波特率假设选1200,波特率因子假设选16,则计数器初值为52。

本实验采用8251A异步方式发送,利用8086汇编语言实验电脑点到点的串口通信,设置:

波特率为1200bps、数据位7位、停止位1位、偶校验方式,利用查询方式或中断方式实现双机通信,能够传输多个字符。

程序具体设计如下:

1)基础型实验:

从键盘输入一个文件或打开已有的文件发送出去,再接收回来在屏幕上显示,实现自发自收。

2)提高型实验:

设计发送方和接收方两个程序,要求将某汇编语言传送到接收方,接收方收到后将源程序写入指定磁盘或屏幕显示。

5.实验代码

发送端代码:

STACKSEGMENTPARASTACK

DB256DUP(0)

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,SS:

STACK

START:

MOVDX,3FBH线路控制寄存器

MOVAX,80H10000000B,DLAB=1,数据位,停止位,校验位,波特率因子

OUTDX,AL

MOVDX,3F8H波特率寄存器(低)

MOVAX,60H查表

OUTDX,AL

MOVDX,3F9H波特率寄存器(高)

MOVAX,0查表

OUTDX,AL

MOVDX,3FBH线路控制寄存器

MOVAX,0AH00001010B,DLAB=0

OUTDX,AL

MOVDX,3FCH;调制解调器控制寄存器

MOVAX,03H00000011B,OUT1,2均输出1,请求发送,数据已就绪

OUTDX,AL

MOVDX,3F9H中断允许寄存器

MOVAX,0各种中断全部禁止

OUTDX,AL

FOREVER:

用死循环不断检测8251状态

MOVDX,3FDH;从线路状态寄存器读状态

INAL,DX

TESTAL,1EH死记

JNZERROR;传输线状态寄存器全部都是0

TESTAL,01H00000001B,检测接收缓存寄存器是否有数据

JNZRECEIVE可以收了

TESTAL,20H00100000B,检测发送保持寄存器是否为空

JNZSEND可以发了

JMPFOREVER

SEND:

MOVAH,1

INT16H

JZFOREVER可以发但是未接收到键盘字符

收到了

MOVAH,0

INT16H输入读入AL

MOVDX,3F8H扔进(对于发送端是)发送保持寄存器,发出

OUTDX,AL

CMPAL,03H

JEDONE

MOVDL,AL

MOVAH,02H

INT21H显示发送的字符

CMPAL,0DH00001101B

JNZFOREVER

MOVDL,0AH

MOVAH,02H

INT21H

JMPFOREVER

 

RECEIVE:

MOVDX,3F8H

INAL,DX

ANDAL,7FH

CMPAL,03H;

JZDONE

MOVDL,AL

MOVAH,02H

INT21H

CMPAL,0DH

JNZFOREVER

MOVDL,0AH

MOVAH,02H

INT21H

JMPFOREVER

ERROR:

MOVDX,3F8H

INAL,DX

MOVDL,0AH

MOVAH,02H

INT21H

JMPFOREVER

DONE:

MOVAH,4CH

INT21H

CODEENDS

ENDSTAR

 

接收端代码:

DATASEGMENT

IO8254AEQU280H

IO8251AEQU2B8H

IO8251BEQU2B9H

DATAENDS

STACKSEGMENTPARASTACK

DB256DUP(0)

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

MOVDX,IO8254A+3

MOVAL,00010110B;设置8254计数器0工作方式

OUTDX,AL

MOVDX,IO8254A

MOVAL,52;给8254计数器0送初值

OUTDX,AL

MOVDX,IO8251B;对8251进行初始化

MOVAX,0

MOVCX,3

reset8251:

OUTDX,AL

PUSHCX

MOVCX,40H;向8251控制端口送40H,使其复位

LOOP$

POPCX

LOOPreset8251

MOVAL,40H

OUTDX,AL

MOVCX,40H

LOOP$

MOVAL,5AH

OUTDX,AL

MOVAL,27H

OUTDX,AL

FOREVER:

MOVDX,IO8251B;从线路状态寄存器读状态

INAL,DX

TESTAL,38H;检测是否为00111000

JNZERROR;传输线状态寄存器全部都是0

TESTAL,02H;检测接受数据是否准备好了

JNZRECEIVE;等于0则表示数据没有准备好

TESTAL,01H;数据没有准备好

JNZsend;没有,则跳转等待

JMPFOREVER

send:

MOVAH,1;检测键盘按下

INT16H

JZFOREVER;有键盘按下

MOVAH,0;读键盘

INT16H

MOVDX,IO8251A;将键盘的数据输出发送到缓冲器

OUTDX,AL

CMPAL,03H

JZDONE

MOVDL,AL

MOVAH,02H

INT21H

CMPAL,0DH

JNZFOREVER

MOVDL,0AH

MOVAH,02H

INT21H

JMPFOREVER

RECEIVE:

MOVDX,IO8251A;接收数据

INAL,DX

ANDAL,7FH;最高位为停止位

CMPAL,03H;

JZDONE

MOVDL,AL

MOVAH,02H

INT21H

CMPAL,0DH

JNZFOREVER

MOVDL,0AH

MOVAH,02H

INT21H

JMPFOREVER

CMPAL,0DH

JNZFOREVER

ERROR:

MOVDX,IO8251A

INAL,DX

MOVDL,'?

'

MOVAH,02H

INT21H

JMPFOREVER

DONE:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2