还剩11页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
一、设计题目双机通过两台试验箱串行通讯
二、设计目的
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连接孔21KEY/LED_CSCS028251_CSCS138251_TxCLK1MHz48251_RxCLK1MHz58251_CLK10MHz6甲方8251_TXD乙方8251_RXD7甲方8251_RXD乙方8251_TXD8甲方GND乙方GND
3、8251A操作过程流程图8251A操作过程流程图
4、试验程序(见附录)
五、实施结果双机串行通信实现了数据的双项收发在一台小键盘键入字符,在本机的LED数码显示管上显示出来,并由8251A的发送端发送给另一台的8251A的接收端接收,然后在另一台LED数码显示器上显示出来同样另一台也可做发送端发送字符
六、改进意见及建议本次课程设计是通过8251的收发功能将两个试验箱实现串行通讯,我们组顺利实现了两台机箱的同时发送和接收数据的双机通讯而在本次试验中发送的一直都是一个字符而不能发送多位字符,我希望改进的是可以发送任意长短的字符,由用户自己定义
七、个人所做贡献在本次试验中我负责程序的查找、修改和调试,我们在网上查找,在本机实验程序中查找,修改,在一条一条指令的研究后,在询问了别人意见后,最后定下了附录里的这段程序
八、设计体会回顾起此次接口课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整一星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说8251A芯片的使用,软件的应用技巧,对汇编语言掌握得不好……通过这次课程设计之后,一定把以前所学过的知识重新温故
十、附录试验程序代码如下;//从左向右第五位LED数码管显示本机的键入按键代码第六位显示接收到的数据;单机的自发自收模式下请将8251模块的TXD和RXD用线缆直接连接OUTBITequ08002h;位控制口OUTSEGequ08004h;段控制口IN_KEYequ08001h;键盘读入口CS8251Dequ09000h;串行通信控制器数据口地址CS8251Cequ09001h;串行通信控制器控制口地址datasegmentLEDBufdb6dup;显示缓冲Numdb1dup;显示的数据DelayTdb1dupRBufdb0TBufdb0LEDMAP:;八段管显示码db3fh06h5bh4fh66h6dh7dh07hdb7fh6fh77h7ch39h5eh79h71hKeyTable:;键码定义db16h15h14h0ffhdb13h12h11h10hdb0dh0ch0bh0ahdb0eh03h06h09hdb0fh02h05h08hdb00h01h04h07hcodesegmentassumecs:codeds:dataDelayprocnearpushax;延时子程序pushcxmoval0movcxaxloop$popcxpopaxretDelayendpDisplayLEDprocnearmovbxoffsetLEDBufmovcl6;共6个八段管movah00100000b;从左边开始显示DLoop:movdxOUTBITmoval0outdxal;关所有八段管moval[bx]movdxOUTSEGoutdxalmovdxOUTBITmovalahoutdxal;显示一位八段管pushaxmovah1callDelaypopaxshrah1incbxdeccljnzDLoopmovdxOUTBITmoval0outdxal;关所有八段管retDisplayLEDendpTestKeyprocnearmovdxOUTBITmoval0outdxal;输出线置为0movdxIN_KEYinaldx;读入键状态notalandal0fh;高四位不用retTestKeyendpGetKeyprocnearmovch00100000bmovcl6KLoop:movdxOUTBITmovalch;找出键所在列notaloutdxalshrch1movdxIN_KEYinaldxnotalandal0fhjneGoon_;该列有键入deccljnzKLoopmovcl0ffh;没有键按下返回0ffhjmpExit1Goon_:decclshlcl2;键值=列X4+行movch4LoopC:testal1jnzExit1shral1inccldecchjnzLoopCExit1:movdxOUTBITmoval0outdxalmovch0movbxoffsetKeyTableaddbxcxmoval[bx];取出键码movblalWaitRelease:movdxOUTBITmoval0outdxal;等键释放movah10callDelaycallTestKeyjneWaitReleasemovalblretGetKeyendpIInitprocnear;8251初始化movdxCS8251Cmoval01001111b;1停止位无校验8数据位x64outdxalmoval00010101b;清出错标志允许发送接收outdxalretIInitendpSendprocnear;串口发送movdxCS8251Cmoval00010101b;清出错允许发送接收outdxalWaitTXD:inaldxtestal1;发送缓冲是否为空jzWaitTXDmovalTBuf;取要发送的字movdxCS8251Doutdxal;发送pushcxmovcx0ffffhloop$popcxretSendendpReceiveprocnear;串口接收movdxCS8251CWaitRXD:inaldxtestal2;是否已收到一个字jeWaitRXDmovdxCS8251Dinaldx;读入movRBufalretReceiveendpstartprocnearmovaxdatamovdsaxcallIInitmovLEDBuf0ffh;显示
8.
8.
8.
8.movLEDBuf+10ffhmovLEDBuf+20ffhmovLEDBuf+30ffhmovLEDBuf+40ffhmovLEDBuf+50ffhMLoop:callDisplayLED;显示movdxCS8251Cinaldx;是否接收到一个字testal2jnzRcvDatacallTestKey;有键入jeMLoop;无键入继续显示callGetKey;读入键码andal0fh;显示键码movTBufalmovalTBufandal0fh;只显示低四位movah0movbxoffsetLEDMAPaddbxaxmoval[bx];转换成显示码movLEDBuf+4alcallSendjmpMLoopRcvData:callReceive;读入接收到的字movalRBufandal0fh;只显示低四位movah0movbxoffsetLEDMAPaddbxaxmoval[bx];转换成显示码movLEDBuf+5aljmpMLoopStartendpcodeendsendstart是发送子程序发送缓冲为空?发送数据返回否清出错标志是否有无开始设置串口通讯方式及波特率LED显示读入键值检测键盘输入转换成键码串口发送键码收到数据?接收数据送显示缓冲是接收子程序是否已收到数据?读入数据返回否串口接收子程序。