收藏 分销(赏)

基于的单片机通信系统设计样本.doc

上传人:二*** 文档编号:4514642 上传时间:2024-09-26 格式:DOC 页数:37 大小:3.21MB 下载积分:5 金币
下载 相关 举报
基于的单片机通信系统设计样本.doc_第1页
第1页 / 共37页
本文档共37页,全文阅读请下载到手机保存,查看更方便
资源描述
g 专业课程设计报告 题 目: 基于RS-485单片机通信系统设计(发送端) 姓 名: 刘张 专 业: 通信工程 班级学号: 09042218 同 组人 : 09042219 彭林 指引教师: 张小林 南昌航空大学信息工程学院 年 06 月 28 日 专业 课程设计任务书 20 11-20 12 年 第 2 学期 第 17 周- 20 周 题目 基于RS-485单片机通信系统设计(发送端) 内容及规定 1.运用RS485实现单片机双向通讯; 2.通过键盘实现从机选取、发送数据输入; 3.主机显示发送数据及从机编号。 4提高规定:通过键盘实现循环工作模式、指定从机这2种工作方式切换。 进度安排 17周:查找资料,进行系统硬件设计、软件方案设计; 18周:硬件制作、软件分模块调试; 19周:系统联调; 20周:设计成果验收,报告草稿撰写。 学生姓名:09042218 刘张 09042219 彭林 指引时间:周一、周三、周五 指引地点:E楼 610 室 任务下达 6 月 1 日 任务完毕 20 6月 30 日 考核方式 1.评阅 □  2.答辩 □ 3.实际操作□  4.其他□ 指引教师 张小林 系(部)主任 注:1、此表一组一表二份,课程设计小组组长一份;任课教师授学时自带一份备查 2、课程设计结束后与“课程设计小结”、“学生成绩单”一并交院教务存档。 摘要 串口通信是一种广泛应用于各个领域通信方式,在远距离数据传播和控制系统中,可以依照RS-485合同实现数据远距离传播。 本设计即是运用MAX485芯片实现半双工串行口通信双向通信系统。系统重要由主机控制模块、通信模块、数据输入模块和数据显示模块四个某些构成,实现了运用RS485实现单片机双向通讯,通过键盘实现从机选取、发送数据输入,主机显示发送数据及从机编号,通过键盘实现循环工作模式、指定从机这2种工作方式切换。 该系统具备使用以便、操作简朴、构造简朴、成本低、可靠性高、可扩展性强、易于维护等特点,在实际生活中有广泛应用前景。 核心字:RS-485合同、双向通信、MAX485 目录 前言..............................................................5 第一章 系统总体方案................................................6 系统总体框图设计.............................................6 系统框图..............................................6 第二章 系统详细设计及硬件设计 2.1 主机控制模块.................................................6 2.1.1 系统主芯片选取........................................6 2.1.2 复位电路...............................................7 2.1.3 时钟电路...............................................7 2.2 通信模块.....................................................8 2.2.1 通信芯片选取...........................................8 2.2.2 通信电路 ..............................................8 2. 3数据输入模块.................................................9 2.4 数据显示模块.................................................9 第三章 软件设计...................................................11 3.1 系统总流程图................................................11 3.1.1 程序流程图............................................12 第四章 硬件调试与分析.............................................16 4.1 实验调试仪器..............................................16 4.2 各个子系统模块调试........................................16 4.2.1 握手信号发送模块调试..................................16 4.2.2 接受数据与回绝接受数据模块调试........................17 4.2.3 发送数据与接受数据模块调试............................17 第五章 总结与体会................................................19 参照文献..........................................................20 附录一:总原理图..................................................20 附录二:源程序代码................................................21 前 言 在以单片机为基本数据采集和实时控制系统中,通过计算机中RS-232接口进行计算机与单片机之间命令和数据传送,就可以对生产现场进行监测和控制。由于计算机上RS-232所传送距离不超过30m,因此在远距离数据传送和控制时,可以运用MAX485接口转换芯片将RS-232合同转换成RS-485合同进行远距离传送。 RS-232是一种最初用于调制解调器、打印机及其他PC外设通讯原则,提供单端20kbps波特率,日后速率提高至1Mbps。RS-232其他技术指标涉及:标称±5V发送电平、±3V接受电平(间隔/符号)、2V共模抑制、2200pF最大电缆负载电容、300最大驱动器输出电阻、3k最小接受器(负载)阻抗、100英尺(典型值)最大电缆长度。RS-232只用于点对点通信系统,不能用于多点通信系统,所有RS-232系统都必要遵从这些限制。   RS-485是双向、半双工通信合同,容许各种驱动器和接受器挂接在总线上,其中每个驱动器都可以脱离总线。接受器输入敏捷度为±200mV,这就意味着若要辨认符号或间隔状态,接受端电压必要高于+200mV或低于-200mV。最小接受器输入阻抗为12k,驱动器输出电压为±1.5V (最小值)、±5V (最大值)。   驱动器可以驱动32个单位负载,即容许总线上并联32个12k接受器。RS-485接受器可随意组合,连接至同一总线,但要保证这些电路实际并联阻抗不高于32个单位负载(375)。   采用典型24AWG双绞线时,驱动器负载阻抗最大值为54,即32个单位负载并联2个120终端匹配电阻。RS-485已经成为POS、工业以及电信应用中最佳选取。较宽共模范畴可实现长电缆、嘈杂环境(如工厂车间)下数据传播。更高接受器输入阻抗还容许总线上挂接更多器件。 第一章 系统总体方案 系统总体框图设计 系统框图 系统框图如下: 通信主机 数据显示 通信模块 数据输入 图2-1 系统原理框图 在本系统中,通信主机是核心某些,重要完毕对数据解决、操作和运算;数据输入模块重要完毕数据输入,所有人机互换数据都从该模块中输入;数据显示模块完毕了通信双方数据显示;通信模块即完毕数据接受与发送,实现数据远距离传播。 数据从数据输入模块输入,经通信主机解决后发送给通信从机,通信从机接受到数据后显示在相应模块上。 第二章 系统详细设计及硬件设计 2.1 主机控制模块 2.1.1 系统主芯片选取 系统主芯片是本系统核心芯片,由于系统规定芯片能灵活解决所传播数据,且性能稳定,价格低廉,因而需选取一种适当芯片。   STC89C52是一种低功耗,高性能CMOS 8位单片机,器件采用高密度、非易失性存储技术制造,兼容原则MCS-51指令系统及80C51引脚构造,芯片内集成了通用8位中央解决器和ISP Flash存储单元,功能强大它为许多嵌入式控制通信系统提供了高性价比解决方案。 STC89C52具备如下特点:8k Bytes Flash片内程序存储器,128 bytes随机数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定期计数器和2个全双工串行通信口,并且价格低廉,市场运用很普遍,因而采用它作为系统主芯片即可进行灵活控制。 2.1.2 复位和时钟电路 复位时钟电路如下图: 图2-3 复位时钟电路 主芯片RST复位引脚是高电平有效。高电平有效持续时间应为24个振荡周期以上。若时钟频率为12MHz,则复位信号至少应持续2us以上才可以复位单片机。只要该引脚保持高电平,芯片便循环复位。当RST端由高变低后,程序指针由ROM0000H开始执行程序。它复位操作不影响内部RAM内容。当Vcc加电后,RAM内容是随机。 此外主芯片复位方式有上电复位和手工复位两种。只要Vcc上升时间不超过1ms,通过在Vcc和RST引脚之间加一种10uF电容和一种1KΩ, 由延时常数 Т=R*C=1KΩ*10uF=1ms 可知,当系统上电后即可完毕复位。 时钟电路是给通信主机提供正常工作时序所必不可缺某些,主机只有在统一时序下才干进行正常工作。主芯片内部由一种反相放大器构成振荡器,可以由它产生时钟。时钟可以由两种方式产生,即内部方式和外部方式。图2-3给出是外部方式。Fosc可在1.2~12MHz之间选取,为以便计算,选用晶振频率fosc=12MHz,可以得到机器周期为:T=1/fosc=1us。电容对频率有微调作用,因而小电容取值为20pF。 2.2 通信模块 2.2.1 通信芯片选取 MAX485接口芯片是Maxim公司一种RS-485芯片。RS-485是美国电气工业联合会(EIA)制定运用平衡双绞线作传播线多点通讯原则。它采用差分信号进行传播;最大传播距离可以达到1.2 km;最大可连接32个驱动器和收发器;接受器最小敏捷度可达±200 mV;最大传播速率可达2.5 Mb/s。由此可见,RS-485合同正是针对远距离、高敏捷度、多点通讯制定原则。 MAX485芯片采用单一电源+5 V工作,额定电流为300 μA,采用半双工通讯方式。它完毕将TTL电平转换为RS-485电平功能。MAX485芯片构造和引脚都非常简朴,内部具有一种驱动器和接受器。RO和DI端分别为接受器输出和驱动器输入端,与单片机连接时只需分别与单片机RXD和TXD相连即可/RE和DE端分别为接受和发送使能端,由于MAX485工作在半双工状态,因此只需要一种信号控制MAX485接受和发送即可。因而本模块采用MAX485芯片即可满足远距离通信性能指标。 RS485通信合同: 典型串行通讯原则是RS232和RS485,它们定义了电压阻抗等,但不对软件对合同予以定义,区别于RS232,RS485特性涉及:   1.RS485电气特性:逻辑“1”以两线间电压差为+(2—6)V表达;逻辑“0”以两线间电压差为-(2—6)V表达。接口信号电平比RS—232—C减少了,就不易损坏接口电路芯片, 且该电平与TTL电平兼容,可以便与TTL 电路连接。   2. RS-485数据最高传播速率为10Mbps 。   3. RS-485接口是采用平衡驱动器和差分接受器组合,抗共模干扰能力增强,即抗噪声干扰性好。   4. RS-485接口最大传播距离原则值为4000英尺,事实上可达 3000米(理论上数据,在实际操作中,极限距离仅达1200米左右),此外RS-232-C接口在总线上只容许连接1个收发器,即单站能力。而RS-485接口在总线上是容许连接多达128个收发器。即具备多站能力,这样顾客可以运用单一RS-485接口以便地建立起设备网络。   因RS-485接口具备良好抗噪声干扰性,长传播距离和多站能力等上述长处就使其成为首选串行接口。由于RS485接口构成半双工网络普通只需二根连线,因此RS485接口均采用屏蔽双绞线传播。 RS485接口连接器采用DB-99芯插头座,与智能终端RS485接口采用DB-9(孔),与键盘连接键盘接口RS485采用DB-9(针) 2.2.2 通信电路 通信模块电路如下: 图2-4 通信模块电路 MAX485RO和DI引脚分别和单片机RXD和TXD相连接,/RE和DE受单片机P1.0控制,当P1.0=1是,MAX485发送数据,当P1.0=0是MAX485接受数据,主机和从机都是按照如图所示电路进行通信,为了减少信息传播时错误,主从机都使用相似频率晶振,设立主从机相似波特率。 2.3 数据输入模块 矩阵式键盘,矩阵式键盘稳定,其突出长处是占用I/O口少,I/O端口运用率高,可循环操作,并且扫描键盘时占用CPU时间少,操作灵活,以便。由设计规定可知系统需求能控制多状态并且运用率高键盘,因而综合以上规定此模块采用矩阵式键盘。 2.4 数据显示模块 采用八段共阴极数码管显示,运用HD7279进行驱动,性能稳定,操作简朴。HD7279是一片具备串行接口可同步驱动8位共阴式数码管(或64只独立LED)智能显示驱动芯片,该芯片同步还可连接多达64键键盘矩阵,单片即可完毕显示键盘接口所有功能。由于系统规定传播只是简朴数据,因而采用数码管显示即可满足指标规定。 第三章 软件设计 3.1 系统总流程图 多机双向通信软件设计重要分为:系统初始化、拟定主从机关系、双方进行握手、不接受主机数据、主机发送数据和从机接受数据等六大某些;每个功能模块对于通信双方都是必不可缺,只有这样主机才干较好对外部信息进行采集、分析和解决。 1.系统初始化:系统初始化涉及串口初始化和显示模块初始化。重要实现串口中断启动、总中断启动、定期器选取及其工作方式选取、串行口工作方式选取和显示模块初始化等功能。 2.有键按下:通信双方进行通信时需拟定双方主从关系,然后通过键盘按下,显示所传播数据。 3.键值解决:在该某些中,通信主机会发送握手信号给从机,主机发送数据通过解决再传播给从机 4.送显数据:所发送数据通过解决之后再发送给从机。 5.关闭显示:从机显示数据完毕之后需要关闭显示不再传播数据和显示数据。 6.从机接受数据:此某些功能较简朴,只需完毕从机不断接受主机发送数据即可。 3.1.1 程序流程图: 开 始 初始化 有键按下 Y 键值解决 送 显 发 送 图3-1 主机程序流程图 本系统程序重要有:初始化,键盘发送,键盘解决,送显,关闭显示等五个某些。 1. 初始化:该某些重要是串行口初始化,16位定期器初始化和中断初始化三某些功能,详细实现如下: void init()//初始化子程序 { TMOD=0x20;//设立定期器1为工作方式2,8位自动重装 TH1=0xe8;//赋计数初值,相应定期26us TL1=0xe8; TR1=1;//T1中断启动 EA=1;//总中断启动 REN=1;//串行接受容许 SM0=0;//串行通信方式选取方式1,10位异步收发,由定期器控制波特率 SM1=1; } 第四章 硬件调试与分析 4.1 实验调试仪器 调试过程中运用到实验仪器重要有: 1. 微机一台,串行接口线一根; 2. 单片机仿真机一块; 3. 工具箱一种; 4. 5V稳压电源一种; 4.2 各个子系统模块调试 4.2.1 握手信号发送模块调试 系统上电后,通信双方1机2机第1位都点亮,且为闪烁状态,阐明初始化某些正常,如图6所示。然后按下1机发送2键,在1机第1位都显示数字“2”,阐明有发送键按下,在2机第1位数码管都显示数字“2”,阐明接受到了1机握手信号,然后2机按下接受数据1键,在1机数码管第4位上显示数字“2”,阐明接受到了2机,至此握手信号模块所有工作正常,且系统稳定,阐明该模块功能实现成功。 图4-1 1机作为主机发送数据2给2机 图4-2 接通电源两单片机都显示0初始化正常 4.2.2 接受数据与回绝接受数据模块调试 先对系统进行复位,重复以上操作至1机发送握手信号后,如果2机不接受数据1,按下2机不接受1键,刚开始数码管关闭一下,后又闪烁,且为乱码,阐明此某些系统工作不正常,通过检查程序,发现本来缺少了while(1)循环语句,因而数码管关闭一下后又亮了,重新编辑软件,加上了while(1)大循环,在进行系统测试,重新按下不接受1键,数码管所有关闭,如图8所示,再进行其她测试,数码管还是关闭,阐明找到了问题症结所在,并解决了问题。至此此某些调试完毕。 图 4-3 2机不接受1机数据 4.2.3 发送数据与接受数据模块调试 重复第一次环节后,在握手完毕后按下1机发送数据键,2机接受到了1机数据,且没有错误。 再重复所有环节,再测试当2机为主机,系统都按照设计状况运营阐明系统工作正常。至此,系统调试所有完毕,圆满完毕设计任务。 图4-4 1机作为主机发送“6”给2机 图4-5 2机作为主机发送“9”给1机 第五章 总结与体会 本次设计重要基于RS-485合同,设计了一种基于RS485单片机通信系统发送端,并和另一组搭档完毕接受端和发送端连接发送和接受。完毕了双机通信机之间双向通信、控制和操作,实现了可通过键盘控制从机选取,主机数据输入和数据实时显示等功能。硬件系统重要由主机控制模块、数据输入模块、数据显示模块和数据传播模块四某些构成,软件系统则基于硬件进行相应设计。该通信系统具备操作简朴、构造简朴、可靠性高、可扩展性强等特点,在实际生活中有广泛应用前景。 本次课程设计,重要涉及硬件制作和软件设计两大某些。在硬件制作过程中最为核心是电路板焊接,需要认真小心,在焊制过程中要避免节点之间短路状况。软件设计过程中需要不断地编译来拟定与否有语法上错误,在拟定没有错误之后再下载到单片机中,然后再进行调试,这些过程需要有高度耐心和仔细,否则容易发生错误。此系统设计突出了软件设计灵活、以便和功能强大等长处,从设计开始至最后结束,软件某些设计始终是一种至关重要环节,其重要性在本次课程设计中体现淋漓尽致。在本系统中,该某些设计相对来说不是很抱负,在语句功能实现方面有点繁琐,由于设计时是运用P1^0口进行控制MAX485芯片使能端,且涉及到多机通信,因而C语句相对来说较多,也阐明直接用P1^0口控制并不是很简便,日后发现若采用中断方式进行控制,程序就会变得更加精炼,简洁,此后若尚有机会一定要尝试着运用单片机自身中断进行控制。 在设计过程中锻炼了自己动手焊接制作能力,培养了自己耐心,细心和团队协作能力。软件设计让自己对程序设计又有了一种新结识和提高,对C语言有了一种全新结识和学习,让自己更加苏醒结识到了C语言程序设计重要性。 参照文献 [1] 谭浩强. C程序设计.北京:清华大学出版社,. [2] 张先庭.单片机原理、接口与C51应用程序设计.北京:国防工业出版社,. [3] 杨子文.单片机原理及应用.西安:西安电子科技大学出版社,. [4] 张友德.单片微型机原理、应用与实验.上海:复旦大学出版社,. [5] 陈志旺.51系列单片机系统设计与实践.北京:电子工业出版社,. [6] 马忠梅.单片机C语言应用程序设计.北京:北京航空航天大学出版社,. 附录一:总原理图 附录二:源程序代码 #include <reg52.h> #define uchar unsigned char #define uint unsigned int #define cmd_reset 0xa4//7279复位指令 #define decode1 0xc8//下载且按方式1译码,0~F译码 指令 #define cmd_read 0x15//读键盘数据指令 #define uncode 0x90//下载数据但不译码指令 #define xiao 0x98//消影控制指令1显示,0消影 #define segon 0xe0//段启动指令 #define shan 0x88//闪烁控制指令0闪烁,1不闪烁 void long_delay(void);// 长延时 void short_delay(void);// 短暂延时 void delay10ms(uchar);// 延时10ms void write7279(uchar,uchar);// 写入到HD7279 uchar read7279(uchar);// 从HD7279读出 void send_byte(uchar);// 发送一种字节 uchar receive_byte(void);// 接受一种字节 uchar get_key_number(uchar);//键盘转换子程序 void fasong11(void);//1发送数据1给2 void fasong22(void);//2发送数据2给1 void bujie1(void);//不接受1数据 void bujie2(void);//不接受2数据 void jieshou12(void);//1接受2握手信号,返回1 void jieshou21(void);//2接受1握手信号,返回2 void init(void);//初始化程序 sbit cs=P1^4;// 7279cs 接于 P1.4 sbit clk=P1^3;// 7279clk 连接于 P1.3 sbit dat=P1^2;// 7279dat 连接于 P1.2 sbit key=P1^1;// 7279key 连接于 P1.1 sbit rs=P3^0;//接受端接于P3.0 sbit ts=P3^1;//发送端接于P3.1 sbit controlmax=P1^0;//MAX芯片使能端控制口 uchar key_code[]={0x1c,0x1d,0x1e,0x1f,0x14,0x15,0x16,0x17,0x0c,0x0d,0x0e,0x0f, 0x04,0x05,0x06,0x07};//键值表 uchar key_number; void main()//主程序 { uint i; uchar a,m; for (i=0;i<0x;i++);// 上电延时 send_byte(cmd_reset);// 复位HD7279A init();//一开始先进行接受数据 controlmax=0;//接受握手信号 RI=0; while(1) { if(!key)//进行按键判断,有键按下时key位低电平,进入循环 { key_number=read7279(cmd_read);// 读出键码 m=get_key_number(key_number); switch(key_number)//控制按键选取 { case 0x1c:fasong11();break;//1发送1给2 case 0x1d:jieshou12();break;//1接受2握手信号,返回 1 case 0x14:jieshou21();break;//2接受1握手信号,返回2 case 0x15:fasong22();break;//2发送2给1 case 0x04:bujie1();break;//不接受1数据 case 0x05:bujie2();break;//不接受2数据 default :write7279(uncode,0xff);break; } } else { write7279(shan,0xc0);//刚开始数据显示在第1位,程序初始化 a=SBUF; a=a&0xff; write7279(uncode,a);//在第1位上显示接受到数据 } } } void fasong11(void)//1发送1给2? { uchar m,j; init(); controlmax=1;//打开发送使能端 TI=0;//打开发送中断 SBUF=0x30;//发送1给2 write7279(uncode,0x30); //把1显示在第1位上 while (!TI);//如果没发送完,那么继续等待 TI=0; while(1) { controlmax=0;//打开接受使能端,接受握手信号 RI=0; while (!RI); RI=0; while(1) { j=SBUF; delay10ms(0x100); switch(j)//接受到数据进行判断,显示在相应位置上 { case 0x6d:write7279(uncode+3,j);break;//若接受到2返回握手信号,则放在第4位 default :write7279(uncode+7,0xff);break;//否则点亮第8位数码管,提示握手失败,从发数据 } if (!key)// 如果有键按下,则kye为低电平 { write7279(xiao,0xd5); init(); controlmax=1;//设立MAX485发送使能端有效 write7279(shan,0xff); key_number=read7279(cmd_read);// 读出键码 m=get_key_number(key_number); SBUF=key_number; TI=0; //启动发送中断 while (!TI);//如果没发送完,那么继续等待 TI=0; delay10ms(0x10); write7279(decode1,m);//在第1位上显示发送数据 } } } } void jieshou12(void)//1接受2握手信号,返回1 { uchar b; init(); controlmax=1; SBUF=0x30;//接受到握手信号,返回1 TI=0; while(!TI); TI=0; write7279(uncode+3,0x30);//把1显示在第4位上 delay10ms(0x100); controlmax=0; RI=0;//接受中断启动 while(!RI);//如果没收到,继续等待 RI=0; write7279(xiao,0x0c); while(1) { controlmax=0; RI=0;//接受中断启动 while(!RI);//如果没收到,继续等待 RI=0; write7279(shan,0x04);//设立第三位不闪烁 write7279(xiao,0x04);//只显示第三位 b=SBUF; write7279(decode1+2,get_key_number(b));//把接受到数据显示在第3位上 } } void jieshou21(void)//2接受1握手信号,返回2 { uchar b; init(); controlmax=1; SBUF=0x6d;//2接受到握手信号,返回2 TI=0; while(!TI); TI=0; write7279(uncode+1,0x6d); delay10ms(0x20); controlmax=0; RI=0;//接受中断启动 while(!RI);//如果没收到,继续等待 RI=0; write7279(xiao,0x03); while(1) { controlmax=0; RI=0;//接受中断启动 while(!RI);//如果没收到,继续等待 RI=0; write7279(shan,0xc1); write7279(xiao,0x01); b=SBUF; write7279(decode1,get_key_number(b));// 把接受到主机1数据显示在第1位 } } void fasong22(void)//2发数据2给1, { uchar m,j; init(); controlmax=1;//设立MAX485发送使能端有效 TI=0;//启动发送中断 SBUF=0x6d;//发送2给1 write7279(uncode,0x6d); while (!TI);//如果没发送完,那么继续等待 TI=0; while(1) { controlmax=0;//设立MAX485发送使能端有效 RI=0; //启动发送中断 while (!RI);//如果没发送完,那么继续等待 RI=0; while(1) { j=SBUF; delay10ms(0x100); switch(j)//把接受回来信号进行判断, { case 0x30:write7279(uncode+1,j);break;//若为1反馈信号则显示在第2位上 default :write7279(uncode+7,0xff);break;//否则点亮第8位数码管提示握手失败,从新发送数据 } if (!key)// 如果有键按下,则kye为低电平 { write7279(xiao,0xd5); write7279(shan,0xff); key_number=read7279(cmd_read);//读出键码 m=get_key_number(key_number); init(); controlmax=1;//设立MAX485发送使能端有效 SBUF=key_number; TI=0; //启动发送中断
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服