欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    基于单片机的双机通信程序设计.docx

    • 资源ID:13979509       资源大小:1.01MB        全文页数:19页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于单片机的双机通信程序设计.docx

    1、基于单片机的双机通信程序设计前言单片机的通信接口是各台仪表之间或仪表与计算机之间进行信息交换和传输的联络装置。主要有五种类型,串行通信接口、并行通信接口、USB接口、现场总线接口以及以太网接口。串行通讯是单片机的一个重要应用。本设计就是利用两块单片机来完成一个系统,实现单片机之间的串行通讯。随着计算机的不断普及,在我们的周围可能会同时出现多台微型计算机,而且这些计算机的牌号,后型号不同,而且有的格式不兼容。于是利用单片机串行口实现不同计算机之间的相互通信,以达到信息或程序的共享是非常有用的。从智能家用电器到工业上的控制系统都采用了上位机与下位机基于串行通信的主从工作方式,这样就充分利用了微机分

    2、析处理能力强、速度快的特点及下位机(单片机)面向控制、使用灵活方便的优势。利用多机通讯构成的分布式系统逐渐普及。本实验就点对点的双机通信进行训练。学习串口的工作方式,初始化编程,和单片机与单片机点对点通信的编程方法以及硬件电路的设计方法。1.总体设计方案1.1 串口通信的设计原理 复位电路 复位电路 单片机 单片机 电源电路 电源电路 时钟电路 时钟电路 按键输入 1位LED数码管 显示电路 图1 串口通信的设计原理框图本次设计用于两片89S51,PC机的串行口采用的是标准的RS232接口,单片机的串行口电平是FTL电平,而TTL电平特性与RS232的电气特性不匹配,因此为了使单片机的串行口能

    3、与RS232接口通信,必须将串行口的输入/输出电平进行转换。通常用MAX232芯片来完成电平转换。单片机的发送方的数据由串行口TXD段输出,经过电平转换芯片MAX232将TTL电平转换为RS232电平输出,经过传输线将信号传送到接收端。接收方也使用MAX232芯片进行电平转换后,信号到达接收方串行口的接收端。接收方接收后,在数码管上显示接收的信息,实现串口通讯数据的发送和接收,该系统可采用max232进行串口通讯数据传送。可用LED显示发送的相应据。1.2 数据传输方案比较与选折在串行通信中,数据是在两个站之间传送的。按照数据传送方向,串行通信可采用三种方案。方案一:单工制式单工制式是指甲乙双

    4、方通信只能单向传送数据。 图2 单工制式方案二:半双工制式 半双工制式是指通信双方都具有发送器和接收器,双方既可发送也可接收,但接收和发送不能同时进行,即发送时就不能接收,接收时就不能发送。 图3 半双工制式方案三:全双工制式全双工制式是指通信双方均设有发送器和接收器,并且将信道划分为发送信道和接收信道,两端数据允许同时收发,因此通信效率比前两种高。图4 全双工制式因此,本文选择方案三,全双工制式来实现数据传送。1.3 控制部分的电路由于单片机集成了运算器电路、控制电路、存储器、中断系统、定时器/计数器以及输入/输出口电路等,所以用单片机设计控制电路省去了很多分立元器件。由于单片机是可编程芯片

    5、,并且它可以运用C语言编写,对于一些复杂的计算功能,可以调用C语言库函数,使编写程序变得非常简单。且经过上学期对单片机课程的学习,我们对单片机的应用比较熟悉,运用灵活,所以用单片机来实现本次课程设计。2.硬件系统设计本设计选用以89S51单片机为主控单元,显示部分采用8段LED数码管动态显示。2.1 时钟电路时钟电路用于产生单片机工作所需要的时钟信号,单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。在89S51芯片内部有一个高增益反相放大器,其输入端为芯片引脚X1,输出端为引脚X2,在芯片的外部跨接晶体振荡器和微调电容,形成反

    6、馈电路,就构成了一个稳定的自激振荡器。此电路采用12MHz的石英晶体。时钟电路如下图:图5 时钟电路2.2 复位电路复位是单片机的初始化操作,进入系统的正常初始化之外,当由于程序运行出错或操作错误是系统处于死锁状态时,为摆脱困境,也需要按复位键以重新启动。RST引脚是单片机复位信号的输入端,复位信号是高电平有效,其有效时间应持续24个振荡周期(即2个机器周期)以上,若使用频率为12MHz的晶振,则复位信号持续时间应超过4 s才能完成复位操作。复位操作有上电自动复位和按键手动复位两种方式。上电自动复位是通过外部复位电路的电容充电来实现的。按键电平复位是通过使复位端经电阻与Vcc电源接通而实现的。

    7、在本设计中采用了按键电平方式如下图:图6 按键电平的连接方式2.3 单片机串行通信功能51单片机的串行接口是一个全双工的接口,它可以作为通用异步接受和发送器用,也可以作为同步移位寄存器用。51单片机串行接口的结构如下图所示:图7 单片机串行接口的结构(1)数据缓冲器(SBUFF)接受或发送的数据都要先送到SBUF缓存。有两个,一个缓存,另一个接受,用同一直接地址99H,发送时用指令将数据送到SBUF即可启动发送;接收时用指令将SBUF中接收到的数据取出。(2)串行控制寄存器(SCON)SM0,SM1:串行接口工作方式选择位,串行接口工作方式可有以下四种工作方式: 表1 工作方式SM0SM1工作

    8、方式功能波特率0008位同步移位寄存器(用于I/O扩展)fORC/1201110位异步串行通信(UART)可变(T1溢出率*2SMOD/32)10211位异步串行通信(UART)fORC/64或fORC/3211311位异步串行通信(UART)可变(T1溢出率*2SMOD/32)定时器TI溢出率=(fosc/12)*(1/(2k-初值)) 式中T1计数率= fORC/12,(2k-初值)为生溢产出所需机器周期数,K为定时器位数,与定时器设定工作方式有关:方式0时 K=13;方式1时 K=16;方式2时 K=8。SM2:多机通信控制位。主要用于方式2,3.当SM2=1时可以利用收到的RB8来控制

    9、是否激活RI,当SM2=0时均可以将数据送入缓存器,并激活RI。REN:接收允许控制位。软件置1允许接收;软件置0禁止接收。TB8:方式2或3时,TB8为要发送的第9位数据,根据需要由软件置1或清0。RB8:在方式2或3时,RB8位接收到的第9位数据,使从机根据这一位来判断主机发送的时呼叫地址还是要传送的数据。TI:发送中断标志。发送完一帧数据后由硬件自动置位,并申请中断。必须要软件清零后才能继续发送。RI:接收中断标志。接收完一帧数据后由硬件自动置位,并申请中断。必须要软件清零后才能继续接收。(3)输入移位寄存器接收的数据先串行进入输入移位寄存器,8位数据全移入后,再并行送入接收SBUF中。

    10、(4)波特率发生器波特率发生器用来控制串行通信的数据传输速率的,51系列单片机用定时器T1作为波特率发生器,T1设置在定时方式。(5)电源寄存控制器(PCON)其最高位为SMOD即波特率倍增位,当SMOD=1时波特率提高一倍,复位时,SMOD=0。2.4 MAX232芯片电平转换芯片MAX232专用于进行将TTL电平转换为RS232电平的芯片,MAX232内部有泵电源,能将+5V电源电压在芯片内提高到RS232电平所需的+10V或者-10V电平。引脚介绍:第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。第二

    11、部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。第三部分是供电。15脚GND、16脚VCC(+5v)。图8 MAX232芯片2.5整体连接原理图P1.7P1.0口分别接DP,G,F,E,D,C,B,A,其整体连接图如下:图9 整体连接原理图3.软件设计3.1 串行通信软件设计软件部分,通过通信协议进行发送接收,主机先送AAH给从机,当从机接收到AAH后,向主机回答BBH

    12、。主机收到BBH后就把数码表TAB16中的10个数据送给从机,并发送检验和。从机收到16个数据并计算接收到数据的检验和,与主机发送来的检验和进行比较,若检验和相同则发送00H给主机;否则发送FFH给主机,重新接受。从机收到16个正确数据后送到一个数码管显示。3.2 程序流程图(1)发送端图10 发送端程序流程图串行口工作于方式1,用定时器1产生9600bit/s的波特率,工作于方式2,即TMOD=0x20。功能:将本机ROM中数码表TAB16中的16个数发送到从机,并保存在从机内部ROM中,从机收到这16个数据后送到一个数码管循环显示。通信协议:主机首先发送连络信号(AAH),从机接收到之后返

    13、回一个连络信号(BBH)表示从机已准备好接收。(2)接收端通信过程使用校验和校验。从机接收到16个数据后,进行校验和检查,若数据没有错误,则返回00H,否则返回FFH。主机发送一个数据后,等待从机返回数据;若为00H,则继续发送下一个数据,若为FFH,则重新发送数据。图11 接收端程序流程图3.3 LED显示原理LED多数情况用于显示数字,对于十六进制的,要将0F的数字用7段显示,必须将数字转换为LED对应七段码的信息,比如,要显示“0”,就是让a、b、c、d、e和f段发光,显示“1”,让b和c段发光,等等如表所示。然后根据LED是共阴极还是共阳极接法确定LED各输入端应接逻辑1还是逻辑0,我

    14、选用的是共阴接法,要显示“0” 时,a、b、c、d、e和f段就要输入逻辑1,即其段码为3F,通过从机的P1口将编码输出给LED。4.系统调试与仿真结果4.1 软件调试 系统软件设计利用Keil进行C语言编写。在系统的软件设计中采用了模块化设计,将系统的各部分功能编写成子模块的形式,这样增强了系统软件的可读性和可移植性。实验的程序通过Keil软件编译,打开Keil软件,首先,建立工程文件,然后新建一文档,输入自己编写的程序,保存为.C文件。然后再单击Add Files to Group Source Group1。然后勾选生成.HEX文件,最后点击编译。图12 编译输出结果此过程是在Keil软件

    15、中编写双机通信的C语言程序,通过Keil软件验证程序的对错与否,在此基础上来改正,直至程序编写成功,并由此软件生成HEX文件,可通过此文件调试开发板,验证所做的双机通信是否成功。4.2 仿真结果通过Proteus进行仿真,将所生成的“.HEX”文件加载到已绘制好的Proteus原理图中,使Proteus与Keil真正连接起来,实现联合调试。调试结果如图所示:可以看到,接收端已将接受到的数据完整的显示了出来。按下“开始”后,数码管开始工作,仿真结果如附录所示。5.设计总结本次课程设计实现的是单片机双机串行通信的功能。在进行设计的初期,先查询了书本知识,了解了相关的原理之后,先进行了自发自收通信功

    16、能的设计,由于设计电路比较简单,而且程序也比较好懂,所以在原理方面没有遇到什么问题,主要的问题就是熟悉两个软件KEIL和PROTEUS的使用。但是在后来调试实物的时候,由于单片机整块板子上面有许多可以利用的电路,所以为了方便,修改了一些程序,把输出显示接在了P0口,因为P0口与流水灯相连接,利用流水灯来完成相关的显示,刚开始的时候仿真总是不出来,后来才发现P0口没有自带的上拉电阻,所以在P0口加了上拉电阻之后,仿真开始正常进行。在设计双机串行通信的功能时,由于根据题目的要求甲机发送而乙机接收,所以就选择做了单工通信的功能。对于显示电路来说,由于传送的是两位数据,所以选用了两个数码管进行显示。程

    17、序编程方面,刚开始在KEIL中进行编程生成.HEX文件时,总是生成不了,后来经过查询资料得知有可能是我装的软件不是破解版的,当进行短程序编程时可以正常进行,但是当程序比较长时,就不能生成.HEX文件。还有就是程序运行正常之后,数码管的显示跳得太快了,根本无法捕捉到所有数据的显示,刚开始还比较迷茫,不知道该从哪个地方开始调,后来经过同学的帮忙,修改了单片机中的频率之后,可以清楚地看到接收的每一个数据。经过本次课程设计,我知道了团队的力量,一个人是完成不了这么多的。我们不仅掌握了双机串行通信的相关原理和实现方式,还深化了对汇编语言中断程序设计的了解。其实,这整个课程设计不仅需要个人知识的储备,还需

    18、要在不断的实践中发现自己存在的不足。同时,与同学的交流不仅能让自己进步,有时候还能点醒自己在哪些方面做得不对,哪些方面需要改正。从这种实践课程我学到了从书本上学不到的知识,提高了我的实践能力和解决问题的能力。6.参考文献1 谭浩强C语言程序设计M清华大学出版社,1999.12.125-1422 杨恢先,黄辉先单片机原理与应用M人民邮电出版,2009.7.234-2563 朱定华单片机原理与接口技术M电子工业出版社,2001.4.276-284 4 王威HCS12微控制器原理及应用M北京航空航天大学出版社,2007.10.167-179 5 龚运新单片机C语言开发技术M北京清华大学出版社,200

    19、6.10.145-163 6 胡洪波单片机原理与应用实验教程M湘潭大学出版社,2009.7.68-837 汪道辉单片机系统设计与实践M电子工业出版社,2006.5.89-104.116-1358 李明,李君君单片机原理与接口技术M大连理工大学出版,2006.5.89-104.116-135附录附录一:元件清单元件名称型号数量单片机AT89C512电平转换芯片Max2322数码管八段LED1电阻RES4晶振CRYSTAL2电容CAP12附录二:源程序1. 主机发送程序#include /头文件#define uchar unsigned char /定义数据类型void init(); /定义子

    20、程序void send();ucharTAB16 = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; /定义数码表uchar i,sum; /定义变量int j;main() /主程序 init(); send(); void init(void) /程序初始化 EA=1; /开CPU中断 ES=1; /允许串行口中断 TMOD=0x20; /设定时器T1为方式2 TH1=0xfd; /赋初值 TL1=0xfd; PCON=0x00; /令SMOD=0波特率不倍增 SCON=0x5

    21、0; /串行口为方式1 TR1=1; /启动T1 void send(void) /发送子程序do SBUF=0xaa; /主机送AAH给从机 while(!TI); /等待一帧发送结束 TI=0; /发送完后清零 while(!RI); /等待一帧接收结束 RI=0; /接收完后清零 while(SBUF0xbb)!=0); /等待从机回答,返回BBH后继续do sum=0; /清校验和 for(i=0;i=15;i+) SBUF=TABi; /主机发送数据 sum+=TABi; /求检验和 while(!TI); TI=0; SBUF=sum; /发送校验和 while(!TI); TI=

    22、0; while(!RI); RI=0; while(SBUF!=0); /等待2. 从机接收程序#include /头文件#define uchar unsigned char /定义数据类型#define uint unsigned intvoid delay(int ); /定义子程序void receive(void) ;void init(void);uchar i,sum;int j;ucharTAB16 = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71; /定义数码表

    23、void main() /主程序 init(); receive();void init(void) /程序初始化 EA=1; ES=1; TMOD=0x20; TH1=0xfd; TL1=0xfd; PCON=0x00; SCON=0x50; TR1=1; void delay(int x) /延时子程序 int i,j; for(i=0;ix;i+) for(j=1;j=150;j+ );void receive(void) uchar TABS16; do while(!RI);RI=0; while(SBUF0xaa)!=0); /等待主机发送AAHSBUF=0xbb; /从机收到BB

    24、H后向主机回复BBH while(!TI);TI=0;while(1) sum=0;for(i=0;i=15;i+) while(!RI);RI=0;TABSi=SBUF; /接收数据保存sum+=TABSi; /求接收校验和 while(!RI);RI=0; if(SBUFsum)=0) /判断发送与接收的校验和是否相等 SBUF=0x00; /校验和相等发送00H给主机 while(!TI); TI=0; break; /跳出接收循环 else SBUF=0xff; /校验和不等,发送FFH给主机 while(!TI); TI=0; /发送成功,清零,进入下一次接收循环 while(1) /显示输出 for(i=0;i=15;i+) P1=TABSi; delay(500);附录三:原理图附录四:仿真图


    注意事项

    本文(基于单片机的双机通信程序设计.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


    收起
    展开