串行接口实验双机通信.docx

上传人:b****6 文档编号:8032364 上传时间:2023-01-28 格式:DOCX 页数:20 大小:150.34KB
下载 相关 举报
串行接口实验双机通信.docx_第1页
第1页 / 共20页
串行接口实验双机通信.docx_第2页
第2页 / 共20页
串行接口实验双机通信.docx_第3页
第3页 / 共20页
串行接口实验双机通信.docx_第4页
第4页 / 共20页
串行接口实验双机通信.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

串行接口实验双机通信.docx

《串行接口实验双机通信.docx》由会员分享,可在线阅读,更多相关《串行接口实验双机通信.docx(20页珍藏版)》请在冰豆网上搜索。

串行接口实验双机通信.docx

串行接口实验双机通信

数学与信息技术学院

《计算机应用课程设计》设计报告

 

摘要

微机与外部的信息交换称为通信,基本方式有并行与串行两种。

本文主要说明串行方式,主要掌握微机串行通信的连接方法,熟悉其工作方式及其功能,运用程序流程图说明了其工作过程

详细介绍了使用串行接口芯片8251A实现双CPU系统数据传输的设计和方法,接着从8251A的基本原理、工作方式,以及硬件和软件设计方面进行了详细的说明。

并在两台微处理器的目标机上,用串口通信模式实现了两机之间的高效通信。

关键词:

8251A;串口通信;数据传送

 

Abstract

Exchangeofinformationbetweencomputerandexternalascommunications.Basicmethodsarebothparallelandserial.Thispapershowstheserialmode,themaincontrolcomputerserialcommunicationconnectionmethod,familiarwiththeirworkandtheirfunctions,theuseofprocessflowchartillustratestheprocessoftheirwork.

Describedindetailusingtheserialinterfacechip8251AdualCPUsystemdesignandmethodofdatatransmission,thenthebasicprinciplefrom8251A,work,andhardwareandsoftwaredesignaspectsindetail.Twomicroprocessorsinthetargetmachine,achievedwithaserialcommunicationmodeefficientcommunicationbetweenthetwomachines.

Keywords:

8251A;serialcommunication;datatransfer

 

目  录

第一章系统的功能

随着计算机的不断普及,在我们的周围可能会同时出现多台微型计算机,而且这些计算机的牌号,后型号不同,而且有的格式不兼容。

于是利用单片机串行口实现不同计算机之间的相互通信,以达到信息或程序的共享是非常有用的。

另一方面,在某计算机的软磁盘驱动器万一出现故障的情况下,也可以通过它将计算机硬盘的数据或程序拷贝出来。

文件传输程序可以用来在两个计算机之间传输任何类型的文件(包括二进制文件),对于那些有不同类型的计算机特别有用。

网络的发展,局域网的建立,使得一个文件服务器以及允许其他计算机从服务器中装入文件或将它们存入文件服务器也可以通过串口来实现。

第二章系统的设计方案

2.1硬件设计

2.1.1涉及的芯片

1.8251A接口芯片用于实现微机间的通信,发送数据;

2.8279芯片用于微机间接受数据和显示数据;

2.1.28251A芯片

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

由于近距离传输,所以可以不用MODEM,而直接互连。

同时采用查询方式,故接收/发送程序中只需检查发送/接收的准备好状态是否置位,在准备好时就发送或接收一个字节。

(1)在实验过程中,数据通信的基本方式可分为并行通信与串行通行,而我们的实验正是采用了串行通行方式,这种方式通信线路简单,利用线路就可实现通信,这样实验易于实现并且降低了成本,而且适合远距离通信。

(2)实验中用到的8251A就是一个可编程的通用串行通信接口芯片,在使用时必须对它进行初始化编程。

编程的内容包括两大方面:

一是由CPU发出的控制字,即方式选择控制字和操作命令控制字;另一方面是由8251A向CPU送出的状态字。

①8251A的方式控制字和命令控制字

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

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

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

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

方式选择控制字的格式如图所示。

 

操作命令控制字的格式如下:

 

②状态寄存器

状态寄存器用于寄存8251A的状态信息,供CPU查询。

各位定义如下:

TXRDY位:

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

溢出错误:

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

帧错误:

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

状态字的格式如下:

2.1.38279芯片

8279芯片介绍:

8279是一种可编程键盘/显示接口芯片,它共有3种工作方式:

编码扫描方式、传感器扫描方式、时钟脉冲选通方式。

固只需通过编程就可用8279来实现各种键盘/显示器的接口,几乎不需附加任何电路。

本系统8279接口规定的小键盘的键名和键值对照表及数码管组显示代码表如下。

键名键值对照表:

键名0123456789A

键值000102030405060708090A

键名BCDEFEXECNEXTMOVMONLASTSTEP

键值0B0C0D0E0F101112131415

显示代码表:

显示值01234567

显示代码3FH06H5BH4FH66H6DH7DH07H

显示值89ABCDEF

显示代码7FH6FH77H7CH39H5EH79H71H

2.2软件设计

2.2.1设计简单介绍

本系统的软件设计流程图参见附录部分(图2)。

系统设计代码分为以下几个部分:

初始化8251A、发送数据、接收数据、键盘输入、数值转换、LED显示。

2.2.2模块设计详细分析

1.初始化8251A:

8251A工作在同步方式下,方式选择控制字为00H,工作命令控制字为40H.

代码如下:

KEYLED:

MOVAL,00H

OUTDX,AL

OUTDX,AL

OUTDX,AL

MOVAL,40H

OUTDX,AL

MOVAL,4EH

OUTDX,AL

MOVAL,27H

OUTDX,AL

2.键盘输入

键盘的输入由8279控制,再输入之前要现判断键盘是否允许按键,则只需读取8279的状态即可;通过数据口读取键值。

然后对输入的数据进行判断,若为数字键,只需判断其高四位,高四位为零,则为数字键;不为零则不是数字键;再判断是否为EXEC键,此时只需和10H比较,相同则为EXEC键。

KEY0:

MOVDX,CONTPORT;读8279状态

INAL,DX

TESTAL,07H;判断是否有键按下

JZKEY0

MOVCX,0FFFH

DELAY1:

LOOPDELAY1

MOVDX,DATAPORT;读取键值

INAL,DX

MOVDI,AX

ANDAL,0F0H;判断是否为数字键

JZKEY1

MOVAX,DI

CMPAL,10H;判断是否为EXEC键

JNZKEY0

CMPWORDPTRDS:

[0601H],0000H;判断按EXEC键前是否按过数字键

JZSERERR1

MOVSI,DATA3

CALLLEDDISP

3.数值转换

数值转换就是将输入的键值转换成发送代码。

转换代码实现部分:

CONVERS:

MOVBH,0H

MOVAX,DI

ANDAL,0FH

MOVBL,AL

MOVAL,CS:

[BX+DATA4]

MOVBYTEPTRDS:

[0602H],AL

RET

4.发送数据

1号机用于键盘的控制以及数据的发送。

首先判断1号机器键盘的状态,由8279控制,则只需读取8279的状态即可;再判断按键值,若为数字键,则计算次数,再将按键值转换为显示代码;若为EXEC键,再判断按此键之前是否按过数字键,若没按过,则调用显示,显示Errl,若按过再将按键值转换为显示代码。

接下来就是判断是否允许发送数据了,发送数据由8251控制,则只需读取8251的状态。

允许发送就开始发送数据。

部分代码如下:

WATTXD:

MOVDX,SECOPORT

INAL,DX;读取8251状态

TESTAL,01H;判断是否允许发送

JZWATTXD

MOVAL,BYTEPTRDS:

[0602H];显示代码送给AL

MOVDX,SEDAPORT;发送显示代码

OUTDX,AL

MOVCX,0FFFFH

DELAY2:

LOOPDELAY2

JMPKEY0

SEREND:

JMPSEREND

5.接收数据并显示

2号机用于接受1号机发送的数据并将其显示出来。

数据接收由8251控制,则先判断其状态,允许接收则转入接收程序,从数据口读取数据,然后将接收到的数据存入到RAM区暂存。

再将数据发送到控制口进行显示。

接收数据部分代码如下:

WATRXD:

MOVDX,SECOPORT;读取8251状态

INAL,DX

TESTAL,02H;判断是否允许接受

JZWATRXD

MOVDX,SEDAPORT;接受数据

INAL,DX

MOVBYTEPTRDS:

[0600H],AL;将接受的数据存入RAM区

MOVAL,90H

MOVDX,CONTPORT

OUTDX,AL

MOVAL,BYTEPTRDS:

[0600H];从RAM区取出数据?

MOVDX,DATAPORT

OUTDX,AL;显示接受的数据

MOVAL,00H

OUTDX,AL

JMPWATRXD

详见源程序清单及注释附录部分。

第三章操作说明

1、准备2台本系统,确定1号为发送,2号为接收。

2、将1号RXD插孔和2号的TXD插孔相连。

3、将1号TXD插孔和2号的RXD插孔相连。

4、将1号GND插孔和2号的GND插孔相连(共地)。

5、先运行2号机,显示器显示“8251-2”,进入等待接收状态。

6、再运行1号机,显示器显示“8251-1”,进入串行发送状态。

7、在1号机的键盘上输入数字键,在2号机显示器上显示对应数字值。

8、输入数字键后再按EXEC键,1号机显示“8251good”。

如果不输入数字键直接按EXEC键,则显示“Err”,如果双机通信不能正常进行,也显示“Err1”。

第四章总结

1.设计中遇到的问题及解决过程

当遇到处理由于两个系统上电后各自都需要初始化,事先无法预料哪能一个系统先初始化好的问题,而束手无策时,有上网查过,向同学请教过。

2.设计中产生的错误及原因分析

在这次程序设计中负责的串行接口数据传送,而在处理8251A芯片的初始化程序设计时,由于对微机接口知识的生疏,产生不少细微的错误。

这的都得归咎于我们平时打好基础。

在最终的运行实现阶段,出现一些不明原因的错误,如:

在1号机还未进行数据传送的时候,2号机的显示屏上已显示一个未知字符;无论怎样对2号机的屏幕进行清零,这个未知字符始终存在。

3.设计体会和收获

最初选择串行通信这个实验时,由于从未接触过这类设计,感到新鲜的同时不乏焦虑。

现在终于将它完成了,感到受益颇多。

第一,这是一份考验我们自觉性、动手能力与协作意识的任务。

在长达一个月的时间里,我们不断发现自身不足也不断自我完善。

第二,未知并不可怕,可怕的是因未知而止步。

我们在课堂上所学的知识是非常有限的,这次的课程设计就是个很好的体现。

很多函数的运用我们还没掌握,一些简单的循环语句都可能出错。

实践后才能真的知道我们真正掌握了多少。

第三,团结就是力量一点都不假,三个臭皮匠顶一个诸葛亮。

在团组合作时我们更便于互相取长补短,相互讨论,效果很好。

参考文献

1《C语言程序设计》清华大学出版社;谭浩强主编   1999.12

2《C语言程序设计技巧及应用》  上海科学普及出版社;陈进编著 1992.6

3《微型计算机原理与应用》(第二版)西安电子科技大学出版社;王永山,杨宏五,杨婵娟编著 1999.12

4《单片机原理及应用教程》北京大学出版社;范立南,谢子殿编著 2007.8

附:

1、硬件原理图

 

2、程序流程图

 

接收数据:

 

 

3、源程序清单及注释

Send程序段代码

CODESEGMENT

ASSUMECS:

CODE

START:

JMPSERIAL

CONTPORTEQU00DFH;8279端口地址

DATAPORTEQU00DEH;8279端口地址

SECOPORTEQU0051H;8251端口地址

SEDAPORTEQU0050H;8251端口地址

DATA0EQU0500H

DATA1EQU0508H

DATA2EQU0510H

DATA3EQU0518H

DATA4EQU0520H

SERIAL:

CALLFORMAT

MOVSI,DATA2

CALLLEDDISP;显示8251-2

MOVBYTEPTRDS:

[0601H],0H

MOVWORDPTRDS:

[0602H],0H

CLD

MOVDI,0602H;

MOVCX,08H

XORAX,AX

REPSTOSW

MOVDX,SECOPORT

MOVAL,00H;初始化8251

OUTDX,AL

OUTDX,AL

OUTDX,AL

MOVAL,40H

OUTDX,AL

MOVAL,4EH

OUTDX,AL

MOVAL,27H

OUTDX,AL

KEY0:

MOVDX,CONTPORT;读8279状态

INAL,DX

TESTAL,07H;判断是否有键按下

JZKEY0

MOVCX,0FFFH

DELAY1:

LOOPDELAY1

MOVDX,DATAPORT;读取键值

INAL,DX

MOVDI,AX

ANDAL,0F0H;判断是否为数字键

JZKEY1

MOVAX,DI

CMPAL,10H;判断是否为EXEC键

JNZKEY0

CMPWORDPTRDS:

[0601H],0000H;判断按EXEC键前是否按过数字键

JZSERERR1

MOVSI,DATA3

CALLLEDDISP

JMPSEREND

SERERR1:

MOVSI,DATA1

CALLLEDDISP;显示Err1

JMPSEREND

KEY1:

CALLCONVERS;键值转换成显示代码

WATTXD:

MOVDX,SECOPORT

INAL,DX;读取8251状态

TESTAL,01H;判断是否允许发送

JZWATTXD

MOVAL,BYTEPTRDS:

[0602H];显示代码送给AL

MOVDX,SEDAPORT;发送显示代码

OUTDX,AL

MOVCX,0FFFFH

DELAY2:

LOOPDELAY2

JMPKEY0

SEREND:

JMPSEREND

KEY2:

CALLLEDDISP

ADDBYTEPTRDS:

[0601H],01H

JMPKEY0

CONVERS:

MOVBH,0H

MOVAX,DI

ANDAL,0FH

MOVBL,AL

MOVAL,CS:

[BX+DATA4]

MOVBYTEPTRDS:

[0602H],AL

RET

LEDDISP:

MOVAL,90H

MOVDX,CONTPORT

OUTDX,AL

MOVBYTEPTRDS:

[0600H],00

LED1:

CMPBYTEPTRDS:

[0600H],07H

JALED2

MOVBL,DS:

[0600H]

MOVBH,0H

MOVAL,CS:

[BX+SI]

MOVDX,DATAPORT

OUTDX,AL

ADDBYTEPTRDS:

[0600H],01H

JNZLED1

LED2:

RET

LEDDISPD:

MOVAL,90H

MOVDX,CONTPORT

OUTDX,AL

MOVBYTEPTRDS:

[0600H],00

LEDD1:

CMPBYTEPTRDS:

[0600H],07H

JALEDD2

MOVBL,DS:

[0600H]

MOVBH,0H

MOVAL,DS:

[BX+0602H]

MOVDX,DATAPORT

OUTDX,AL

ADDBYTEPTRDS:

[0600H],01H

JNZLEDD1

LEDD2:

RET

FORMAT:

MOVBX,0

MOVWORDPTRDS:

[BX+0500H],5050H;ERR2显示代码

ADDBX,2

MOVWORDPTRDS:

[BX+0500H],0079H

ADDBX,2

MOVWORDPTRDS:

[BX+0500H],0000H

ADDBX,2

MOVWORDPTRDS:

[BX+0500H],0000H

ADDBX,2

MOVWORDPTRDS:

[BX+0500H],503FH;ERR1显示代码

ADDBX,2

MOVWORDPTRDS:

[BX+0500H],7950H

ADDBX,2

MOVWORDPTRDS:

[BX+0500H],0000H

ADDBX,2

MOVWORDPTRDS:

[BX+0500H],0000H

ADDBX,2

MOVWORDPTRDS:

[BX+0500H],405BH;8251---1显示代码

ADDBX,2

MOVWORDPTRDS:

[BX+0500H],4040H

ADDBX,2

MOVWORDPTRDS:

[BX+0500H],6D06H

ADDBX,2

MOVWORDPTRDS:

[BX+0500H],7F5BH

ADDBX,2

MOVWORDPTRDS:

[BX+0500H],5C5EH;8251good显示代码

ADDBX,2

MOVWORDPTRDS:

[BX+0500H],6F5CH

ADDBX,2

MOVWORDPTRDS:

[BX+0500H],6D06H

ADDBX,2

MOVWORDPTRDS:

[BX+0500H],7F5BH

ADDBX,2

MOVWORDPTRDS:

[BX+0500H],063FH;0-F显示代码

ADDBX,2

MOVWORDPTRDS:

[BX+0500H],4F5BH

ADDBX,2

MOVWORDPTRDS:

[BX+0500H],6D66H

ADDBX,2

MOVWORDPTRDS:

[BX+0500H],077DH

ADDBX,2

MOVWORDPTRDS:

[BX+0500H],6F7FH

ADDBX,2

MOVWORDPTRDS:

[BX+0500H],7C77H

ADDBX,2

MOVWORDPTRDS:

[BX+0500H],5E39H

ADDBX,2

MOVWORDPTRDS:

[BX+0500H],7179H

RET

CODEENDS

ENDSTART

 

Recive程序段代码

CODESEGMENT

ASSUMECS:

CODE

CONTPORTEQU00DFH;8279控制口

DATAPORTEQU00DEH;8279数据口

SECOPORTEQU0051H;8251端口地址

SEDAPORTEQU0050H;8251端口地址

ORG1800H

START:

JMPKEYLED

KEYLED:

MOVAL,00H;初始化8251

OUTDX,AL

OUTDX,AL

OUTDX,AL

MOVAL,40H

OUTDX,AL

MOVAL,4EH

OUTDX,AL

MOVAL,27H

OUTDX,AL

WATRXD:

MOVDX,SECOPORT;读取8251状态

INAL,DX

TESTAL,02H;判断是否允许接受

JZWATRXD

MOVDX,SEDAPORT;接受数据

INAL,DX

MOVBYTEPTRDS:

[0600H],AL;将接受的数据存入RAM区

MOVAL,90H

MOVDX,CONTPORT

OUTDX,AL

MOVAL,BYTEPTRDS:

[0600H];从RAM区取出数据?

MOVDX,DATAPORT

OUTDX,AL;显示接受的数据

MOVAL,00H

OUTDX,AL

JMPWATRXD

CODEENDS

ENDSTART

 

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

当前位置:首页 > 人文社科 > 视频讲堂

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1