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