1、基于51单片机双机串行通信课程设计一、 总体设计1设计目1.通过设计有关模块充分熟悉51单片机最小系统构成和原理;2.通过软件仿真熟悉keil和proteus配合使用;3.通过软件编程熟悉51C51编程规范;4.通过实际硬件电路搭设提高实际动手能力。2.设计规定:两片单片机之间进行串行通信,A机将0x06发送给B机,在B机数码管上静态显示1,B机将0f动态循环发送到A机,并在其数码管上显示。3.设计方案:软件某些,通过通信合同进行发送接受,A机先送0x06(B机数码管显示1)给B机(B机静态显示),当从机接受到后,向B机发送代表0-f数码管编码数组。B收到0x06后就把数码表TAB16中数据送
2、给从机。二、硬件设计1.51单片机串行通信功能图1.AT89C51(52)计算机与外界信息互换称为通信,惯用通信方式有两种:并行通信和串行通信。51单片机用4个接口与外界进行数据输入与数据输出就是并行通信,并行通信特点是传播信号速度快,但所用信号线较多,成本高,传播距离较近。串行通信特点是只用两条信号线(一条信号线,再加一条地线作为信号回路)即可完毕通信,成本低,传播距离较远。51单片机串行接口是一种全双工接口,它可以作为UART(通用异步接受和发送器)用,也可以作为同步移位寄存器用。51单片机串行接口构造如下:(1)数据缓冲器(SBUF)接受或发送数据都要先送到SBUF缓存。有两个,一种缓存
3、,另一种接受,用同始终接地址99H,发送时用指令将数据送到SBUF即可启动发送;接受时用指令将SBUF中接受到数据取出。(2)串行控制寄存器(PCON)SCON用于串行通信方式选取,收发控制及状态批示,各位含义如下:SM0SM1SM2RENTB8RB8TIRISM0,SM1:串行接口工作方式选取位,这两位组合成00,01,10,11相应于工作方式0、1、2、3。串行接口工作方式特点见下表SM0SM1工作方式功能波特率 0008位同步移位寄存器(用于I/O扩展)fORC/1201110位异步串行通信(UART)可变(T1溢出率*2SMOD/32)10211位异步串行通信(UART)fORC/64
4、或fORC/3211311位异步串行通信(UART)可变(T1溢出率*2SMOD/32)SM2:多机通信控制位。REN:接受容许控制位。软件置1容许接受;软件置0禁止接受。TB8:方式2或3时,TB8为要发送第9位数据,依照需要由软件置1或清0。RB9:在方式2或3时,RB8位接受到第9位数据,实际为主机发送第9位数据TB8,使从机依照这一位来判断主机发送时呼喊地址还是要传送数据。TI:发送中断标志。发送完一帧数据后由硬件自动置位,并申请中断。必要要软件清零后才干继续发送。RI:接受中断标志。接受完一帧数据后由硬件自动置位,并申请中断。必要要软件清零后才干继续接受。(3)输入移位寄存器接受数据
5、先串行进入输入移位寄存器,8位数据全移入后,再并行送入接受SBUF中。(4)波特率发生器波特率发生器用来控制串行通信数据传播速率,51系列单片机用定期器T1作为波特率发生器,T1设立在定期方式。波特率时用来表达串行通信数据传播快慢限度物理量,定义为每秒钟传送数据位数。(5)电源控制寄存器PCON其最高位为SMOD。(6)波特率计算当定期器T1工作在定期方式时候,定期器T1溢出率=(T1计数率)/(产生溢出所需机器周期)。由于是定期方式,T1计数率= fORC/12。产生溢出所需机器周期数=模M-计数初值X。3.整体电路设计最后设计电路如下图3所示,发送方数据由串行口TXD段输出,通过传播线将信
6、号传送到接受端。信号到达接受方串行口接受端。接受方接受后,通过P1口在数码管上显示接受信息。图3.串行通信电路三、软件设计(1)串行口工作于方式1;用定期器1产生9600bit/s波特率,工作于方式2。(2)功能:将本机ROM中数码表TAB16中16个数发送到从机,并保存在从机内部ROM中,从机收到这16个数据后送到一种数码管循环显示。(3)通信合同:主机一方面发送连络信号从机接受到之后返回一种连络信号表达从机已准备好接受。四、 联合调试在protues上进行仿真实验。一方面使用KeilC将编写完毕程序编译生成HEX文献,将HEX文献烧录到两片单片机中,进行仿真实验,成果如下图所示,可以看到,
7、接受端已将接受到数据完整显示了出来。图4.仿真图注:1.仿真过程中并没有体现出单片机最小系统构成元素:时钟电路和复位电路,但是实际硬件电路中这两某些是必不可少,此外,在实际测试中,程序是事先烧进单片机里,因此这里并没有涉及到电平转换问题(max232芯片和串口连接)。2. 在数码管共阴极与地之间接三极管是为了放大数码管驱动电流,让数码管更加清晰显示数据。附:重要器件:两个STC89C52RC 晶振模块:两个11.0592M晶振四个30pf电容 复位模块:两个开关两个10uf电容两个10K电阻两个1K电阻 显示模块:两个单显共阴极数码管两个NPN型三极管五、 程序清单1. A机程序#includ
8、e#includesbit key=P36;void sendrecieve();void main()P1=0XFF;TMOD=0x20;/定期器1工作作方式2TH1=0XFD;TL1=0XFD;/波特率为9600PCON=0X00;/波特率不加倍TR1=1;SCON=0X50;/串口工作方式为3,即11为可变波特率,/启动容许串口接受中断,多机通讯位SM2置1(广播),TB8置1(表达发送地址)/开发送及接受中断EA=1;key=1;sendrecieve();void sendrecieve()SBUF=0X06;while(TI!=1);/等待数据发送完毕,发送完则ti置1,否则为0T
9、I=0;while(1)while(RI!=1);/等待接受数据完毕RI=0;P1=SBUF;/显示B发送来数据2. B机程序#include#includevoid sendrecieve();sbit key=P36;unsigned char code led=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/共阴极,原则接法(a-h PX.0-PX.7)unsigned int i;delay(unsigned int z) unsigned int x,y;for(x=z;
10、z0;z-)for(y=6000;y0;y- ); /50msvoid main()P1=0XFF;TMOD=0x20;/定期器1工作作方式2TH1=0XFD;TL1=0XFD;/波特率为9600PCON=0X00;/波特率不加倍TR1=1;SCON=0X50;/串口工作方式为3,即11为可变波特率,key=1;/启动容许串口接受中断,多机通讯位SM2置1EA=1;delay(20);sendrecieve();void sendrecieve()while(RI!=1);P1=SBUF;RI=0;for(i=0;i16;i+) SBUF=ledi;/向A发送信息while(TI!=1);/等
11、待数据发送完毕,发送完则ti置1,否则为0TI=0;delay(60); /3si=0;六、 课设中遇到问题及解决办法:1. 在数码管显示模块连接三极管时,由于万用表测试三极管环节接触不良,着实有点让人头疼,但是最后通过借了别租表才解决了问题,并且咱们找到了三极管上型号与之性质相应关系;2. 由于这次咱们课设内容比较简朴,因此咱们在软件环节没有没遇到什么困难,在软件仿真时也很顺利,但是在最后焊接板子时候,咱们却遇到了问题:数码管各管脚排列顺序不是遵循一定规律,因此在焊接时要特别注意布局与布线,在这个环节上咱们耗费了吗大半时间。七、 课设中心得体会:负责总体思路设计,代码编写,软件仿真,并且参加
12、最后测试工作。本次课程设计咱们组重要研究是双机通信实验,通过与构成员之间合伙,在开始前两天中,重要是通过查找资料,或是在图书馆里查看书籍来学习关于双机通信实验基本规定和实验所需要器件,以及各实验器件所实现如何功能。通过了咱们四个人协商,由两个人开始编写代码,再由两个人开始设计实验电路。在编写程序代码时候,使我学习到了最大是MCS51单片机中断程序编写。在编写程序时候由于之前只是在课堂上和课本上学习有单片机中中断源以及中断向量,因此在实践编写代码过程中会遇到诸多不懂问题,需要自己或者与同构成员互相沟通。并且也学会了单片机关于中断设计思想,由于咱们是制作双机通信课程设计,因此在实验中需要用到两片单
13、片机作为主从机来控制信号接受与发送。还学习到了单片机在使用中断时候,如果有中断申请话,硬件电路会自动把单片机里接受发送中断TI和RI置1.这样就表达单片机此时有外部中断申请,必要开中断来接受发送过来信号。大概两天时间,咱们就把初步软件程序和硬件电路设计好了。并且在PROTEUS仿真器件中实现了硬件电路连接,然后咱们把PROTEUS仿真硬件和51程序下载到单片机中通过调节实验硬件和共同修改软件程序最后实现了器件仿真。接下来就是焊接电路工作了,由此外成员来实现大某些硬件电路焊接,从中我也学习帮忙,尽快完毕咱们所有设计内容。在完毕了所有焊接时候,把程序下载到单片机中后,发现了数码管显示和预期设立有些
14、不同,在通过简朴修改之后,咱们成功完毕了咱们实验作品。在本次课程设计中我学习到了好多新知识以及通过了团队小组合伙受益匪浅。 与罗军昌同窗一起进行程序设计思路整合与优化,并采集实验成果,编写报告。这次课程设计题目比较简朴,咱们感觉自己完毕也比较好,至少所用到知识都是在自己理解基本之上,咱们采用了一位动态显示数码管,数码管工作原理;咱们在硬件连接完毕好后来进行检测,当咱们检测所有焊点都没有问题后,让单片机发送数据。咱们用了C语言程序,实现了实验规定。通过两个星期学习,咱们在巩固和学习硬件知识同步,用软件控制协调硬件实现现实功能,通过硬件完毕软件功能等方面融会贯通,获得了一定效果。软件编写时,对于某
15、些指令功能,功能模块连接,等都到了小问题,但是咱们查阅资料得到理解决,与此同步,理解了不少问题。 在这次设计中,我收获不少东西,也遇到了不少问题。一方面,在完毕单片机课程学习任务后,对内容掌握不够,缺少灵活运用能力,对于知识扩展也存在一定问题,因而,初面对设计课题,无法系统地进行设计思路拟定。通过本次课程设计,不但使理论知识得到了实践,有效巩固了知识。同步对于单片机发展历史、强大功能、应用领域以及系列知识得到了大概系统结识,同步也初步理解了一种完整系统开发过程,对于创造思维培养和开发能力锻炼,本次设计,为此提供了一种较好平台。负责硬件电路搭建和测试与纠错。 通过繁忙而又紧张课程设计,终于顺利完
16、毕了设计任务。虽然在这段时间里每天都那么繁忙,但是在这忙碌过程中却得到了许多收获。通过课程设计,在查阅资料过程中,学习了基于单片机C语言程序设计,理解了单片机串行通信基本知识,对于后来学习和工作均有很大益处。在学习过程中,也遇到了某些困难,例如开始时候,由于发送端和接受端通信合同没有做好,导致数据不能对的传播,在解决问题过程中,对于通信合同实既有了深刻结识。通过这次课程设计,我想真是锻炼了自己独立思考能力。查阅并收集课设中用到有关知识和资料,并参加硬件电路焊接。我很清晰这个实验目,表面上咱们最后仅仅只是实现了设计规定基本功能,但我觉得,这次课程设计更加深刻意义是从这样一种最基本,简朴实验中,从
17、这样一种完整过程中我理解一种系统设计流程,甚至说是一种思路,思维。从最初拿到题目,分析设计规定以及实现初步思路,然后去查阅资料进行更加详细设计这次实验无疑规定咱们团队协作,互相配合并且整体上比较全面统筹设计。于是,初步规划后,咱们开始将系统要实现功能各个模块单独开来用PROTEUS仿真,并最后将各个模块组合后整体调试。整个过程中咱们在仿真上耗费了较长时间,由于懂得仿真成功是实现真正硬件电路基本,仿真是从主线上检查设计者设计逻辑以及思路,较好仿真才干使得设计系统在实现规定功能基本上更加稳定、简朴,仿真中,咱们仔细斟酌了电路布线合理性。在焊接过程中,由于之前统筹布局使得咱们电路布线简洁、明了,需要注意是,由于焊接粗心,有些焊点需要屡次解焊导致焊盘脱落,并且对于数码管管脚焊接方式也是值得进一步改进,这便是我此后所要更加注意,争取全心全意焊接电路,不要由于某些粗心因素是电路焊接发生错误,在那个下午坚持不懈努力下咱们终于完毕了任务,可以说是大某些任务都是在那个下午一气呵成。总来说,在实验中,咱们尽量统筹并使得团队协作发挥更大作用,第一周周三分发元器件后,在第二天咱们组便基本上完毕了设计规定基本功能,于是,咱们运用剩余时间去调试硬件以及更加进一步总结题目意义。最后,作为本次实验小组组长,我对人们辛勤快作默契配合合伙精神深感欣慰,但愿后来得到好继承与发扬!