ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:331.22KB ,
资源ID:8840050      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-8840050.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于单片机的双机通信实训报告.docx)为本站会员(b****5)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

基于单片机的双机通信实训报告.docx

1、基于单片机的双机通信实训报告一 设计方案根据题目分析可知硬件电分为主机模块和从机模块。主机模块中包含单片机子模块、lcd1602显示子模块和矩阵键盘模块,从机模块则包括单片机子模块、LED显示模块。在主模块中由AT89C51单片机担任主机,LCD1602担任显示设备和由4位独立按键做矩阵键盘。在整个系统中有一个从机模块,有一片AT89C51单片机担任从机模块的控制模块,串口采用单工及异步通信方式。整个硬件结构原下图所示。二硬件分析(1)控制模块 控制模块采用AT89C51作为主控芯片,11.0592MHZ的晶振频率作为时钟震荡电路。基本电路图如下所示。仿真图 由于在protues里面,单片机内

2、部默认自带晶振,所以不需要再连接振荡电路。 控制模块原理图(2)显示模块 采用LCD1602作为显示模块,LCD1602用来显示当前从机LED的状态。仿真图如下所示:仿真图 在画原理图时,由于没有LCD1602的封装。所以,本人直接用16跟引脚的排针代替。然后在给相应的引脚表上网络位口。但是再画PCB,必须控制好原件之间的距离,以免导致制版时,元件位置冲突。原理图如下所示:原理图(3)矩阵键盘模块 矩阵键盘用来给单片机输入一个电平值,然后再通过主机CPU发送给从机,最后从机CPU接收,并通过LED显示出结果。当按键按下,相当于给主机CPU送入一个低电平,主机再把这个电平值发送给从机。因为LED

3、是采用共阳连接的方式,所以可以点亮LED。 矩阵键盘仿真图,以及原理图如下所示:仿真图原理图(4)LED显示模块 LED显示模块,主要用来显示主机送给从机的电平值是高电平还是低电平,同时也可以用来检测,整个通信系统是否能够正常工作。 为了整个电路简化,以及效果更明显,所以决定采用共阳连接的方式。 LED显示模块的仿真图,以及原理图如下所示:仿真图原理图三软件分析 根据题目分析可知硬件电分为主机模块和从机模块。AT89C51单片机担任主机模块和从机模块的控制模块,串口采用单工及异步通信方式。设置波特率位9600,定时器T1为方式2.主机和从机均采用11.0592MHz的晶振频率。(1)主机程序#

4、include#define uchar unsigned char #define uint unsigned intsbit key1=P20;sbit RS=P25;sbit RW=P26;sbit EN=P27;uint temp=1,i=0;uchar flag=0; /状态标志位uchar code s1=led zhuang tai:;uchar code s2= on ;uchar code s3= off;void delay(uint xms) uint i,j; for(i=xms;i0;i-) for(j=110;j0;j-);void delay1ms(uint ms

5、)/延时1毫秒( unsigned int i,j; for(i=0;ims;i+) for(j=0;j100;j+); void wr_com(uchar com)/写指令 delay1ms(1); RS=0; RW=0; EN=0; P0=com; delay1ms(1); EN=1; delay1ms(1); EN=0; void wr_dat(uchar dat)/写数据 delay1ms(1); RS=1; RW=0; EN=0; P0=dat; delay1ms(1); EN=1; delay1ms(1); EN=0;void lcd_init()/初始化设置 delay1ms(1

6、5); wr_com(0x38); delay1ms(5); wr_com(0x08); delay1ms(5); wr_com(0x01); delay1ms(5); wr_com(0x06); delay1ms(5); wr_com(0x0c); delay1ms(5);void xianshi() /LCD1602显示函数(显示第一行的固定文字) uint i; for(i=0;i14;i+) wr_com(0x80+i); wr_dat(s1i); void flag_xianshi()/显示当前LED的状态(跟按键是否按下有关) uint j; if(flag=1) for(j=0;

7、j8;j+) wr_com(0xc0+j); wr_dat(s2j); else if(flag=0) for(j=0;j8;j+) wr_com(0xc0+j); wr_dat(s3j); void key() /键盘扫描函数 if(key1=0) /按键按下 delay(5); while(key1!=1);/检测按键是否放开 i+; /用来计算按的次数 if(i%2=1) /当按的是奇数下,点亮LED temp=0; flag=1; Else /偶数下,LED熄灭 temp=1; i=0; /清零I(可有可无) flag=0; void init() /中断初始化 TMOD=0x20;

8、TH1=0xfd; /设置波特率为9600 TL1=0xfd; SCON=0x40; /设置串口方式1,只发送不接收 PCON=0x00; /SMOD=0 ES=1; /允许串口中断 EA=1; /开总中断 TR1=1; /启动定时器T1void main() lcd_init(); /先初始化1602显示函数 init(); /中断初始化 xianshi(); /在这里调用显示函数的原因是因为1602第一行为固定显示,所以可以 不用参与循环 while(1) key(); /检测是否有按键按下 flag_xianshi();/显示LED状态 SBUF=temp; /temp的数据送给串行口发

9、送 while(TI=0);/等待数据,也可以说是检测数据是否发送完 TI=0; /已发送完,就清零T1 (2)从机程序#include#define uchar unsigned char #define uint unsigned intsbit led=P20;void init() /中断初始化 TMOD=0x20; TH1=0xfd; /设置波特率为9600 TL1=0xfd; SCON=0x40; /设置串口方式1,只发送不接收 PCON=0x00; /SMOD=0 ES=1; /允许串口中断 EA=1; /开总中断 TR1=1; /启动定时器T1void main() init(

10、); while(1) while(RI=0);/等待数据,也可以用来判断数据是否接收完毕 RI=0; /数据接收完毕,清零RI led=SBUF; /数据直接送给IO口,控制LED的亮灭 四实物展示实物图PCB五元件汇总元件名数量单位AT89C512片103蓝白电位器1个40脚芯片底座2个20脚排针5条轻触开关6个220电阻10个2K电阻2个红色LED8个11.0592MHz晶振2个LCD16021个22PF瓷片电容4个10uf电解电容2个103排阻2条杜邦线2条单面覆铜板1片六心得体会 这次单片机实训收获还是有的!本来没打算做双机通信的,但是其他的题目都已经有接触了,所以后来还是选了一个以

11、前没接触过的东西玩玩,毕竟能学到东西才是王道!没想到,瞎猫碰到死耗子了,以为双机通信很难,结果却是所有实训题目里面最简单的。真是有够意外的。很顺利的在第一天就把仿真和程序给搞定了,这个跟有扎实的程序思维是密不可分的。然后接下来解释调试了。本打算直接用实验室的单片机学习板进行调试的。后来发现,太麻烦了,还是自己做块板吧,反正时间多着呢。 周二搞定原理图,周二晚上搞定PCB,整个过程有条不紊的进行的。好了,本以为本次实训能完美收场的,结果是我想太多了。周三整天都是在帮同学,指导程序啊,知道原理图,别人的完成了自己的到是落下了。制版过程浪费太多时间了,终于在周四做好了板。因为实训只剩最后一天了,我还

12、没开始焊元器件,以及调试。我开始有些着急了。人越急,就越容易出错。就因为这个小小的错误,我让我调试付出了太多时间。所以,做事千万要沉得住气,别急慢慢来。 下面,讲讲我调试遇到的麻烦吧。 第一次调试,当板接上电源,整个板完全没反应,LCD1602没亮。用万用表检测了所有的线路,没有出现断路现象,均连接正常,LCD1602就是不亮,在继续查资料,后来终于发现问题所在,原来是背光没连接电源。所以直接用跳线将LCD1602最后两个引脚A,K脸上VCC和GND。 LCD1602搞定,终于可以亮了,本以为成功了一半,但是后来才知道,还远远没有结束。 第二次调试,接好LCD1602的A,K。分别给主机,和从

13、机烧入程序。1602没有显示字符,按键,按下,LED没有反应。问题出现,继续找原因。刚开始以为是程序问题,原理图的连接,和程序的IO口声明出现了错误,后来经过检测,程序没问题,IO口声明也没问题。那最有可能是单片机的系统没工作。 用万用表检测了单片机引脚与排针的连接,均是正常的,检查复位电路,振荡电路,终于找到了问题所在,原来我把振荡电路的两个瓷片电容的数值焊错了。本来要22PF的瓷片电容,我换成了103瓷片电容,好吧,问题发现,从新换上22PF的电容。 第三次调试,整个系统还是不能工作,把前两次的工作从新做了一遍,还是没发现问题。当时时间已经过了1礼拜,差点跪了。太折磨人了。后来在看PCB时

14、,无意间让我看到了一目,下面附图: 可能这样看不是很明显,好我们放大看看: 这下看清楚了吧!坑爹啊!我竟然没有还有一条线没连到GND,我靠还有一条线躲在那里啊!这就是我辛辛苦苦排查的原因的,竟然是忘了连一天GND。 所以说:画板需谨慎,注意看看那些线没连的,电路板的每条线都是关键!元器件参数要认真看,本来都是不必要的问题,却因为我的粗心大意,浪费了那么多时间,可惜啊! 以上就是我这次实训的体会了,说多了都是泪和累啊!七参考文献【1】单片机原理及应用C51编程+Proteus仿真 主编:张毅刚 出版社:高等教育出版社【2】Altium Designer 电子设计应用教程 主编:高 歌 出版社:清华大学出版社

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2