课程设计(论文)-基于51单片机的串口通信设计与实现.doc_第1页
课程设计(论文)-基于51单片机的串口通信设计与实现.doc_第2页
免费预览已结束,剩余21页可下载查看

下载本文档

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

文档简介

桂林电子科技大学课程设计(论文)报告用纸 第22页 共14页 课程设计(论文)说明书题 目: 基于51单片机的串 口通信设计与实现 院 (系): 信息与通信学院 专 业: 通信工程 学生姓名: 学 号: 指导教师: 职 称: 2011年12月12日摘 要目前,单片机在双机通信领域应用很广。但研究最多的是上位机与下位机的通信及多单片机构成的主从式多机通信系统。本文重点研究了多单片机的平权式多机通信,使各单片机有相同的权限。本文从平权式多机通信协议入手,首先设计了具体平权式多机通信协议;主机通信用按键控制,模拟实际应用中的触发信号输入。对于1号单片机,还可通过液晶实时显示工作状态,初始为主机。在不需置其他单片机为主机的情形下,本多机通信系统可以作为主从式多机通信系统。从机通信模式通过串口中断触发启动,通信结束即恢复之前的从机状态。通信过程中,主机先发送寻址的从机号,待从机响应后开始通信。通信结束后,主机发送自己的主机号,告知从机。然后从机发给主机校验字节数据,主机检验错误,检验无误后,作出响应,1号单片机液晶会显示,2号和3号单片机收发数据无误后会使led指示灯亮起。其外,本文研究了可切换双向接口的实现方法。通过用单片机的一个引脚控制单片机的串口的连接方式,使其工作在主机模式或从机模式。本研究已经仿真通过,真实可行。具有一定的检错能力,串行通信的比特率是9600bit/s,通信速度较快,且可靠性高。本研究通过硬件电路解决了通信过程中多单片机争用主机权的问题。关键词:单片机;双机通信;平权;at89s52目 录引言31 单片机多机通信实现31.1 本课题的研究内容32 单片机多机通信理论及方案选择 42.1 单片机串口通信42.1.1 单片机串口介绍42.1.2 单片机串口控制寄存器42.1.3 单片机串口的四种工作方式52.2 单片机多机通信方案选择62.3 微处理器的选择62.4 液晶lcd1602介绍73 单片机多机通信协议设计74 硬件电路设计 84.1 单片机最小系统的设计84.2 键盘电路设计94.3液晶显示电路设计95 软件设计95.1单片机的程序设计95.2 键盘程序设计106 结论11致谢12参考文献13附录一:仿真电路14附录二:原理图14引言目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能ic卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。 单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域随着计算机技术的发展及工业自动化水平的提高, 在许多场合采用单机控制已不能满足现场要求,因而必须采用多机控制的形式,而多机控制主要通过多个单片机之间的串行通信实现。串行通信作为单片机之间常用的通信方法之一, 由于其通信编程灵活、硬件简洁并遵循统一的标准, 因此其在工业控制领域得到了广泛的应用。构成较大规模的检测、控制系统,经常要采用多个单片机,组成可以通信的多机系统。mcs一51系列单片机为实现多机通信联网设计了方便的串行通信接口功能。将多个mcs一51单片机组成串行总线形式的相互通道,通过写单片机的串行控制方式寄存器,将串行口置成方式2或方式3,就可以实现主机与分机之间的串行通信。这种多机系统结构简单,应用广泛,但它只能实现由主机呼叫分机,然后实现主机与分机之间的全双工串行通信。我们在监控系统中要求既有主机与分机主动通信,又有分机与主机主动通信,这种结构的多机系统就无法满足要求。多机协同工作已是单片机发展的一个重要趋势,目前单片机多机通信的主要方式仍然是主从式多机通信系统。单片机多机通信的目的是实现分布式处理系统,单片机多机通信的方式有很多种,应用前景广阔,非常具有研究意义!1单片机多机通信实现1.1 本课题的研究内容本文在研究传统的多机通信系统的基础上,设计了一种基于mcs51系列单片机at89s52 的多机通信系统。初始时,1号单片机为主机。主机通过串口向从单片机发送指定格式的数据,从单片机收数据并作出响应,主机通过液晶屏显示通信信息,从机通过led显示通信状态。主机通信结束即转为从机,其他单片机可置为主机,获得总线控制权。1号单片机通过矩阵键盘控制通信过程与显示,2与3号单片机通过独立按键控制通信状态与主从机切换。在此多机通信系统中,各个单片机具有平等的权限。仅在初始时,1号单片机被默认置为主机,若不需使2号与3号单片机变成主机,则此通信系统可以作为主从式多机通信系统。任何时刻,系统只有一片单片机作为主机,其他均为从机。主机发送的信息可以传送到指定从机,各从机之间也不能直接通信。主机发起通信,从机接收到自己的单片机号后,开始与主机通信。2 单片机多机通信理论及方案选择 2.1 单片机串口通信2.1.1 单片机串口介绍at89s52单片机内部含有一个可编程全双工串行通信接口,具有uart的全部功能。该接口电路不仅能同时进行数据的发送和接收,也可作为一个同步移位寄存器使用。 在进行异步通信时,数据的发送和接收分别在各自的时钟(tclk和rclk)控制下进行的,但都必须与字符位数的波特率保持一致。mcs-51串行口的发送和接收时钟可由两种方式产生,一种是由主机频率fosc经分频后产生,另一种方式是由内部定时器t1或t2的溢出率经16分频后提供。串行口的发送过程由一条写发送缓冲器的指令把数据(字符)写入串行口的发送缓冲器sbuf(发)中,再由硬件电路自动在字符的始、末加上起始位(低电平)、停止位(高电平)及其它控制位(如奇偶位等),然后在移位脉冲shift的控制下,低位在前,高位在后,从txd端(方式0除外)一位位地向外发送。串行口的接收与否受制于允许接收位ren的状态,当ren被软件置“1”后,允许接收器接收。接收端rxd一位位地接收数据,直到收到一个完整的字符数据后,控制电路进行最后一次移位,自动去掉启始位,使接收中断标志ri置“1”,并向cpu申请中断。ti和ri是由硬件置位的,但需要用软件复位。2.1.2 单片机串口控制寄存器a.sbuf是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据。两个缓冲器只用一个字节地址99h,可通过指令对sbuf的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作。串行口对外有两条独立的收发信号线rxd(p3.0)、txd(p3.1),因此可以同时发送、接收数据,实现全双工。b.scon寄存器用来控制串行口的工作方式和状态,可按位寻址,其字节地址为98h。它用于定义串行口的工作方式及实施接收和发送控制。字节地址为98h,其各位定义如表21。表21 scon寄存器的各位功能定义d7d6d5d4d3d2d1d0sm0sm1sm2rentb8rb8tiri 表22 串行口工作方式选择位定义sm0、sm1 工作方式 功能描述 波特率 0 0 方式0 8位移位寄存器 fosc/12 0 1 方式1 10位uart 可变 1 0 方式2 11位uart fosc/64或fosc/32 1 1 方式3 11位uart 可变2.1.3 单片机串口的四种工作方式方式0:同步移位寄存器方式,其波特率是固定为振荡频率fosc的1/12。在这种工作方式下,发送和接收串行数据都通过rxd(p3.0)进行,从txd(p3.1)输出移位脉冲,控制外部的移位寄存器移位。1帧信息为8位,没有起始位,停止位。方式1:8位uart,1帧信息为10位,其中一位起始位“0”、八位数据位(先低位后高位)和一个停止位“1”,波特率可变,根据定时器1的溢出率计算。方式2:9位uart,1帧信息为11位,其中一位起始位“0”、八位数据位(先低位后高位),一位控制位(第九位)和一个停止位“1”。波特率为振荡频率的1/64或1/32方式3:9位uart,帧信息为11位,其中一位起始位“0”、八位数据位(先低位后高位),一位控制位(第九位)和一个停止位“1”。波特率可变,根据定时器1的溢出率计算。附加的第9位数据为scon中的tb8的值,它由软件置位或清零,可作为多机通信中地址/数据信息的标志位,也可作为数据的奇偶校验位。单片机的串行通信传输方式有三种:单工制式、半双工制式和全双工制式。2.2 单片机多机通信方案选择根据需要,各片单片机有相等的权限,每块单片机都可设置为主机或从机,因此单片机的串口应具有双向可选择性。采用两个同相三态门加上一个反相器即可构成这样的接口,并由单片机的一根引脚控制单片机串口的连接方式。发送数据区可存放1b48b的数据,以空字符0作为发送数据结束标志。接收数据时以空字符作为接收有效数据结束标志。通信结束时,从机发回收发长度作为校验。2.3 微处理器的选择本系统对微处理器要求不是太高,速度不要求太高,但代码较长,因此要求微处理器应有较大的程序存储空间,最好用flash rom。通信的发送缓冲区与接收缓冲区均从ram中分配,为了能传送更多的数据,要求要有较大的ram。此外,处理器还应有一个全双工的串行口。综合考虑以上各种因素,选用mcs-51系列的单片机at89s52。 at89s52 具有以下标准功能:8k 字节 flash,256 字节 ram,32 位 i/o 口线,看门狗定时器,2 个数据指针,三个 16 位定时器/计数器,一个 6 向量 2 级中断结构,全双工串行口,片内晶振及时钟电路。另外,at89s52 可降至 0hz 静态逻辑操作,支持 2 种软件可选择节电模式。空闲模式下,cpu停止工作,允许 ram、定时器/计数器、串口、中断继续工作。掉电保护方式下,ram 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。其引脚结构如下图: 图21 at89s52的引脚结构2.4 液晶lcd1602介绍市面上字符液晶绝大多数是基于hd44780液晶芯片的,控制原理是完全相同的,因此hd44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。字符型lcd通常有14条引脚线或16条引脚线的lcd,多出来的2条线是背光电源线vcc(15脚)和地线gnd(16脚),其控制原理与14脚的lcd完全一样,定义如下表所示:3 单片机多机通信协议设计 at89s52的内部ram只有256字节,不能存储太多的数据包;其次,单片机的外接晶振选用11.0592mhz,片内cpu的速度不理想,控制多个时钟,cpu资源消耗太多,会大大降低系统性能。因此,取消了停止等待协议有发送窗口这一机制,而采用发送一个数据包就等待当前数据包的确认包,超时再发。主机通信协议如下:(1)主机的sm2=0;发送从机地址。(2)若从机无应答则等待。若有应答,地址若不符,则发从机复位命令,返回(1);若有应答且地址相符则继续,准备发送命令。(3)发送通信方向控制命令(0x00发或0x01收)。(4)若从机无应答则等待;若从机有应答但状态字不正确,则令从机复位,返回(1);若从机有应答且状态字正确,则继续。(5)将命令分类,若为0x00则准备发送转(6),若为0x01则准备接收转(7)。(6)判断状态字,若从机接收但从机未准备就绪,则令从机复位并转到(1);若从机接收且从机准备就绪,则发送数据块。转到(8);(7)判断状态字,若为从机发送但从机未准备就绪,则令从机复位并转到(1);若为从机发送且从机发送就绪,则接收数据块。转到(8)。(8)发送主机号,然后接收从机发来的收发数据长度。发回响应。(9)置为从机使sm2=1,返回等待接收地址。从机通信协议如下:(1)置sm2=1,接收主机发来的地址,若不符合本机地址,则返回;若符合本机地址,则回送本机地址作为响应。(2)关串口中断,置sm2=0准备接收命令。接收到主机发来的命令,先判断,若不是合法命令则置sm2=1并返回;若为合法命令则继续。(3)将命令分类,若为0x00则发送本机接收就绪信号转(5),若为0x01则发送本机发送就绪信号转(4)。(4)发送数据,等待发送结束,转到(6)。(5)接收数据,等待接收完成。(6)接收主机号,发送收发长度,等待主机的响应。(7)收到主机发来的响应后,做些处理后,返回置sm2=1,开串口中断。 err0时为合法命令,err1时为非法命令;trdy0时表示从机发送未就绪,trdy1表示从机发送就绪。rrdy0表示从机接收未就绪;rrdy=1表示从机接收已经就绪。4 硬件电路设计 4.1 单片机最小系统的设计本系统共用三块单片机,每块单片机均选用at89s52,最小系统也都一样。由于三块单片机的主要任务是通信,为了得到准确的波特率,采用振荡频率为11.0592mhz的晶振,再接两个30pf的瓷片电容即可构成单片机的时钟电路。图41 单片机最小系统电路复位电路也可以换成看门狗电路实现,可使单片机可靠的复位。为了简化电路设计,本系统采用简单方法,可使单片机上电复位,此外可以通过按键手动复位。单片机上电即可复位,r1与c3的充电时间大于两倍的机器周期,使rst引脚有足够长的时间保存高电平,使单片机可靠的复位。正常工作时,按下按键sw1就可以使单片机复位。p2口接81的矩阵键盘,共8个按键,分别为二进制数。4.2 键盘电路设计。图42 矩阵键盘电路4.3液晶显示电路设计排阻具有九个引脚,一个公共端,另外八个脚分别接到需要接上拉电阻的单片机的p0口。排阻相当于8个大小均为10k的电阻,在电路中主要其电平转化作用,通过的电流很小,每只电阻的功耗也很小。如接5v电源,每只电阻的电流约为0.5ma,很小。lcd1602的符号与液晶模块对应,共16个引脚,采用接插件形式,各位的名称根据其定义而定。5 软件设计 本系统软件部分包括通信模块、键盘模块、液晶显示模块、中断服务和led显示等。3块单片机的程序均用c语言编写,采用keil c51 uvesion3作为调试工具。用proteus 7.1作为仿真工具,与keil c51 uvesion3联合调试,最终达到了设计要求,仿真无误。5.1单片机的程序设计 图51 单片机的系统框图键盘模块包括矩阵键盘按键扫描、获取键值与按键处理。按键处理是根据键值进行散转,又有多个函数用来实现不同的功能。通信子程序包括主机模式通信与从机模式通信。初始化模块包括定时器、串口、发送数据区与lcd初始化。其外还有lcd显示模块,该显示模块又包括多个液晶显示函数,有的是通用的函数,有的用于特殊的用途。5.2 键盘程序设计1号单片机的按键采用列式形式,81的行列矩阵,共8个按键,可以完成多种控制功能。按键处理又包括实现各种功能的函数。键盘控制流程如下: 图52 按键控制流程图按键扫描采用行扫描法,先输出全零行,再读看是否有按键按下,如有按键,则先消抖动,然后再次确认是否有按键,如果确有按键,再逐行置低电平扫描按下的键的行列位置,最后将按键对应位置的8位二进制码;若无按键,则返回0。定时器初始化使定时器一工作在方式二,波特率设置为9600b/s,并开中断。串口初始化使串口工作在方式三,9位数据位。发送与接收数据区的开始地址被已经被指定,用指针常量表示。发送数据初始化在发送数据区存放待发送的数据串,以空字符作为结束符。全局变量初始化只需根据需要设置即可。6结论 本论文解决了双机单片机平等权限的串行通信问题,通信速度较快并具有一定的检错能力。但检错机制不够精确,难以保证很高的正确率,还需进一步完善。本文重点研究了平权式多机通信协议,协议完整可行。为了解决通信过程中,争用主机权问题,采用优先编码器为核心的主机权分配电路,该电路工作可靠问题稳定。 致谢 感谢樊孝明老师长期以来的热情帮助。樊老师为我提供了很好的设计思路,对我的设计起了很大的促进作用。同时也很感谢学校开放机房供我们用于课程设计,为我提供了一个很好的学习环境。此外,也感谢同学的热情帮助!设计初期,我在樊孝明老师的指导下,收集相关的设计资料。完成实习后,对所收集的相关资料进行加工整理,初步讨论拟定的设计方案。将拟定的方案转化为实际成果,即绘制好该方案的图纸,并参考各方面的资料,不断的修正完善设计方案。最后,完成该方案的是设计说明书。参考文献 1 吕汉兴,祁志勇.mcs51系列单片机多机通信的实现j.仪表技术,1999.32 费强,徐高晓.mcs51系列单片机多机通信功能扩充j.基础自动化,1995.63 叶佩.mcs_51单片机的多机通信方式研究j.计算技术与信息发展,2009.12.4 禹言春.单片机的多机通信j.安徽农学通报,2007.13.5 陈寿元.单片机多机串行通信的改进方案j.经验交流,2004.5.6 陈晓英,任国臣.单片机多机通信系统稳定性的研究j.单片机与嵌入式系统应用,2001.8.7 李文明,张涛,郑丽娜.基于主从多机通信控制器的设计与实现j.计算机测量与控制,2008.168 朱建清,张敏.单片机的多机控制在装置艺术中的应用j.沈阳航空工业学院学报,2009.49 杨玉军.单片机多机通信系统可靠性的研究j.河南科学,2002.6.10 林雪每,彭佳红,姚志成.单片机多机通信协议的设计j.单片机开发与应用,2006.2.11 单魏.基于at89s52的输液监控系统的设计与实现d.合肥工业大学,2009.12.12 季海军.带语音提示医用体温检测系统d.吉林大学硕士学位论文,2007.5.13 邹轶.近距离高精度超声波测距系统的设计d.大连理工大学硕士学位论文,2009.1214 孙鹏宇.家用多功能健康状态检测仪的研制d.大连理工大学硕士学位论文,2009.1215 李超.多功能低温测定器的多路温度控制系统设计d.大连理工大学硕士学位论文,2009.1216 戴仙金.51单片机及其c语言程序开发实例m.北京:清华大学出版社.2008. 17 王庆利,刘奎,袁建敏.单片机设计标准教程m.北京:北京邮电大学出版社.2008 附录一:仿真电路附录二:原理图#include /包含单片机寄存器的头文件#include /包含_nop_()函数定义的头文件/*通信*/#define key_port p2unsigned char dis_port;sbit rs = p14;sbit rw = p13;sbit e = p12;sbit bf=p07; /忙碌标志位,将bf位定义为p0.7引脚/*函数功能:延时1ms(3j+2)*i=(333+2)10=1010(微秒),可以认为是1毫秒*/void delay1ms() unsigned char i,j; for(i=0;i10;i+) for(j=0;j33;j+) ; /*函数功能:延时若干毫秒入口参数:n*/ void delay(unsigned char n) unsigned char i;for(i=0;in;i+) delay1ms(); /*函数功能:判断液晶模块的忙碌状态返回值:result。result=1,忙碌;result=0,不忙*/ unsigned char busytest(void) bit result;rs=0; /根据规定,rs为低电平,rw为高电平时,可以读状态 rw=1; e=1; /e=1,才允许读写 _nop_(); /空操作 _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 result=bf; /将忙碌标志电平赋给resulte=0; return result; /*函数功能:将模式设置指令或显示地址写入液晶模块入口参数:dictate*/void writeinstruction (unsigned char dictate) while(busytest()=1); /如果忙就等待 rs=0; /根据规定,rs和r/w同时为低电平时,可以写入指令 rw=0; e=0; /e置低电平(根据表8-6,写指令时,e为高脉冲, / 就是让e从0到1发生正跳变,所以应先置0 _nop_(); _nop_(); /空操作两个机器周期,给硬件反应时间 p0=dictate; /将数据送入p0口,即写入指令或地址 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 e=1; /e置高电平 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 e=0; /当e由高电平跳变成低电平时,液晶模块开始执行命令 /*函数功能:指定字符显示的实际地址入口参数:x*/ void writeaddress(unsigned char x) writeinstruction(x|0x80); /显示位置的确定方法规定为80h+地址码x /*函数功能:将数据(字符的标准ascii码)写入液晶模块入口参数:y(为字符常量)*/ void writedata(unsigned char y) while(busytest()=1); rs=1; /rs为高电平,rw为低电平时,可以写入数据 rw=0; e=0; /e置低电平(根据表8-6,写指令时,e为高脉冲, / 就是让e从0到1发生正跳变,所以应先置0 p0=y; /将数据送入p0口,即将数据写入液晶模块 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 e=1; /e置高电平 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 e=0; /当e由高电平跳变成低电平时,液晶模块开始执行命令 /*函数功能:对lcd的显示模式进行初始化设置*/void lcdinitiate(void) delay(15); /延时15ms,首次写指令时应给lcd一段较长的反应时间 writeinstruction(0x38); /显示模式设置:162显示,57点阵,8位数据接delay(5); /延时5mswriteinstruction(0x38);delay(5);writeinstruction(0x38);delay(5);writeinstruction(0x0c); /显示模式设置:显示开,有光标,光标闪烁delay(5);writeinstruction(0x06); /显示模式设置:光标右移,字符不移delay(5);writeinstruction(0x01); /清屏幕指令,将以前的显示内容清除delay(5); void main(void) /主函数 unsigned long c,d;/unsigned char key_port;unsigned int j;tmod=0x20; /设置为定时器1方式2 th1=

温馨提示

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

评论

0/150

提交评论