单片机课程设计-串行通信之多机通信_第1页
单片机课程设计-串行通信之多机通信_第2页
单片机课程设计-串行通信之多机通信_第3页
单片机课程设计-串行通信之多机通信_第4页
单片机课程设计-串行通信之多机通信_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机课程设计串行通信之多机通信完成日期:2009年7月11日目录设计目的1实现功能1元件清单1总体框图2根本原理4软件仿真4拓展说明6课程设计完成感想7程序清单8设计目的了解单片机串行通信的工作原理。掌握串行口工作方式的程序设计及点对点通信电路连接方法实现功能根本实验要求:利用两台单片机实验平台完成两台单片机间点对点通信。1 完成两台单片机间一主一从的单工通信。主机发送数据,从机接收数据并在数码管上显示。2 完成两台单片机的全双工通信。通信双方的任一单片机可同时发送和接收数据,并将数据在各自的数码管上显示。经过和老师的沟通协商,最后实现功能改为:实现两个或两个以上单片机间的多机通信,具体方式

2、为:三个51单片机间进行“1主对2”全双工多机通信。主机可以将其数码管显示的内容发送给每个从机,也可以采集每个从机数码管显示的数据并求和后显示出来,同时从机也可以主动发送数据给主机。每个单片机的数码管显示值可以通过外接的按键进行设置。元件清单AT89S52单片机 3个74LS47译码器6个七段数码管6个复位电路三套晶振电路三套不带锁按键6个电源电路一套总体框图根本原理本课程设计的重点和难点在于对于多机通信的标志位SM2及相关存放器的运用。MCS-51单片机串行通信口控制器SCON中的SM2为方式2或方式3的多机通信控制位。当串行口以方式2或方式3工作时,假设SM2设为1,此时只有当串行口接收到

3、的第9为数据RB8=1时,才置“1”中断标志RI,假设收到的RB8=0,那么不产生中断标志,信息被丢掉。从机系统有初始化程序将串行口设定为方式2接收,即9位异步通信方式,且置“1SM2和REN,允许串行口中断。在主机和某一个从机通信之前,先将从机地址发送给各个从机系统,接着才开始传送数据或命令,主机发出的地址第9位为“1,数据包括命令信息的第9位为“0。当主机向各个从机发送地址时,各从机的串行口接收到的第9位信息及RB8为“1,那么置中断标志位RI为“1,各从机响应中断,执行中断效劳程序,判断主机送来的地址是否和本机地址相符合,假设为本机地址,那么该从机清零SM2位,准备接收主机的数据或命令;

4、假设地址不相符,那么保持SM2为“1状态,接着主机发送数据,此时各从机串行口接收到的RB8=0,只有于前面地址相符合的从机系统即已经将SM2清零的从机才能激活中断标志位RI,从而进入中断效劳程序,在中断效劳程序中接受主机的数据或执行主机的命令,实现和主机的信息传送;其他从机因SM2保持“1,又RB8=0不激活中断标志RI,所接收的数据丧失不做处理,从而实现主机和从机间的通信。这种控制方式是主从式工作方式,由主机控制从机的接收和发送。综上所述,本系统实现的过程总结如下:把全部从机的串行口初始化为工作方式2或方式3,置位SM2,允许中断。主机置位TB8,发送要寻址的从机地址。所有从机均接受主机发送

5、的地址,并各自进入中断效劳程序,进行地址比拟。被寻址的从机确认后,把自身的SM2清零。主机向从机发送命令,通知从机是进行数据接收还是进行数据的发送。主机和从机进行数据通信。软件仿真Proteus调试与仿真:在keil中建立程序文件,调试成功生成hex文件。在proteusISIS界面中,单击按钮启动仿真。主机操作如下:每按下“加1键,数码管显示值加1;每按下“汇总数据键,主机数码管显示值变为从机1的显示值+从机2的显示值之和;每按下“发送从机1”键,从机1的数码管显示的数据为此时主机的数码管上的数据;每按下“发送从机2”键,从机2的数码管显示的数据为此时主机的数码管上的数据。从机操作如下:每按

6、下“加1键,数码管显示值加1;每按下“发送键,向主机发送数据;运行中的数码管显示值随主机的操作而发生改变。仿真片段1:主机将6发送给从机1.仿真片段2:主机将数据10发送给从机2.仿真片段3:主机接收从机1和从机2数据之和。仿真片段4:从机1向主机发送数据仿真片段5:从机2向主机发送数据课程设计完成感想单片机课程设计的时间还是非常充裕的。两天的时间,用来查阅资料和选择题目。事实上,串行通信这个题目并不是我特别想做的。电子琴和led点阵显示都是很好很有趣的题目,可是稍微打听一下,周围的同学好多都选定了这些题目,而且这个学期的嵌入式课程设计的题目已经做过了类似的作品。对于串行通信、总线知识,我们了

7、解的并不是很深入,可以说只是知其然而不知其所以然。因此,我打算挑战一次自己,来尝试去完成这个题目的课程设计。然而,这个过程是相当艰辛的。从一开始审题就是如此。刚开始接触通信专业知识到现在,通信方式一直都是一个很根本的常识。什么叫单工通信,什么叫半双工、双工。原来以为这些概念早已是小儿科的问题,可是等到真正用到的时候,却发现不是那么回事。实际上全双工通信并不是那么容易就能够实现的,并不是所有总线协议都能够实现同时收同时发的功能。对于老师题目界定很模糊,所以,另一个和我一起想挑战自我,并且在完全没有商量的情况下选了同样题目的女生决定去找老师把题目的功能的弄清楚。通过跟老师的交流,我们对于上面提到的

8、一些概念有了更加深入的认识。并且决定做多机通信。虽然说,多机通信,如果要焊板子的话必须要买三块单片机才可以实现根本功能。但是对于已经决定了的我们,当时并没有想太多。接下来就是写程序了。改了写,写了改,又是两天的时间,终于把程序调通了。鉴于没有那么多单片机开发板来实现在线调试,我决定先用proteus软件来仿真芯片调试。第一次用这个软件感觉非常不好,因为当时手边没有教材参考,自己摸索,找不到器件,找不到地线电源线。没方法,第二天到图书馆去借了一堆书回来看。终于把电路连接好了。把程序装载进去,能够实现我预先试想的功能。然而,事情快乐的太早了。这个软件,是一次性的,第二次就再也打不开了。没方法,只能

9、重装。吃一堑长一智,大不了不关了,电脑全天侯待机。可是没有方法在线调试,我想,既然已经可以仿真出来,应该说没有问题了吧。那就进入下一个环节:去中发买元件。大中午一点钟的,两个女生顶着大太阳挤公交,一直到下午六点才回来。其实这点苦不算什么,如果板子能够出来,再苦也开心,也值得。在这个环节必须要强调的一点就是,我们当时买单片机时要买SST公司制造的。可是那种芯片不好买,甚至有人说那个芯片已经没有人用了。既然这样,那就买AT的吧,应该说没有什么关系。可是我们万万没有想到,这这个失误竟造成了我们后面调试阶段非常大的阻碍。仿真的时候用的是带译码器的四脚数码管,而去中发却没有买到,只好改变原来的设想,每个

10、数码管加一个译码器。由于某些原因,两天之后又去了一趟中发购置元件。有数码管在,工程变得很巨大。由于我们每天要上一个上午的课,因此总共花了三天的时间才把板子焊好。没有方法烧程序,因为开发板是飞利浦公司,和sst公司的。没有方法烧AT的芯片。怎么办,只能请教老师了。找过老师,找过助教。终于在另一个老师的助教那里发现了一个可以向所有芯片烧程序的下载器。但是仍然没有方法在线调试。只好先用别人开发板上的芯片在线调试,这样先把电路调通了。买的二联的板子,很多线,很多焊错点,很崩溃。此时又发生了一件神奇的事情。也可能我们的课程设计的进程到此为止了。在线调试完全没有问题,可不知道为什么放在焊好的电路上就没有任

11、何反映了。查电路,该电路,仍然一如既往的出不来任何反映。找助教老师,他查了一个晚上,也是和我一样的费解。怎么办,貌似没辙了。可就在这个时候,才真正的静下心来了。不可能没有原因,所有的事情都是有原因的,单片机没有反映,一定是一个很关键的错误没有找出来。晚上去实验室继续查,一个管脚一个管脚的查,突然发现EA端按错了地方了。改正来,出来了!写道这里已经一千五百字,回首整个过程可谓坎坷崎岖。自己焊板子的错误真的是不少,粗心大意的毛病总是改不了。做事情要坚持不懈,要脚踏实地,就算再困难总有柳暗花明的一天。程序清单程序存放器说明:R5:要发送和接收,并显示在数码管上的数据R4:暂存中间数据R3:发送及接收

12、指令。00H是主机发送,01H是主机接收R2:从机地址R1,R0:延时专用存放器主机清单:ORG00HAJMPMAINORG30HMAIN:MOVSP,#60H;初始化程序MOVTMOD,#20H;使用定时器1,方式2MOVTH1,#0FDH;装入初始值MOVTL1,#0FDHMOVPCON,#0SETBTR1MOVR5,#00H;MOVSBUF,#00H;MOVP1,#00HLOOP:MOVP2,R5;显示R5存放器内容JBRI,SHOUMOVA,#0FFHMOVP3,A;扫描按键JNBP3.2,PRESTX1;功能1 发送给从机1数据JNBP3.3,PRESTX2;功能2 发送给从机2数据

13、JNBP3.4,PRESRX;功能3 接收从机1+从机2数据之和JNBP3.5,JIAYI;功能4 自身的数据加1AJMPLOOPPRESTX1:CALLDELAYJBP3.2,LOOPJNBP3.2,$;MOVP1,#01HMOVR3,#00H;发送的命令MOVR2,#0E0H;从机1地址CALLMSIO1;发送NOPNOPAJMPLOOPPRESTX2:CALLDELAYJBP3.3,LOOPJNBP3.3,$;MOVP1,#02HMOVR3,#00HMOVR2,#0F0H;从机2地址CALLMSIO1NOPNOPAJMPLOOPPRESRX:CALLDELAYJBP3.4,LOOPJNB

14、P3.4,$;MOVP1,#0AHMOVR3,#01H;接收命令MOVR2,#0E0H;先发给从机1CALLMSIO1NOPNOPMOVA,R5;将从机1的数存放在R4MOVR4,AMOVR2,#0F0H;再发给从机2CALLMSIO1MOVA,R4ADDA,R5DAA;将两个数据相加MOVR5,AAJMPLOOPJIAYI:CALLDELAYJBP3.5,LOOPJNBP3.5,$;MOVP1,#0HINCR5;加1CLRAADDA,R5DAA;加上进位MOVR5,AAJMPLOOPSHOU:CLRRIMOVA,SBUFMOVR5,AAJMPLOOPMSIO1:SETBTB8;发的是地址MO

15、VA,R2MOVSBUF,AJNBTI,$CLRTICLRTB8;发的是数据MOVA,R3MOVSBUF,AJNBTI,$CLRTICJNEA,#00,SRXSTX:CLRTB8MOVA,R5;发送子程序MOVSBUF,AJNBTI,$CLRTIRETSRX:JNBRI,$CLRRI;接收子程序MOVA,SBUFMOVR5,ARETDELAY:MOVR0,#10YAN1:MOVR1,#5YAN2:DJNZR1,YAN2DJNZR0,YAN1RETEND从机程序清单:SLAVEEQU30HORG00HAJMPMAINORG30HMAIN:MOVSP,#60HMOVTMOD,#20HMOVTH1,

16、#0FDHMOVTL1,#0FDHMOVSCON,#0D8HMOVPCON,#0SETBTR1SETBSM2MOVA,#0FFHMOVP1,AMOVA,P1MOVSLAVE,AMOVR5,#00H;MOVSBUF,#00HDISPLAY:MOVP2,R5;显示CHACKRI:JBRI,SSIOJNBP3.7,CHAAJNBP3.3,CHABCHAA:CALLDELAYJBP3.7,CHACKRIJNBP3.7,$INCR5;加1MOVA,#0ADDA,R5DAAMOVR5,AAJMPDISPLAYCHAB:CALLDELAYJBP3.3,CHACKRIJNBP3.3,$MOVA,R5MOVSBUF,AJNBTI,$CLRTIAJMPCHACKRISSIO:CLRRI;接收地址SETBRS1CLRRS0MOVA,SBUFXRLA,SLAVEJZSSIO1;判断是否是本机RETURN:SETBSM2AJMPDISPLAY;不是本机返回显示S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论