付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
完成时间:2012-5-科技创新科技创新本地系统及总线通信实验报项目名称:主从多机测量控制系统——本系统及通信总线项目开发小组:第9大组小组成员:王苏阳(组长)李云成庄汉交通大学电子交通大学电子信息与电气:本文是电院科技创新4A的本系统设计报告,主要针对的阅读对象为:选修《科技创新4A研究的从业。详细论述了一个信息处理系统中全局主系统的主要功能、系统架构、本实验的主要任务为设计并制作一个主从多机测量控制系统的本机系统及总线通信系统。该系统主要由全局主系统、本系统、从系统组成,以RS422通信总线作为主干信道,融合机实现,降低了功耗和成本。本文详细论述如何利用EDA工具加快开发进度可靠性的具体方:科创4A,EDA通信仿从多机通信,通信协:Thisarticleisthereportofthelocalsystemdesignofscientificandtechnicalinnovation4A.Itmainlyfocusonreaderswhotakethecourseofsci-techinnovation4A—designandpracticeofcomplexelectroniccircuitsystem--especiallystudentsofEE,andresearchersinthisfield.Thisreportexpressesthedetailofthemainfunction,systemstucture,technicalindex,andstepsofexploitionandtest.Themaintaskofexperimentistodesignaeprocessingsystem.Thesystemconsistsofoverallmastersystem,localmastersystem,slaversystemoneultrasonicinspection,slaversystemtwoobservingandcontrollingofwatertemperature,slaversystemthreeobservingandcontrollingofmotorspeed.ThesystemshoulduseRS422communicationbusasmainsignalpathandsupportsomerulesofcommunicationprotocolssothatitcanachievemutualcommunication.Thelocalmastersystem,insteadofusingaPC,takesadvantageoffullyusingAVRsystemtolowerpowerdissipationandcosts.ThearticlegivesadetaildescriptionofhowtouseEDAtoolstospeedupthedeveloprocessandimprovetherobustofthesystemandhowtosetupthesimulationplatform.sci-techinnovation4A,EDAsimulationforcommunicationsystem,master-slavemulti-machinecommunication,Communicationprotocol概 编写说 名词定 缩略 系统总体说 系统设计总体结 系统总体功 通信模型的总体设 拓扑结 通信分层模 协议分 系统分 物理层详细设 RS-422/485通信总 差分传 RS-422电气规 总线的选 无线通信模 线缆与插 MAX483及接口电 接口电 本系统与全局主系统的连 总线通信具体实现详细设 单片机串行通信的实 ATmega16单片机的串行接 串口操 信息帧结构及其发送接收实 通信协 信息帧基本结 通信协议说 命令帧通信协 响应帧通信协 帧结构的发 帧结构的捕 关于 调试过 调试步 系统仿 单机仿真阶 系统级仿 EDA仿真的缺陷和本组遭遇的问 系统程序解 主体程序结 相关函数具体说 单片机端口初始化函数 单片机定时器0初始化函数timer0_init 单片机串口初始化函数UsartInit 字符发送函数PutChar()、 帧处理函数 数码管显示函数NUMTOSEG7(unsignedchar Led灯显示函数display_led(unsignedcharseg,unsignedchar 进制转化函数asc2num(unsignedchara,unsignedcharb),num2asc(unsignedintx) 致 参考资 附录A本系统与从机子系统之间的通信协 附录B开发环 主要开发地 主要开发硬件资 主要开发资 附录C程序 附录D系统概编写说为大三下学期电院科技创新4A计报告。着重从物理层介绍整个通信系统的设计,并从单片机系统控制的层面解释本地系统是如何工作的,通过EDA工具提高系统稳定性,增加系统开发效率并减轻开发者的劳动强度。的适读对象为电子信息类专业高年级的学生,以及具有AVR单片机开发基础,并对主从多机系统总线通信设计感的读者。名词定EDA:EDA是电子设计自动化(ElectronicDesignAutomation)2060期从计算机辅助设计(AD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和单片机小系统:包括MCU(进行运算、控制)、RAM(数据)、ROM(程序)、输RS422:串行数据接口标准,最初都是由电子工业(EIA)制订并发布的网络通信协议:指信息网络中使用的通信语言。包括三个要素:(1)缩略ASCII:AmericanStandardCodeforInformationInterchange,即信息交换标准代码主机:本系统。系统总体说2.1系统总体功本系统采用全双工的串行异步通信方式,根据《本系统与从机子系统之间的通信协议》通信协议进行通信。本系统主要完成以下功能:通过单片机将全局主系统发送过来令翻译成符合《本系统与从机子系统之间 通信模型的总体设拓扑结RS422总线采用线性结构,图3.1给出总线型拓扑构型。图3.2给出具体的系统连接(系统RS422总的信道,将子系统对应的收发器的MAX483的使能端与单片机的输出端口相连,使得在不响应信息时,可以使得子系统通过MAX483接入总线呈高阻态。通信分层模些协议规定了系统换的信息的格式和有关时序。协议主要由三部分:语法、语义和时序。为简各层之间相互独立。并不需要知道低层是如何实现的,而仅需要知道该层通过层间参考了不少设计资料,可以简单地将整个系统分解成三层结构,分别为物理层、网络层和应用层。物理层主要指的是在物理电路中,实际传输的数据。一般来说,物理层上的数据以bit为RS422总线以及使用的无线模块和红外模块的相关物理层协议。网络层主要物理层详细RS-422/485通信总RS-422/485总线标准是由EIA为业界应用最为广泛的标准通口之一。RS-422是由RS-232发展而来,它是为弥补RS-232通信距离短,速率低的缺点而提出来的。RS-422定义的平衡通口,将传输速率提高到10Mb/s,传输距离延长到1200km(速率低于100kb/s),并允许在一条平衡总线上连接最多10个。RS-422是一种单机发送、多机接收的规范,其总线具有四根信号线,接口采用平衡驱动差动接收电路,信号采用差分传输方式。在RS-422的基础上提出了RS-485标准,RS-485增加了多点、双向通行能力,允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和保护特性,扩展了总线共模范围。RS-422和RS-485标准只对接口的电气特性做出规定,而不涉及插件、电缆和协议,在此基础上用户可以建立自己的通信协议。它们的具体规格如下表:在RS-422和RS-485总线上,数据信号采用差分传输方式,它使用一对双绞线,将其中一线定义为A,另一线定义为B,如下图所示:图 通常情况下,发送驱动器A、B之间的正电平在+2~+6V,是一个逻辑状态,负电平在-2~-6V,是另一个逻辑状态。另有一个信号地C,在RS-485总线中还有使能端,用来控制发送驱动器与传输线的切断和连接。当使能端起作用时,发送接收驱动器处于高阻状态。对于,其接收端A、B和发送器的输出端AA、BB通过双绞线相连,当AB之间有大于+200mV的电平时,输出正逻辑电平,小于-200mV时,输出负逻辑电平。接收平衡线上的电平范围通常在200mV至6V之如下图所示为RS-422DB9连接器引脚定义和典型的RS-422四线接口。由于采用高输入阻抗和发送器的较强驱动力,故允许在相同传输线上连接多个接收结点,最多可以接10个节点。总线上的点包括一个主机和多个从机,从机之间不能通信,因此RS-422支持点对多点的双向通信。RS-422四线接口采用单独的发送和接受信道,因此不必控制数据方向,各系统之间的信号交换以方式或硬件方式实现。4.3RS-422本次系统要求设计点到多点的通信系统,其中一个本系统和三个子系统。按照协议的要求,本系统在收到全局主系统令帧或者本系统自身要向子系统发送命令帧时,本地主系统向某子系统发送命令。子系统在收到从本系统发送来令帧后判断命令帧的是否为发RS-422或者RS-485总线。本次采用RS-422总线四线工作方式。本系统可以通过下行链路(两线)向每个子系统发送命令消息,子系统通过上行链路(两线)回发响应消息,其中上行链路的占用情无线通信模无线模块的主要功能是进行主机与本系统之间数据的无线传输,实现数据。在实际试验过程中,采用桑锐电子科技生产的SRWF-1101型无线通信模块。SRWF-1101概SRWF-1101FECIC,,以及高速微处理器相结合开发出的一款无线通信模块,该无线通信模块具有很强的能力,全明传输体积小,功耗低传输距离远的特点4.5图4.5SRWF-1101实物图SRWF-1101如表4-2所示,为SRWF-1101的技术指标4-2SRWF-1101的技术1234-111~-56789UARTTTL/RS-232/RS--SRWF-11014-3SRWF-1101接口定SRWF-11011无2345无6无7无89图4.6SRWF-1101接口定线缆与插RS-422通信总线的布线一般采绞线作为传输介质。本系统采用非双绞线,它是普通的线。连接线有两种基本模块插座,RJ45和RJ11。RJ45为8芯插座,RJ11为6芯插座。这里采用6芯插座,并且只用到RJ11规范中的4芯。它们在总线上挂载方式如下图:4.7插座挂载方式MAX483RS-485RS-422通信的低功耗收发器,器件中具有电缆引起的反射,实现最高250kbps的无差错数据传输。收发器在驱动器禁用的空载或满载状态下,吸取的电源电流在120uA500uA之间。另MAX483具有低电流关断模式,仅消耗0.1uA。器件工作在5V单电源下,不过要注意各MAX483工作时的共地问题。对于下行链路中作为发送驱动器的MAX483,其接收使能端/RE连接高电平、平衡输出端RODEDI连接至单片机的串口通信发送端。对于上行MAX483DE置低电平,当其对应的子行链路的问题。如下图所示:4.9MAX483对于作为的MAX483,其接收使能端/RE连接低电平、平衡输出RO连接至单片机的串行通口接收端、发送使能端DE连接低电平、平衡发送端DI空载。如下图所示:4.10MAX483每套接口电路均包含一个发送驱动器MAX483和一个MAX483,它们的差分输出A、B或差分输入AA、BB分别连接至总线上,总过RJ11和线连接至集线器上。通过集线器来由于本次系统的布局都是在以本地为中心的1米范围内,因此在总线上的通信可靠性比较MAX483AB之间接上匹配电阻(120欧姆)以抵消总线传输过程中因发射造成的信号衰4.11如将上图所示接口电路作为子系统接口电路,本系统的接口电路的上行链路和下行链路对应子系统接口电路的下行链路和上行链路。在RJ11需做点改变即可。如下图所示:4.124.13集线器上的RS232转换电路块只在本系统与PC连接拟串口通信时使用到,在完整的系统调试时,将转换电的两片MAX483去掉以防这此块电路对总线信号的干扰。集线器上的各RJ11插座连接至各系统完成系统通信的物理层架构。本系统与全局主系统的连接总线通信具体实现详细设ATmega16单片机含有一组全双工串行口。具有以下特点全双工操作(独立的串行接收和发送寄存器,将USART分为了三个主要部分:时钟发生器,发送器和。控制寄存器由三个单元共享。时钟发生器包含同步逻辑,通过它将波特率发生器及为从机同步操作所使用的外部输入时钟同步起来。XK发送器时钟引脚只用于同步传输模式。发送器包括一个写缓冲器,串行移位寄存器,奇偶发生器以及处理不同的帧格式所需的控制逻辑。写缓冲器可以保持连续发送数据而不会在数据帧之间引入延迟。由于具有时钟和数据恢复单元,它是UART模块中最复杂的。恢复单元用于异步数据的接收。除了恢复单元,还包括奇偶器R。支持与发送器相同的帧格1,10位异步接收/1位起始位(12(8位重装计数方式)9600bps,因此设置定时值UCSRB|=UBRRL=当向UDR写入一个数据时,单片机系统随即根据所选的工作方式和波特率将写入的字节数据进行相应的处理后从TXD外部引脚发送出去,当发送完成后硬件置位相应寄存器内的标志位,该位必须由清除后才能发送下一字节数据。当单片机的外部引脚RXD根据工作方式和波特率接收到一个完整的数据字节后,把该数据字节放入到接收缓冲寄存器中,并且置位相应标志位(RXC)。同样,该位必须由清楚后才能接收在物理层提供比特流传输服务的基础三行,在总线结构的各节点之间建立信号传输连接。ASCII编码,本系统完整的帧结构为18字节长度,但实际会length位而改变。当length00时,INFO位就没有了。相length02时,INFO400235.45.2通信协5-1所示为信息帧的基本结构,由通信主机发往从机的信息帧,称为命令帧;由通信从机发表示意12[注2[注1]1符’1’和’0’表示,即ASCII代码0x31,0x30(数字对应的字符在先,低位在后)结束标志采用字符’\r’ASCII代码为0x0D 命令帧通信协议式无无无无无无5-3正常恢复:00VER01CHKSUM无效命令:03参数段长度错:04无效参数个个ASCII码。通过C51函数中的强制类型转换,可以实现对于ASCII码的处理。对于本地系统,使用初始时和之后的大部分时间里,系直处于等待接受帧头的状态,称之为S0状态。如当接收到一个帧头时,在本系统中,帧头被定义为SOI=“~”,系统开始接收后续的字EOI=“\r”,此时系统处于的状态称之为S1状态。此时可能发生以下四种情况:如果收到字节不是EOI到首位。状态仍为S1。如果收到帧尾EOI(通信协议中为“\r”即回车符),接收完成,系统转为S0状态。图规定了CHKSUMsum,然后CHKSUM256sum%256CHKSUM16进制。比如帧~100201000110DC\r,其中‘~’和‘\r10+02+01+00+01+10=24,注意这里的数都是16进制。转化成10进制后sum=36,代入上式,CHKSUM=256-36%256=220,转化成16进制,即DC。调试系统级的调试往往是非常和耗费时间的。本小组的本机基于ATmega16单片机实现,而不是其他小组的计算机,增加了的调试难度。由于系统中不确定因素可能来自EDA工具能够大幅度提高工效,提高系统的可靠性,缩短开发周期,降低开发者的调试难度,让开发者将主要精力集中于设计功能而不是硬件调试。本小组花费较大精力,为系统设计了一整套完善的EDA仿真工具,使得工程师可以在桌面调试步首先使用只运行接收帧处理函数的虚拟子机来完成整个系统的联调,确保本系统程序系统仿EDA工具的仿真环境,这样在计算机上就可以进行从单机到系统级的仿真工作,可以不必等到硬件完成才进行的调试。仿真是在Proteus中进行的。将程序加载进单片机中,然后在终组实现了其他小组必须使用计算机才能够实现的本系统的全部功能,包括:检纠错,单机,多机状态查询与工作模式设置,无线接口功能。这里将详细介绍EDA辅助单机,多机仿真的过程。第一阶段仿要针对主机,从机正确识别,发送帧展开。这一阶段的主要任务是验证程序的正确性,为程序开发提供验证平台。虽然使用硬件是方便的,但是受限于开放时间和芯片的烧写,使用EDA工具能够有效减低成本和提高效率。使用EDA工具,可以随时随地的进试,不用担心问题。对于本系统的程序,首先是检测和识别命令的正确性,确保总线上传输信息的正确性和总如果正确,则将正确帧转发。在这个仿真环境中,人工输入在终端上的帧当作从主系统或者子系统来的帧,程序运行后返回的帧也显示在终端上。为了方便起见,人工输入令也显示在终端上。(终端实际上显示的是本系统发送的字符,而人工输入字符相当于本系统接收字符,下面截图中是输入各种命令程序的反应。截图中用的程序是早期调试用的程序。为了调试方便,当输入正确帧的时候程序转发这个帧,但输入错误帧的时候让它输出一些标志用的字符,来确定错误所在。在最终程序中只要把输出的这些字符改成相应的错误帧就可以了。如图7.2.3中,当输入的帧“~100006000101e8\r”(电机子系统回复主系统状态查询帧)少了校验位e8时,本系统检查出错误,并输出接受帧队列RsBuf[]中的值(a~n对应该帧每一位),可见m、n没有对应的数字,即这两位少了。说明本系统正确检验出了这个错误。其他的错误帧类似。本机7.2.1这个平台虽然比较简单,但是对于本系统的意义非常重要。因为本系统完成前,用硬件调试的过程中多次由于电压,硬件问题等造成调试的,采用本平台后,程序开发进度大大增快。由于后期系统架构调整,前期设计的本机程序被全部修改,但是相对于首次开发,原来需要两周左右的开发周期缩短到2天左右,完全满足系统需求。图 输入正确帧的反应(转发图 输入错误帧的反应(长度不够,没有校验位图 校验位错误返回的7.2.4,"~100201000100ec\r"eceb后返回错误~1000020000EE,这实现本系统之后的开发工作就有纯手动工作转入自动化程度更高的调试方式。这个阶段,本本图 主机自动扫描模式仿真电路图 主机自动扫描模式仿真效主主机,上位机,适配器TXD,RXD直接相本机图 全网络通信功能仿真平除了单独测试用的仿真平台外,也搭建了全局的仿真平台,只要将子系统和主系统的程序在系统级仿真中,排除了可能在总线上出现的一系列故障并调整了一系列的参数,使得系2个小时,没有发生任何故障情况,在仿真平台上,系统有过超过12小时的运试。系统级仿真最大的意义在于,Proteus提供了一个虚拟串口模块。通过一些其他,如SerialNull等,可以实现与本机物理串口连接,从而实现了和上位机的仿真接口工作。使得上位机开发工作同样可以在PC上完成而不需要任何真实的硬件支持。这样的仿真对于完善系统和协调EDA仿真的缺陷和本组遭遇 问首先,Proteus仿真ATmega16的通信功能中有一定偏差。主要表现在:对于串口缓存区UDR没有做到及时清空。如果使用Proteus,在同一个中断中多次调用缓存区,缓存区的内容是不变的。但是如果是真实主机,缓存区被后即时被改变。如果一直使用UDR作为变量进行比较将会导致严重的错误,但是Proteus仿真结果却不会显示这样的错误。解决方案就是不要使用UDR作为变量,而应当在串口接收中断触发时及时保存缓存区内容。第二,Proteus在进行系统级仿真过程中占用系统资源很大,所以仿真时间将会超过实际的时第三,由于Proteus对于模拟器件,比如MAX483仅仅提供了逻辑级别,也就是功能仿真,这根据图7.2.7全网络通信功能仿真平台可以看到上位机,本机和总线适配器的接口直接用在没有信号时,TXD为高电平,而MAX483无力拉低电平,从而导致插上无线模块后,ATmega16USART无法总线上数据。解决方案是使用二极管进行,对无线模块TXD端口反接整流用二极管,使得二极管仅能够在TXD端为低电平时对USART输入端口形成影响,而在高电平时,由于二极管反向截止,MAX483可以拉USART端口电平,从而保证串口通信的正常进行。这种方法具有一般性。对于普通数字电路中遇到的类似带载能力不足问题可以通过这样的法来实现扇入扇出控制。第四,SerialNull的稳定性存疑。在使用虚拟串口调试主机的过程中多次发生蓝屏故障,虽然使用虚拟机技术没有性,但是这种蓝屏对于使用硬件PC仿真会造成潜在的硬件损坏的可系统程序解主体程序结()voidport_init(void)PORTA=DDRA0xF0;PAPA7、PA6、PA5DDRB=0x00;PORTC0xf0;PCPC7、PC6、PC5、PC4DDRC=0x00;PCDDRD=}0初始化函数timer0_initvoidtimer0_init(void)TCCR0=0x00;//stopTCNT0=0x64;//setcountOCR0=0x9C;//setcompareTCCR0=0x04;//start}void{////8Data,1Stop,No// 0x03max//UBRRL= UCSRB|=UBRRL=}intPutChar(char{if(c=={}UDR=while(!(UCSRA&(1<<UDRE)));UCSRA|=(1<<UDRE);return}voidPutStr(unsignedchar{while(*Str!={}}if(*Str=='\r')}}checksum等是否正确,从(代码太长,请见附录(代码太长,请见附录Led灯显示函数display_led(unsignedcharseg,unsignedcharvoiddisplay_led(unsignedcharseg,unsignedchar{unsignedcharPORTA&=~(1<<PA7);//PA7=0;for(i=0;i<8;i++)if((sel&0x80)==0)//最送U2SERPORTA&=~(1<<PA5);//PORTA|=(1<<PA5);//PORTA&=~(1<<PA6);PORTA|1PA6PA6=1srclk=1sel1selasc2num(unsignedcharaunsignedcharb),num2asc(unsignedintunsignedintasc2num(unsignedchara,unsignedchar{unsignedtmp=if('0'<=a&&a<=tmp+=((a-'0')<<elseif('a'<=a&&a<=tmp+=((a-'a'+10)<<elseif('A'<=a&&a<=tmp+=((a-'A'+10)<<if('0'<=b&&b<=tmp+=(b-'0');elseif('a'<=b&&b<='f')tmp+=(b-'a'+10);elseif('A'<=b&&b<='F')tmp+=(b-'A'+10);return}unsignedintnum2asc(unsignedint{if(0<=x&&x<=returnx+elseif(10<=x&&x<=15)returnx+'A'-10;}unsignedintcheckver()returnRsBuf[1]=='1'&&RsBuf[2]==unsignedintchecklen()returnlength==(2*asc2num(RsBuf[9],RsBuf[10])+}//ChecksumFunctionunsignedintchksum(){intsum=0,k;sum=0;for(k=1;k<=length-4;k+=2)sum+=asc2num(RsBuf[k],RsBuf[k+}sum=256-sum%returnsum==asc2num(RsBuf[length-3],RsBuf[length-}致 参考[2].科技创新[4A]课程讲座1:总体设计要求.ppt[3].科技创新[4A课程讲座2:通信协议及其程序设计[4].科技创新[4A]课程讲座3:系统中若干局部电路的方案[6].科创[4A]RS422485主从通信协议(20093月19日).doc[7].往届优秀总体设计报告[8].科技创新[4A]-第6大组-本地系统及总线通信设计[9].ATmega16的版本[10].科创4A系列博客 [11].ubuntu+eclipsecdt构建AVR开发环境 附录A本系统与从机子系统之间的通信协一、总则本协议旨在对电院科技创新6的本系统与从机子系统之间的信息通信提供一个规范化的规定。在这个实验中,计划采用总线式主从多机通信网络来实现本系统与从机子系统之间的通信进量并将测量数据在子系统单片机缓存中,仅当本系统发出查询指令时发回响应帧;电机转速测控子系统通过码盘检测电机转速情况,并通过波对电机驱动电路进行控制,本地主系统对码盘的检测数据进行指令,并通过对波生成参数进行设定来实现对电机转速的控制;水温测控子系统使用AD转换来控制水温,本系统指令通过和改变AD转换的输出二、协议文01000101为子系统参数命令01020001为子系统接收命令后的响应对于本系统,将在一个额定的时间间隔后通过总线对各从机子系统发出硬件中断指令,从而完成对从机子系统的参数的设置与。采取个从机子系统的数据保存在各子系统本地的单片机发出命令帧。如果在额定时间内从机子系统没有响应,则本系统向全局主系统发出故障信息。三、补充举意为本系统设置水温为64摄氏度(1900H=6400D),水温测控子系统响应响应接收到设四、参考资科创[6]RS422485主从通信协议(2009319日附录B主要开发地模拟示波器,计算机、5套基于ATMELATmega16AVR单片机系统开发板、基于MAX232,MAX483FSK433MHz无线通信模块以及常规电子元器主要开发资源操作系统:WindowsXPLinuxUbuntuWindowsAVRStudioEclipse附录C程序1.1 系统程#include"main.h"#include"usart.h"#include<avr/io.h>main#ifndefMAIN_H#define#defineunsignedchardata[4]={0,0,0,0};unsignedcharCNT=0;unsignedcharKeyUp;*Createdon:2012-4-Author://AVRapplicationbuilder:2010-04-06//://Crystal:8.0000Mhz#defineMAIN_C#include"includes.h"#include<avr/io.h>#include<avr/interrupth>#include<util/delayh> 常量定 //1s定时器溢出值,200个5ms#defineV_T1s200//20ms定时器溢出值,4个5ms#defineV_T20ms //50ms定时器溢出值,10个5ms#defineV_T50ms //crystalfrequency//definebuffersize//maxresent//constunsignedintmrt=//Normal//unknownconstunsignedcharerr_unknown[]=//versionconstunsignedcharerr_version[]=//checksumconstunsignedcharerr_checksum[]=//datalengthconstunsignedcharerr_datLength[]=//bufferoverflowconstunsignedcharerr_buffover[]=//erroroccurtimesbiggerthanmaxresenttimesFinoneloopconstunsignedcharerr_Multitim[]=//intervalbetweentwodataoverconstunsignedcharerr_int2long[]= 变量定 //数码管位和指示灯显示数据unsignedchar//数码管段显示数据变unsignedchar//1s定时器计unsignedchar//1s定时器溢出标unsignedcharvolatile//50ms定时器计unsignedchar//50ms定时器溢出标unsignedcharvolatile//20ms定时器计unsignedchar//20ms定时器溢出标unsignedcharvolatile//指示灯驱动信号输出缓unsignedcharled1,led2,led3,//数码管扫描驱动指unsignedchar//测试用计数unsignedint//测试用计数值十进制表unsignedcharvolatile//lengthofcurrentreceivedmsgunsignedintlength=0;//stateindicatorunsignedintmod=0;//bufferunsignedintRsBytes=//localmodeinfounsignedintinfo=0;unsignedintsetflag=0;//beginreceivingflagunsignedintbegrec=0;//usartunsignedchar//usartbufferforlastunsignedcharLastRight[]=//localmodeunsignedcharecho[]=//localcontrolcommandunsignedcharcmd[]= 函数定 //7段数码显示译//参数 DATA:需要显示的数字或符 返回值7段译码结果D7~0PGFEDCBAunsignedcharNUMTOSEG7(unsignedchar{unsignedcharAA;switch(DATA){case0:casecasecasecasecasecase
AA=break;//AA=break;//AA=break;//AA=break;//AA=break;//AA=break;//AA=casecasecasecasecasecasecasecasecase
break;//AA=break;//AA=break;//AA=break;//AA=break;//AA=break;//AA=break;//AA=break;//AA=break;//AA=break;//casecasecasecasecasecasecase
AA=break;//AA=break;//AA=break;//AA=break;//AA=break;//AA=break;//casecasecase
AA=break;//AA=break;//AA=break;//AA=break;//case'-casecase'}
AA=0xdf;AA=break;//下划AA=0xff;AA=return}voiddisplay_led(unsignedcharseg,unsignedchar{unsignedchar//先将sel数据PORTA&=~(1<<PA7);//PA7=0;for(i=0;i<8;i++)if((sel&0x80)==0)//最送U2SERPORTA&=~(1<<PA5);//PORTA|=(1<<PA5);//PORTA&=~(1<<PA6);PORTA|1PA6PA6=1srclk=1,产生移位时钟信sel1;//sel左移一}//再将seg74hc595for(i=0;i<8;i++){if((seg&0x80)==0)//最送U2SERPORTA&=~(1<<PA5);PORTA|=(1<<PA5);PORTA&=~(1<<PA6);PORTA|1PA6PA6=1srclk=1,产生移位时钟信seg1;seg左移一}PORTA|=(1<<PA7);//PA7=1;PORTA&=~(1PA7);//PA7=0;rclk=0,产生锁存输出信}单片机端口初始void{PORTA=DDRA0xF0PAPA7、PA6、PA5为输DDRB=PORTC=0xf0;//PC口PC7、PC6、PC5、PC4接上拉电DDRD=}//TIMER0initialize-//WGM://desiredvalue://actualvalue:200.321Hz(0.2%)voidtimer0_init(void){TCCR0=0x00;TCNT0=0x64;//setcountOCR0=0x9C;//setcompareTCCR0=0x04;//start}//callthisroutinetoinitializeallperipheralsvoidinit_devices(void){//stoperrantinterruptsuntilsetup//disableallGICR=0x00;TIMSK=0x01;//timerinterruptsources//re-enable//allperipheralsarenow}//showvoidshowerroradd(unsignedint{digi[0]=x>>digi[1]x816;digi[2x416计算个位数+16todisplaythe"0butnot"0"digi[3]=x%16;//计算小数点后1位数*}//toolfunctiontotransformasciiinto{unsignedtmp=if('0'<=a&&a<=tmp+=((a-'0')<<elseif('a'<=a&&a<=tmp+=((a-'a'+10)<<elseif('A'<=a&&a<=tmp+=((a-'A'+10)<<if('0'<=b&&b<=tmp+=(b-'0');elseif('a'<=b&&b<=tmp+=(b-'a'+10);elseif('A'<=b&&b<='F')tmp+=(b-'A'+return}//toolfunctiontotransformnumbertoasciiunsignedintnum2asc(unsignedintx){if(0<=x&&x<=returnx+'0';elseif(10<=x&&x<=15)returnx+'A'-}voidshowinfo(){digi[0]=mod;//standsfordigi[1]asc2num('0RsBuf[12计算十位unsignedinttmp=asc2num(RsBuf[13],digi[2tmp416;计算个位数+16todisplaythe0butnot0"digi[3]=tmp%16;//计算小数点后1位数*}//checkunsignedintcheckver()returnRsBuf[1]=='1'&&RsBuf[2]==}unsignedintchecklen(){returnlength==(2*asc2num(RsBuf[9],RsBuf[10])+}//ChecksumFunctionsum=0;for(k=1;k<=length-4;k+=2)sum+=asc2num(RsBuf[k],RsBuf[k+}sum=256-sum%PutStr(num2asc(sum>>4));PutPutStr("checksumCalculated\n");PutStr(RsBuf+length-3);Putreturnsum==asc2num(RsBuf[length-3],RsBuf[length-}//Functionforreceiveprocessvoidprocess(){//Put//checksum//privatewayif(mod==0&&RsBuf[3]=='0'&&RsBuf[4]=={PutStr(RsBuf);}else{if(!chksum())//distanceif((RsBuf[3]=='0'&&RsBuf[4]=='0'))Putshowerroradd(0x1E00+((LastRight[3]-'0')<<+(LastRight[4]-}else{PutStr(LastRight);}}//lengthelseif(!checklen())if((RsBuf[3]=='0'&&RsBuf[4]=='0'))Putshowerroradd(0x2E00+((LastRight[3]-'0')<<+(LastRight[4]-}else}}
PutStr(LastRight);//versionelseif(!checkver())if((RsBuf[3]=='0'&&RsBuf[4]=='0'))Putshowerroradd(0x3E00+((LastRight[3]-'0')<<+(LastRight[4]-}else}}
PutStr(LastRight);//informationwithnoerrorelse{if(mod==0)//if(cnt<mrt)Put//uploaderrortodistanceinti=1;for(;RsBuf[i-1]!='\r';LastRight[i]=RsBuf[i];}else{//disguisedas//multi-time//if(cnt> showerroradd(0xEF00+((LastRight[3]-'0')<< +(LastRight[4]-//reallyif(RsBuf[3]=='0'&&RsBuf[4]=='0'&&RsBuf[7]=={switch(RsBuf[8]){case'0':case
//versionshowerroradd(0xE100+((cmd[3]-'0')<<4)+-case
//checksumshowerroradd(0xE200+((cmd[3]-'0')<<4)+-case
//errorshowerroradd(0xE300+((cmd[3]-'0')<<4)+-case
//errorshowerroradd(0xE400+((cmd[3]-'0')<<4)+-case
//errorshowerroradd(0xE500+((cmd[3]-'0')<<4)+-}else
}
showerroradd(0xEd00+((cmd[3]-'0')<<4)+-showerroradd(0xEd00+((cmd[3]-'0')<<+(cmd[4]-}}}}}//generatechecksumvaluevoidchkgen(){unsignedintsum=0,sum=for(k=1;k<=10;k+=2)sum+=asc2num(echo[k],echo[k+}sum=256-sum%256;echo[11]=num2asc(sum>>4);echo[12]=num2asc(sum%16);sum=0;for(k=1;k<=12;k+=2)sum+=asc2num(cmd[k],cmd[k+}sum=256-sum%256;cmd[13]=num2asc(sum>>4);}//定时器05ms溢出中{TCNT0=0x64;//reloadcounter1秒钟软定时器计if(++clock1s>=V_T1s)clock1s_flag=1;//1秒到时,溢出标志置clock1s=}//50ms钟软定时器计if(++clock50ms>=1PORTC&=~(1<<PC1);//shutdowntheprivateline!clock50ms=0;}//20ms钟软定时器计if(++clock20ms>=V_T20ms&&begrec)clock20ms_flag=1;//20m秒到时,溢出标志置clock20ms=}//***检测到按键被按下(0)时,相应的指示灯亮//检测ifPINC&(1PC40)PC4,C口第4led1=led1=//检测ifPINC&(1PC50)PC5,C口第5led2=led2=//检测ifPINC&(1PC60)PC6,C口第6led3=led3=//检测ifPINC&(1PC70)PC7,C口第7led4=led4=//数码管扫描驱动指针1到4重复变换,每5ms间隔对一个数码管进行驱动,20ms一个if(++digi_scaner>=digi_scaner=output_selled1*16led2*32led3*64led4*128;//四个发光管送高四位switch(digi_scaner){case1:取第一个数码管显示output_sel+=case2:取第二个数码管显示output_sel+=case3:取第三个数码管显示output_sel+=case4:取第四个数码管显示output_sel+=}display_led(output_8seg,output_sel);//串转并输}ISR(USART_RXC_vect){RsBuf[RsBytes]=//startingif(RsBuf[RsBytes-1]=='~')RsBytes=1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026事业单位考试公基模拟题及答案
- 2026学年度执法资格考试综合练习及答案
- 2026年安徽国防科技职业学院单招职业技能考试模拟测试卷
- 2025年山西省网信管理岗专业知识测试题附答案
- 2025年混凝土工职业技能鉴定实操试题及解析
- 2025年初级电器钳工《理论知识》考试真题(含解析)
- 2025年采掘电钳工(高级)职业技能《理论知识》真题卷(附详细解析)
- 如何让“劳动”成为一种“教育”-对劳动与劳动教育的概念之思
- 电子绝缘与介质材料制造工安全管理模拟考核试卷含答案
- 2026年注册设备监理师设备监理综合实务真题参考答案
- 外耳道冲洗技术课件
- T/CASMES 284-2023水电解制氢系统运行和维护规范
- JZ/T 1-2015全屋定制家居产品
- 马文蔚《大学物理学》
- 无人机科普教育
- 常用避孕方法及护理PART课件
- 《老年人权益保障法》
- AQ/T 2048-2012 煤气隔断装置安全技术规范(正式版)
- (高清版)JTG 2111-2019 小交通量农村公路工程技术标准
- 小学生意外伤害的防范讲座
- 蚌埠市公安局招聘警务辅助人员考试真题2022
评论
0/150
提交评论