您好,欢迎访问三七文档
微机原理与接口课程设计报告课程设计题目:DOS功能调用-串口异步通信学号:08113217学生姓名:苏林坡班级:081132专业:信息工程指导教师:谌洪茂一软件的功能随着计算机的不断普及,在我们的周围可能会同时出现多台微型计算机,而且这些计算机的牌号,后型号不同,而且有的格式不兼容。于是利用单片机串行口实现不同计算机之间的相互通信,以达到信息或程序的共享是非常有用的。另一方面,在某计算机的软磁盘驱动器万一出现故障的情况下,也可以通过它将计算机硬盘的数据或程序拷贝出来。文件传输程序可以用来在两个计算机之间传输任何类型的文件(包括二进制文件),对于那些有不同类型的计算机特别有用。网络的发展,局域网的建立,使得一个文件服务器以及允许其他计算机从服务器中装入文件或将它们存入文件服务器也可以通过串口来实现。二软件设计2.1设计简单介绍本系统的软件设计流程图参见附录部分(图2)。系统设计代码分为以下几个部分:初始化8251A、发送数据、接收数据、键盘输入、数值转换、LED显示。2.2模块设计详细分析1.初始化8251A:8251A工作在同步方式下,方式选择控制字为00H,工作命令控制字为40H.代码如下:KEYLED:MOVAL,00HOUTDX,ALOUTDX,ALOUTDX,ALMOVAL,40HOUTDX,ALMOVAL,4EHOUTDX,ALMOVAL,27HOUTDX,AL2.键盘输入键盘的输入由8279控制,再输入之前要现判断键盘是否允许按键,则只需读取8279的状态即可;通过数据口读取键值。然后对输入的数据进行判断,若为数字键,只需判断其高四位,高四位为零,则为数字键;不为零则不是数字键;再判断是否为EXEC键,此时只需和10H比较,相同则为EXEC键。KEY0:MOVDX,CONTPORT;读8279状态INAL,DXTESTAL,07H;判断是否有键按下JZKEY0MOVCX,0FFFHDELAY1:LOOPDELAY1MOVDX,DATAPORT;读取键值INAL,DXMOVDI,AXANDAL,0F0H;判断是否为数字键JZKEY1MOVAX,DICMPAL,10H;判断是否为EXEC键JNZKEY0CMPWORDPTRDS:[0601H],0000H;判断按EXEC键前是否按过数字键JZSERERR1MOVSI,DATA3CALLLEDDISP3.数值转换数值转换就是将输入的键值转换成发送代码。转换代码实现部分:CONVERS:MOVBH,0HMOVAX,DIANDAL,0FHMOVBL,ALMOVAL,CS:[BX+DATA4]MOVBYTEPTRDS:[0602H],ALRET4.发送数据1号机用于键盘的控制以及数据的发送。首先判断1号机器键盘的状态,由8279控制,则只需读取8279的状态即可;再判断按键值,若为数字键,则计算次数,再将按键值转换为显示代码;若为EXEC键,再判断按此键之前是否按过数字键,若没按过,则调用显示,显示Errl,若按过再将按键值转换为显示代码。接下来就是判断是否允许发送数据了,发送数据由8251控制,则只需读取8251的状态。允许发送就开始发送数据。部分代码如下:WATTXD:MOVDX,SECOPORTINAL,DX;读取8251状态TESTAL,01H;判断是否允许发送JZWATTXDMOVAL,BYTEPTRDS:[0602H];显示代码送给ALMOVDX,SEDAPORT;发送显示代码OUTDX,ALMOVCX,0FFFFHDELAY2:LOOPDELAY2JMPKEY0SEREND:JMPSEREND5.接收数据并显示2号机用于接受1号机发送的数据并将其显示出来。数据接收由8251控制,则先判断其状态,允许接收则转入接收程序,从数据口读取数据,然后将接收到的数据存入到RAM区暂存。再将数据发送到控制口进行显示。接收数据部分代码如下:WATRXD:MOVDX,SECOPORT;读取8251状态INAL,DXTESTAL,02H;判断是否允许接受JZWATRXDMOVDX,SEDAPORT;接受数据INAL,DXMOVBYTEPTRDS:[0600H],AL;将接受的数据存入RAM区MOVAL,90HMOVDX,CONTPORTOUTDX,ALMOVAL,BYTEPTRDS:[0600H];从RAM区取出数据?MOVDX,DATAPORTOUTDX,AL;显示接受的数据MOVAL,00HOUTDX,ALJMPWATRXD详见源程序清单及注释附录部分。三操作说明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、程序流程图开始调用显示“8251——1”子程序读取键盘状态判有键按下否?延时读取键值是数字键?判是MON键?按MON键前未按过数字键?显示“Err”结束结束显示8251good键值转换成显示代码读取串行口状态判允许发送否?发送键值所对应的显示代码读取串行口状态判允许接收否?从串行口读数据判接收到的数据是否和刚才发送的数据相等显示“Err”结束NYNNNYYYNYNYYN按键次数加1发送数据:接收数据::开始调用显示“8251——2”子程序读取串行口状态判允许接收否?读取串行口数据存入RAM区读取串行口状态判允许发送否?取刚才接收的数据发送显示刚才接收的数NNYY2、源程序清单及注释Send程序段代码CODESEGMENTASSUMECS:CODESTART:JMPSERIALCONTPORTEQU00DFH;8279端口地址DATAPORTEQU00DEH;8279端口地址SECOPORTEQU0051H;8251端口地址SEDAPORTEQU0050H;8251端口地址DATA0EQU0500HDATA1EQU0508HDATA2EQU0510HDATA3EQU0518HDATA4EQU0520HSERIAL:CALLFORMATMOVSI,DATA2CALLLEDDISP;显示8251-2MOVBYTEPTRDS:[0601H],0HMOVWORDPTRDS:[0602H],0HCLDMOVDI,0602H;MOVCX,08HXORAX,AXREPSTOSWMOVDX,SECOPORTMOVAL,00H;初始化8251OUTDX,ALOUTDX,ALOUTDX,ALMOVAL,40HOUTDX,ALMOVAL,4EHOUTDX,ALMOVAL,27HOUTDX,ALKEY0:MOVDX,CONTPORT;读8279状态INAL,DXTESTAL,07H;判断是否有键按下JZKEY0MOVCX,0FFFHDELAY1:LOOPDELAY1MOVDX,DATAPORT;读取键值INAL,DXMOVDI,AXANDAL,0F0H;判断是否为数字键JZKEY1MOVAX,DICMPAL,10H;判断是否为EXEC键JNZKEY0CMPWORDPTRDS:[0601H],0000H;判断按EXEC键前是否按过数字键JZSERERR1MOVSI,DATA3CALLLEDDISPJMPSERENDSERERR1:MOVSI,DATA1CALLLEDDISP;显示Err1JMPSERENDKEY1:CALLCONVERS;键值转换成显示代码WATTXD:MOVDX,SECOPORTINAL,DX;读取8251状态TESTAL,01H;判断是否允许发送JZWATTXDMOVAL,BYTEPTRDS:[0602H];显示代码送给ALMOVDX,SEDAPORT;发送显示代码OUTDX,ALMOVCX,0FFFFHDELAY2:LOOPDELAY2JMPKEY0SEREND:JMPSERENDKEY2:CALLLEDDISPADDBYTEPTRDS:[0601H],01HJMPKEY0CONVERS:MOVBH,0HMOVAX,DIANDAL,0FHMOVBL,ALMOVAL,CS:[BX+DATA4]MOVBYTEPTRDS:[0602H],ALRETLEDDISP:MOVAL,90HMOVDX,CONTPORTOUTDX,ALMOVBYTEPTRDS:[0600H],00LED1:CMPBYTEPTRDS:[0600H],07HJALED2MOVBL,DS:[0600H]MOVBH,0HMOVAL,CS:[BX+SI]MOVDX,DATAPORTOUTDX,ALADDBYTEPTRDS:[0600H],01HJNZLED1LED2:RETLEDDISPD:MOVAL,90HMOVDX,CONTPORTOUTDX,ALMOVBYTEPTRDS:[0600H],00LEDD1:CMPBYTEPTRDS:[0600H],07HJALEDD2MOVBL,DS:[0600H]MOVBH,0HMOVAL,DS:[BX+0602H]MOVDX,DATAPORTOUTDX,ALADDBYTEPTRDS:[0600H],01HJNZLEDD1LEDD2:RETFORMAT:MOVBX,0MOVWORDPTRDS:[BX+0500H],5050H;ERR2显示代码ADDBX,2MOVWORDPTRDS:[BX+0500H],0079HADDBX,2MOVWORDPTRDS:[BX+0500H],0000HADDBX,2MOVWORDPTRDS:[BX+0500H],0000HADDBX,2MOVWORDPTRDS:[BX+0500H],503FH;ERR1显示代码ADDBX,2MOVWORDPTRDS:[BX+0500H],7950HADDBX,2MOVWORDPTRDS:[BX+0500H],0000HADDBX,2MOVWORDPTRDS:[BX+0500H],0000HADDBX,2MOVWORDPTRDS:[BX+0500H],405BH;8251---1显示代码ADDBX,2MOVWORDPTRDS:[BX+0500H],4040HADDBX,2MOVWORDPTRDS:[BX+0500H],6D06HADDBX,2MOVWORDPTRDS:[BX+0500H],7F5BHADDBX,2MOVWORDPTRDS:[BX+0500H],5C5EH;8251good显示代码ADDBX,2MOVWORDPTRDS:[BX+0500H],6F5CHADDBX,2MOVWORDPTRDS:[BX+0500H],6D06HADDBX,2MOVWORDPTRDS:[BX+0500H],7F5BHADDBX,2MOVWORDPTRDS:[BX+0500H],063FH;0-F显示代码ADDBX,2MOVWORDPTRDS:[BX+0500H],4F5BHADDBX,2MOVWORDPTRDS:[BX+0500H],6D66HADDBX,2MOVWOR
本文标题:串口异步通信
链接地址:https://www.777doc.com/doc-7316741 .html