接口技术课程设计双机串行通讯.docx
- 文档编号:29757995
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:17
- 大小:127.36KB
接口技术课程设计双机串行通讯.docx
《接口技术课程设计双机串行通讯.docx》由会员分享,可在线阅读,更多相关《接口技术课程设计双机串行通讯.docx(17页珍藏版)》请在冰豆网上搜索。
接口技术课程设计双机串行通讯
一、设计题目
双机通过两台试验箱串行通讯
二、设计目的
1、掌握8088/86实验串行口通信的方法。
2、了解实现串行通讯的硬环境、数据格式的协议、数据交换的协议。
3、学习串行口通讯程序编写方法。
三、设计原理及方案
1、8251A的基本性能
8251A是可编程的串行通信接口芯片,基本性能有:
(1).两种工作方式:
同步方式,异步方式。
同步方式下,波特率为064K,异步方式下,波特率为0~19.2K。
(2).同步方式下的格式
每个字符可以用5、6、7或8位来表示,并且内部能自动检测同步字符,从而实现同步。
除此之外,8251A也允许同步方式下增加奇/偶校验位进行校验。
(3).异步方式下的格式
每个字符也可以用5、6、7或8位来表示,时钟频率为传输波特率的1、16或64倍,用1位作为奇/偶校验。
1个启动位。
并能根据编程为每个数据增加1个、1.5个或2个停止位。
可以检查假启动位,自动检测和处理终止字符。
(4).全双工的工作方式
(5).提供出错检测
2、8251A的内部结构
发送器由发送缓冲器和发送控制电路两部分组成。
接收器由接收缓冲器和接收控制电路两部分组成。
数据总线缓冲器,读/写控制电路,调制解调控制电路。
8251A内部结构图
3、8251外部引脚图
8251的外部引脚下图所示,共28个引脚,每个引脚信号的输入输出方式如图中的箭头方向所示。
8251外部引脚图
4、8251A的编程
编程的内容包括两大方面:
一是由CPU发出的控制字,即方式选择控制字和操作命令控制字;
二是由8251A向CPU送出的状态字。
(1)、方式选择控制字(模式字)
方式选择控制字的格式如图所示。
(2)、操作命令控制字(控制字)
操作命令控制字的格式如下:
(3)、状态字
状态字的格式如下:
5、8251A的初始化
8251的初始化和操作流程下图所示。
8251初始化流程图
a)芯片复位以后,第一次用奇地址端口写入的值作为模式字进入模式寄存器。
b)如果模式字中规定了8251A工作在同步模式,
c)由CPU用奇地址端口写入的值将作为控制字送到控制寄存器,而用偶地址端口写入的值将作为数据送到数据输出缓冲寄存器。
四、实现方法
1、程序流程图如下:
主程序
串口发送子程序
2、连线图
连线
连接孔1
连接孔2
1
KEY/LED_CS
CS0
2
8251_CS
CS1
3
8251_TxCLK
1MHz
4
8251_RxCLK
1MHz
5
8251_CLK
10MHz
6
甲方8251_TXD
乙方8251_RXD
7
甲方8251_RXD
乙方8251_TXD
8
甲方GND
乙方GND
3、8251A操作过程流程图
8251A操作过程流程图
4、试验程序(见附录)
五、实施结果
双机串行通信实现了数据的双项收发。
在一台小键盘键入字符,在本机的LED数码显示管上显示出来,并由8251A的发送端发送给另一台的8251A的接收端接收,然后在另一台LED数码显示器上显示出来。
同样另一台也可做发送端发送字符。
六、改进意见及建议
本次课程设计是通过8251的收发功能将两个试验箱实现串行通讯,我们组顺利实现了两台机箱的同时发送和接收数据的双机通讯。
而在本次试验中发送的一直都是一个字符而不能发送多位字符,我希望改进的是可以发送任意长短的字符,由用户自己定义。
七、个人所做贡献
在本次试验中我负责程序的查找、修改和调试,我们在网上查找,在本机实验程序中查找,修改,在一条一条指令的研究后,在询问了别人意见后,最后定下了附录里的这段程序。
八、设计体会
回顾起此次接口课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整一星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说8251A芯片的使用,软件的应用技巧,对汇编语言掌握得不好……通过这次课程设计之后,一定把以前所学过的知识重新温故。
十、附录
试验程序代码如下
;//从左向右,第五位LED数码管显示本机的键入按键代码,第六位显示接收到的数据
;单机的自发自收模式下,请将8251模块的TXD和RXD用线缆直接连接
OUTBITequ08002h;位控制口
OUTSEGequ08004h;段控制口
IN_KEYequ08001h;键盘读入口
CS8251Dequ09000h;串行通信控制器数据口地址
CS8251Cequ09001h;串行通信控制器控制口地址
datasegment
LEDBufdb6dup(?
);显示缓冲
Numdb1dup(?
);显示的数据
DelayTdb1dup(?
)
RBufdb0
TBufdb0
LEDMAP:
;八段管显示码
db3fh,06h,5bh,4fh,66h,6dh,7dh,07h
db7fh,6fh,77h,7ch,39h,5eh,79h,71h
KeyTable:
;键码定义
db16h,15h,14h,0ffh
db13h,12h,11h,10h
db0dh,0ch,0bh,0ah
db0eh,03h,06h,09h
db0fh,02h,05h,08h
db00h,01h,04h,07h
codesegment
assumecs:
code,ds:
data
Delayprocnear
pushax;延时子程序
pushcx
moval,0
movcx,ax
loop$
popcx
popax
ret
Delayendp
DisplayLEDprocnear
movbx,offsetLEDBuf
movcl,6;共6个八段管
movah,00100000b;从左边开始显示
DLoop:
movdx,OUTBIT
moval,0
outdx,al;关所有八段管
moval,[bx]
movdx,OUTSEG
outdx,al
movdx,OUTBIT
moval,ah
outdx,al;显示一位八段管
pushax
movah,1
callDelay
popax
shrah,1
incbx
deccl
jnzDLoop
movdx,OUTBIT
moval,0
outdx,al;关所有八段管
ret
DisplayLEDendp
TestKeyprocnear
movdx,OUTBIT
moval,0
outdx,al;输出线置为0
movdx,IN_KEY
inal,dx;读入键状态
notal
andal,0fh;高四位不用
ret
TestKeyendp
GetKeyprocnear
movch,00100000b
movcl,6
KLoop:
movdx,OUTBIT
moval,ch;找出键所在列
notal
outdx,al
shrch,1
movdx,IN_KEY
XX文库-让每个人平等地提升自我inal,dx
notal
andal,0fh
jneGoon_;该列有键入
deccl
jnzKLoop
movcl,0ffh;没有键按下,返回0ffh
jmpExit1
Goon_:
deccl
shlcl,2;键值=列X4+行
movch,4
LoopC:
testal,1
jnzExit1
shral,1
inccl
decch
jnzLoopC
Exit1:
movdx,OUTBIT
moval,0
outdx,al
movch,0
movbx,offsetKeyTable
addbx,cx
moval,[bx];取出键码
movbl,al
WaitRelease:
movdx,OUTBIT
moval,0
outdx,al;等键释放
movah,10
callDelay
callTestKey
jneWaitRelease
moval,bl
ret
GetKeyendp
IInitprocnear;8251初始化
movdx,CS8251C
moval,01001111b;1停止位,无校验,8数据位,x64
outdx,al
moval,00010101b;清出错标志,允许发送接收
outdx,al
ret
IInitendp
Sendprocnear;串口发送
movdx,CS8251C
moval,00010101b;清出错,允许发送接收
outdx,al
WaitTXD:
inal,dx
testal,1;发送缓冲是否为空
jzWaitTXD
moval,TBuf;取要发送的字
movdx,CS8251D
outdx,al;发送
pushcx
movcx,0ffffh
loop$
popcx
ret
Sendendp
Receiveprocnear;串口接收
movdx,CS8251C
WaitRXD:
inal,dx
testal,2;是否已收到一个字
jeWaitRXD
movdx,CS8251D
inal,dx;读入
movRBuf,al
ret
Receiveendp
startprocnear
movax,data
movds,ax
callIInit
movLEDBuf,0ffh;显示8.8.8.8.
movLEDBuf+1,0ffh
movLEDBuf+2,0ffh
movLEDBuf+3,0ffh
movLEDBuf+4,0ffh
movLEDBuf+5,0ffh
MLoop:
callDisplayLED;显示
movdx,CS8251C
inal,dx;是否接收到一个字
testal,2
jnzRcvData
callTestKey;有键入?
jeMLoop;无键入,继续显示
callGetKey;读入键码
andal,0fh;显示键码
movTBuf,al
moval,TBuf
andal,0fh;只显示低四位
movah,0
movbx,offsetLEDMAP
addbx,ax
moval,[bx];转换成显示码
movLEDBuf+4,al
callSend
jmpMLoop
RcvData:
callReceive;读入接收到的字
moval,RBuf
andal,0fh;只显示低四位
movah,0
movbx,offsetLEDMAP
addbx,ax
moval,[bx];转换成显示码
movLEDBuf+5,al
jmpMLoop
Startendp
codeends
endstart
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 接口 技术 课程设计 双机 串行 通讯
![提示](https://static.bdocx.com/images/bang_tan.gif)