您好,欢迎访问三七文档
西安邮电大学单片机课程设计报告书题目:双机通信系统双机通信系统设计1/13一、系统整体设计1.系统设计思路双机通信的实质就是解决两单片机串行通信问题。针对于89C52单片机全双工异步串行通信口,我们采用单片机直接交叉互连的串行通信方式。考虑到设计应用于短距离传输、两单片机具有相同的数据格式及电平且为使设计简单,我们最终决定采用方式二单片机直接交叉连接的串行通信方式,上位机发送的数据由串行口TXD端输出,直接由下位机的串行口数据接收端RXD接收。需要注意的是一定要保证主从机相同的数据传输速率,即要求设置相同的波特率。电路分为数码管显示模块,以及单片机工作的基本复位、晶振模块。2.系统设计原理(1)串行通信串行数据通信要解决两个关键问题,一个是数据传送,另一个是数据转换。所谓数据传送就是指数据以什么形式进行传送。所谓数据转换就是指单片机在接收数据时,如何把接收到的串行数据转化为并行数据,单片机在发送数据时,如何把并行数据转换为串行数据进行发送。单片机的串行通信使用的是异步串行通信,所谓异步就是指发送端和接收端使用的不是同一个时钟。异步串行通信通常以字符(或者字节)为单位组成字符帧传送。字符帧由发送端一帧一帧地传送,接收端通过传输线一帧一帧地接收。而对于两个单片机之间的串行通信,由于具有相同的数据格式及电平且是短距离通信则不必要使用一些电平转化芯片(如max232等)便可直接实现串行通讯,需要注意的是两单片机硬件要共地,软件中需要设置相同波特率。STC89C52单片机有一个全双工的异步串行通信口,串行结构如下:①数据缓冲器(SBUF)接受或发送的数据都要先送到SBUF缓存。有两个,一个缓存,另一个接受,用同一直接地址99H,发送时用指令将数据送到SBUF即可启动发送;接收时用指令将SBUF中接收到的数据取出。②串行控制寄存器(SCON)SCON用于串行通信方式的选择,收发控制及状态指示,各位含义如下:SM0SM1SM2RENTB8RB8TIRISM0,SM1:串行接口工作方式选择位,这两位组合成00,01,10,11对应于工作方式0、1、2、3。串行接口工作方式特点见下表1.双机通信系统设计2/13表1串行口工作方式表SM0SM1工作方式功能波特率0008位同步移位寄存器(用于I/O扩展)fORC/1201110位异步串行通信(UART)可变(T1溢出率*2SMOD/32)10211位异步串行通信(UART)fORC/64或fORC/3211311位异步串行通信(UART)可变(T1溢出率*2SMOD/32)SM2:多机通信控制位。REN:接收允许控制位。软件置1允许接收;软件置0禁止接收。TB8:方式2或3时,TB8为要发送的第9位数据,根据需要由软件置1或清0。RB8:在方式2或3时,RB8位接收到的第9位数据,实际为主机发送的第9位数据TB8,使从机根据这一位来判断主机发送的时呼叫地址还是要传送的数据。TI:发送中断标志。发送完一帧数据后由硬件自动置位,并申请中断。必须要软件清零后才能继续发送。RI:接收中断标志。接收完一帧数据后由硬件自动置位,并申请中断。必须要软件清零后才能继续接收。③输入移位寄存器接收的数据先串行进入输入移位寄存器,8位数据全移入后,再并行送入接收SBUF中。④波特率发生器波特率发生器用来控制串行通信的数据传输速率的,51系列单片机用定时器T1作为波特率发生器,T1设置在定时方式。波特率时用来表示串行通信数据传输快慢程度的物理量,定义为每秒钟传送的数据位数。⑤电源控制寄存器PCON其最高位为SMOD:波特率倍增位,在串行口方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍,复位时,SMOD=0。⑥波特率计算当定时器T1工作在定时方式的时候,定时器T1溢出率=(T1计数率)/(产生溢出所需机器周期)。由于是定时方式,T1计数率=fORC/12。产生溢出所需机器周期数=模M-计数初值X。双机通信系统设计3/13(2)基本设计原理概述双机通信系统通过主从单片机的串行口来实现数据的收发。主单片机通过开关电路来启动发送程序,当开关按下时向从机发送一个数据,从机通过接收中断来接收主机发送过来的数据,并通过编写好的数据代码在LED数码管上显示主机发送过来的数据。同时从机给主机发送一个应答信号来表示已经接收到了主机发送过来的数据,在主机接收应答并校验正确,以二极管显示,这样就完成了一个数据的通信过程,等待按键按下,然后继续下一次数据的发送直到结束。3.系统设计结构图串口初始化串口是否收到数据进入串口中断子程序初始化时钟定时器中断产生LED闪烁数码管显示初始化串口关定时器是是否否图1双机通信系统结构图双机通信系统设计4/13二、设计要求及任务按键触发主机向从机发送数据。从机以中断方式实时接收数据。从机将接受到的数据显示并回送应答信息给主机。主机查询回送信息并校验以判断是否继续发送。制作硬件电路,并调试,最后实现双机通信系统功能。三、硬件电路设计及实现1.硬件电路设计方案从硬件电路设计的目标出发,我们尽量考虑到可靠、高效、简洁的原则,在整个系统设计过程中严格按照规范进行,做好各部分模块设计最优。简洁是指在满足了可靠、高效的要求后,为了尽量在器件允许的范围内使电路设计导线无交叉,应使电路设计尽量简洁,尽量减少元器件使用数量,缩小电路板面积,使电路部分重量轻。在焊接电路板时由于从机的数码管管脚排布无规律,使得导线不能直接的焊接,我们尽量合理设计元件排列和电路走线,使本系统达到设计要求。2.硬件电路的实现整个双机通信系统以STC89C52单片机为主控制器,由数码管为核心的数据显示模块、以及单片机最小系统构成。3.以89C52为核心的单片机最小系统89C52单片机的最小系统采用内部时钟方式:以XTAL1和XTAL2引脚外接晶振,构成了自激振荡器并在单片机内部产生时钟脉冲信号,然后给晶振的每个脚分别外接一个30PF的电容,以此使晶振快速起振并且达到约12MHZ的稳定频率。而在单片机的RST脚接上按键开关以及适当的电阻、电容便构成按键与断电两用的复位电路。具体电路如图3.2.1-1所示:双机通信系统设计5/13图2单片机最小系统4.数码管显示模块设计中,我们使用的是共阳的两位一体数码管并使用P2口控制数码管段选信号,P1口选取两位为位选信号控制端。拿到数码管后,我们借助万用表进行测试,最终确定为共阳型数码管,进一步测试便得出了该数码管对应的管脚分布图。5.设计实物图最终实物如下图3所示。图3双机通信系统设计实物图双机通信系统设计6/13四、软件系统实现1.Proteus仿真图图4双机通信系统的proteus仿真图2.软件实现方案分析串行通信分为查询方式和中断方式。编程中,对于从机我们拟定采用中断接收和查询发送方式,原因在于程序开销无异。中断方式使得从机时刻处于准备接收状态,接收后判断范围,显示,再回送。而对于主机,工作流程分析如下:得到按键允许,开始查询发送,查询中等待应答即中断接收,中断后得到应答,使得LED指示灯闪烁,如此往复。在主机编程中,我们增加了置位取数标志的编程思路,即通过查询取数标志实现在主函数回送应答并执行相应服务程序,如此一来,很好的避免了中断程序的冗长,提高了程序实现的效率。串行通信程序设计包括:1)初始化程序:对特殊功能寄存器SCON和PCON的设置,来选择串行口的工作方式,设置通信波特率。由于设计采用了中断方式,则还要对中断系统进行设置;2)发送数据的程序:51单片机串口发送数据的条件是串行口已准备好,此时标志位TI状态为“1”,则需将待发数据传送到发送数据缓冲区SBUF,即启动一次双机通信系统设计7/13发送;3)接收数据的程序:51单片机串行口接收数据的条件是SCON中的RI置“1”,表明串行口已收到一个字节数据,此时即可置位取数标志;4)通信控制程序:用来控制发送和接收的进行。3.主程序#includereg52.h#defineucharunsignedchar#defineuintunsignedintsbitDIG1=P1^0;//位选信号控制sbitDIG2=P1^1;sbitLED=P1^3;//LED控制端ucharch,i=0;uintr,k;ucharge,sh;ucharconstNUM[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};voiddelay_ms(ucharms);voidinitModule(void);voidsendOneChar(ucharch);voidsendOneChar(ucharch){ES=0;SBUF=ch;while(!TI);//判断发送中断位TI是否为1TI=0;ES=1;}voidinitModule(){TMOD=0x20;//定义定时器T1工作方式2TH1=0xfd;//波特率9600b/sTL1=0xfd;SCON=0x50;//串口工作方式1,允许串口接收位REN=1DIG1=0;//赋初值DIG2=0;LED=1;}voiddelay_ms(ucharms)//定义延时程序双机通信系统设计8/13{uchari,j;for(i=0;ims;i++){for(j=0;j200;j++);for(j=0;j102;j++);}}voidmain(){initModule();EX0=1;IT0=1;ES=1;EA=1;TR1=1;P2=NUM[0];while(1){}}voidbutton()interrupt0//发送程序{ucharnum=0;delay_ms(20);if(INT0==0)delay_ms(14);if(INT0==0){LED=0;delay_ms(400);LED=1;i++;}sh=i/10;ge=i%10;while(num15)//数码管显示{for(r=5;r0;r--)双机通信系统设计9/13{DIG1=1;P2=NUM[sh];delay_ms(5);DIG1=0;DIG2=1;P2=NUM[ge];delay_ms(5);DIG2=0;}num++;}sendOneChar(i);}voidread()interrupt4//接收程序{ucharnum=0;RI=0;LED=0;delay_ms(400);LED=1;sh=SBUF/10;ge=SBUF%10;while(num15){for(k=5;k0;k--){DIG1=1;P2=NUM[sh];delay_ms(5);DIG1=0;DIG2=1;P2=NUM[ge];delay_ms(5);DIG2=0;//k--;}num++;}}双机通信系统设计10/13五、总结1.电路改进为了保证数码管显示亮度,我们可以考虑增加必要的数码管驱动电路。假如不驱动的话,单片机的单低电平仍然可以控制数码管的亮灭,但这时的数码的亮度会比较暗,并且扫描频率很高,仍然有微小的闪动现象.因为单片机的输出的电流并身就很弱。在实际情况允许时,增加必要的电平转化芯片来连接两个单片机,则能够适应更远距离的数据通讯。2.心得体会本次实训增强了我查阅资料的方法技巧,更是大大的提高了我们自学的能力,同时也增强了我们的动手能力。贺亚鹏:我很清楚这个实验的目的,表面上我们最终仅仅只是实现了设计要求的基本功能,但我觉得,这次课程设计更加深刻的意义是——从这样一个最基本,简单的实验中,从这样一个完整的过程中我了解一种系统设计的流程,甚至说是一种思路,思维。从最初拿到题目,分析设计要求以及实现的初步思路,然后去查阅资料进行更加具体的设计这次实验无疑要求我们团队协作,互相配合并且整体上比较全面的统筹设计。于是,初步规划后,我们开始将系统要实现功能的各个模块单独开来用PROTEUS仿真,并最终将各个模块组合后整体调试。整个过程中我们在仿真上花费了较长时间,因为知道仿真成功是实现真正硬件电路的基础,仿真是从根本上检验设计者的设计逻辑以及思路的,很好的仿真才
本文标题:双机通信课程设计
链接地址:https://www.777doc.com/doc-2757911 .html