四川师范大学成都学院电子工程学院课程设计报告前言单片机的通信接口是各台仪表之间或仪表与计算机之间进行信息交换和传输的联络装置。主要有五种类型,串行通信接口、并行通信接口、USB接口、现场总线接口以及以太网接口。串行通讯是单片机的一个重要应用。本设计就是利用两块单片机来完成一个系统,实现单片机之间的串行通讯。随着计算机的不断普及,在我们的周围可能会同时出现多台微型计算机,而且这些计算机的牌号,后型号不同,而且有的格式不兼容。于是利用单片机串行口实现不同计算机之间的相互通信,以达到信息或程序的共享是非常有用的。从智能家用电器到工业上的控制系统都采用了上位机与下位机基于串行通信的主从工作方式,这样就充分利用了微机分析处理能力强、速度快的特点及下位机(单片机)面向控制、使用灵活方便的优势。利用多机通讯构成的分布式系统逐渐普及。本实验就点对点的双机通信进行训练。学习串口的工作方式,初始化编程,和单片机与单片机点对点通信的编程方法以及硬件电路的设计方法。四川师范大学成都学院电子工程学院课程设计报告11.总体设计方案1.1串口通信的设计原理复位电路复位电路单片机单片机电源电路电源电路时钟电路时钟电路按键输入1位LED数码管显示电路图1串口通信的设计原理框图本次设计用于两片89S51,PC机的串行口采用的是标准的RS232接口,单片机的串行口电平是FTL电平,而TTL电平特性与RS232的电气特性不匹配,因此为了使单片机的串行口能与RS232接口通信,必须将串行口的输入/输出电平进行转换。通常用MAX232芯片来完成电平转换。单片机的发送方的数据由串行口TXD段输出,经过电平转换芯片MAX232将TTL电平转换为RS232电平输出,经过传输线将信号传送到接收端。接收方也使用MAX232芯片进行电平转换后,信号到达接收方串行口的接收端。接收方接收后,在数码管上显示接收的信息,实现串口通讯数据的发送和接收,该系统可采用max232进行串口通讯数据传送。可用LED显示发送的相应据。1.2数据传输方案比较与选折在串行通信中,数据是在两个站之间传送的。按照数据传送方向,串行通信可采用三种方案。方案一:单工制式单工制式是指甲乙双方通信只能单向传送数据。图2单工制式方案二:半双工制式半双工制式是指通信双方都具有发送器和接收器,双方既可发送也可接收,发送器A接收器B四川师范大学成都学院电子工程学院课程设计报告2但接收和发送不能同时进行,即发送时就不能接收,接收时就不能发送。图3半双工制式方案三:全双工制式全双工制式是指通信双方均设有发送器和接收器,并且将信道划分为发送信道和接收信道,两端数据允许同时收发,因此通信效率比前两种高。图4全双工制式因此,本文选择方案三,全双工制式来实现数据传送。1.3控制部分的电路由于单片机集成了运算器电路、控制电路、存储器、中断系统、定时器/计数器以及输入/输出口电路等,所以用单片机设计控制电路省去了很多分立元器件。由于单片机是可编程芯片,并且它可以运用C语言编写,对于一些复杂的计算功能,可以调用C语言库函数,使编写程序变得非常简单。且经过上学期对单片机课程的学习,我们对单片机的应用比较熟悉,运用灵活,所以用单片机来实现本次课程设计。2.硬件系统设计本设计选用以89S51单片机为主控单元,显示部分采用8段LED数码管动态显示。2.1时钟电路时钟电路用于产生单片机工作所需要的时钟信号,单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。在89S51芯片内部有一个高增益反相放大器,其输入端为芯片引脚X1,输B端A端发送接收发送接收B端发送接收A端发送接收四川师范大学成都学院电子工程学院课程设计报告3出端为引脚X2,在芯片的外部跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡器。此电路采用12MHz的石英晶体。时钟电路如下图:图5时钟电路2.2复位电路复位是单片机的初始化操作,进入系统的正常初始化之外,当由于程序运行出错或操作错误是系统处于死锁状态时,为摆脱困境,也需要按复位键以重新启动。RST引脚是单片机复位信号的输入端,复位信号是高电平有效,其有效时间应持续24个振荡周期(即2个机器周期)以上,若使用频率为12MHz的晶振,则复位信号持续时间应超过4s才能完成复位操作。复位操作有上电自动复位和按键手动复位两种方式。上电自动复位是通过外部复位电路的电容充电来实现的。按键电平复位是通过使复位端经电阻与Vcc电源接通而实现的。在本设计中采用了按键电平方式如下图:图6按键电平的连接方式四川师范大学成都学院电子工程学院课程设计报告42.3单片机串行通信功能51单片机的串行接口是一个全双工的接口,它可以作为通用异步接受和发送器用,也可以作为同步移位寄存器用。51单片机串行接口的结构如下图所示:图7单片机串行接口的结构(1)数据缓冲器(SBUFF)接受或发送的数据都要先送到SBUF缓存。有两个,一个缓存,另一个接受,用同一直接地址99H,发送时用指令将数据送到SBUF即可启动发送;接收时用指令将SBUF中接收到的数据取出。(2)串行控制寄存器(SCON)SM0,SM1:串行接口工作方式选择位,串行接口工作方式可有以下四种工作方式:表1工作方式SM0SM1工作方式功能波特率0008位同步移位寄存器(用于I/O扩展)fORC/1201110位异步串行通信(UART)可变(T1溢出率*2SMOD/32)10211位异步串行通信(UART)fORC/64或fORC/3211311位异步串行通信(UART)可变(T1溢出率*2SMOD/32)四川师范大学成都学院电子工程学院课程设计报告5定时器TI溢出率=(fosc/12)*(1/(2^k-初值))式中T1计数率=fORC/12,(2^k-初值)为生溢产出所需机器周期数,K为定时器位数,与定时器设定工作方式有关:方式0时K=13;方式1时K=16;方式2时K=8。SM2:多机通信控制位。主要用于方式2,3.当SM2=1时可以利用收到的RB8来控制是否激活RI,当SM2=0时均可以将数据送入缓存器,并激活RI。REN:接收允许控制位。软件置1允许接收;软件置0禁止接收。TB8:方式2或3时,TB8为要发送的第9位数据,根据需要由软件置1或清0。RB8:在方式2或3时,RB8位接收到的第9位数据,使从机根据这一位来判断主机发送的时呼叫地址还是要传送的数据。TI:发送中断标志。发送完一帧数据后由硬件自动置位,并申请中断。必须要软件清零后才能继续发送。RI:接收中断标志。接收完一帧数据后由硬件自动置位,并申请中断。必须要软件清零后才能继续接收。(3)输入移位寄存器接收的数据先串行进入输入移位寄存器,8位数据全移入后,再并行送入接收SBUF中。(4)波特率发生器波特率发生器用来控制串行通信的数据传输速率的,51系列单片机用定时器T1作为波特率发生器,T1设置在定时方式。(5)电源寄存控制器(PCON)其最高位为SMOD即波特率倍增位,当SMOD=1时波特率提高一倍,复位时,SMOD=0。2.4MAX232芯片电平转换芯片MAX232专用于进行将TTL电平转换为RS232电平的芯片,MAX232内部有泵电源,能将+5V电源电压在芯片内提高到RS232电平所需的+10V或者-10V电平。引脚介绍:第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数四川师范大学成都学院电子工程学院课程设计报告6据通道。其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。第三部分是供电。15脚GND、16脚VCC(+5v)。图8MAX232芯片2.5整体连接原理图P1.7——P1.0口分别接DP,G,F,E,D,C,B,A,其整体连接图如下:图9整体连接原理图四川师范大学成都学院电子工程学院课程设计报告73.软件设计3.1串行通信软件设计软件部分,通过通信协议进行发送接收,主机先送AAH给从机,当从机接收到AAH后,向主机回答BBH。主机收到BBH后就把数码表TAB[16]中的10个数据送给从机,并发送检验和。从机收到16个数据并计算接收到数据的检验和,与主机发送来的检验和进行比较,若检验和相同则发送00H给主机;否则发送FFH给主机,重新接受。从机收到16个正确数据后送到一个数码管显示。3.2程序流程图(1)发送端图10发送端程序流程图主动发送数据,检验和输出完成清除标志位主程序开始程序初始化主机发送AAH从机是否回答BBHNN四川师范大学成都学院电子工程学院课程设计报告8串行口工作于方式1,用定时器1产生9600bit/s的波特率,工作于方式2,即TMOD=0x20。功能:将本机ROM中数码表TAB[16]中的16个数发送到从机,并保存在从机内部ROM中,从机收到这16个数据后送到一个数码管循环显示。通信协议:主机首先发送连络信号(AAH),从机接收到之后返回一个连络信号(BBH)表示从机已准备好接收。(2)接收端通信过程使用校验和校验。从机接收到16个数据后,进行校验和检查,若数据没有错误,则返回00H,否则返回FFH。主机发送一个数据后,等待从机返回数据;若为00H,则继续发送下一个数据,若为FFH,则重新发送数据。图11接收端程序流程图主程序开始程序初始化接收数据,计算检验和检验和相等?发送OOH至主机接收完成?清除标志位显示N发送FFH,并修改N四川师范大学成都学院电子工程学院课程设计报告93.3LED显示原理LED多数情况用于显示数字,对于十六进制的,要将0~F的数字用7段显示,必须将数字转换为LED对应七段码的信息,比如,要显示“0”,就是让a、b、c、d、e和f段发光,显示“1”,让b和c段发光,等等如表所示。然后根据LED是共阴极还是共阳极接法确定LED各输入端应接逻辑1还是逻辑0,我选用的是共阴接法,要显示“0”时,a、b、c、d、e和f段就要输入逻辑1,即其段码为3F,通过从机的P1口将编码输出给LED。4.系统调试与仿真结果4.1软件调试系统软件设计利用Keil进行C语言编写。在系统的软件设计中采用了模块化设计,将系统的各部分功能编写成子模块的形式,这样增强了系统软件的可读性和可移植性。实验的程序通过Keil软件编译,打开Keil软件,首先,建立工程文件,然后新建一文档,输入自己编写的程序,保存为.C文件。然后再单击AddFilestoGroupSourceGroup1。然后勾选生成.HEX文件,最后点击编译。图12编译输出结果四川师范大学成都学院电子工程学院课程设计报告10此过程是在Keil软件中编写双机通信的C语言程序,通过Keil软件验证程序的对错与否,在此基础上来改正,直至程序编写成功,并由此软件生成HEX文件,可通过此文件调试开发板,验证所做的双机通信是否成功。4.2仿真结果通过Proteus进行仿真,将所生成的“.HEX”文件加载到已绘制好的Proteus原理图中,使Proteus与Keil真正连接起来,实现联合调试。调试结果如图所示:可以看到,接收端已将接受到的数据完整的显示了出来。按下“开始”后,数码管开始工作,仿真结果如附录所示。5.设计总结本次课程设计实现的是单片机双机串行通信的功能。在进行设计的初期,先查询了书本知识,了解了相关的原理之后,先进行了自发自收通信功能的设计,由于设计电路比较简单,而且程序也比较好懂,所以在原理方面没有遇到什么问题,主要的问题就是熟悉两个软件KEIL和PROTEUS的使用。但是在后来调试实物的时候,由于单片机整块板子上面有许多可以利用的电路,所以为了方便,修改了一些程序,把输出显示接在了P0口,因为P0口与流水灯相连接,利用流水灯来完成相关的显示,刚开始的时候仿真总是