多功能时间控制器_第1页
多功能时间控制器_第2页
多功能时间控制器_第3页
多功能时间控制器_第4页
多功能时间控制器_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1.1多功能智能钟的功能与设计要求目前大多数时间控制器往往只能单机工作,不能满足集体控制的要求;而在很多应用场合,要求时间控制器除了要具有比拟灵活的时间控制作用外,还能通过上位机连成一个网络体系,以便对分布在各处的时间控制器进行集中控制〔群控〕。本章设计的时间控制器的功能与特点如下:既能单机工作,又能通过上位机进行多机集中控制;每个单机可以按设定的时间表进行相应的控制动作;每个单机上的定时时间表,可通过一台PC机分别设定,设定的信息存放在串行的EE-PROM中,可以保存10年以上;6位LED显示屏,用作时钟显示;采用RS一485通信接口,可以满足远距离控制的需要;双休日可以自动停止报警。该时间控制器十分适应于需要控制的对象〔如电铃〕较为分散而且个数较多的场合,有效克服了手工控制或单独控制导致的对象间的时间误差,防止了工作上的混乱。只需1台普通PC机,通过通信电缆与各控制器联成RS-485拓扑网络。由此PC机作为上位机,借助通信软件将设定时间一一传送到各个控制器,就可以实现群控。当然,上位PC机必须外接RS-232/RS-485转接器。建议采用市售成品,将它直接插在串口上即可。1.2系统总体设计方案总体方案确实定按照功能要求,确定系统方案如图7一1所示。从图中可以看出,系统由微处理器模块、串行通信模块、时钟模块、数据存储模块及显示等人机界面模块组成。在方案设计中,遵循简洁至上的原那么;因此,所有的外围模块采用串行方式与微处理器模块接口。这里,微处理器采用ATMEIJ公司的89C2051,所有串行接口时序均通过软件模拟实现。.1硬件设计我的电子钟设计包括以下几局部:时钟模块,键盘输入模块,八位LED显示模块,电网频率测量模块、电网电压、电流、功率因数测量模块,环境温度测量模块,遥控关闹钟模块等。为了方便使用,把数据采集单独使用一个单片机系统,而把时钟闹钟系统由DS12C887与单片机设计完成。然后把温度,电网频率,电压,电流,功率,功率因数等数据通过串行通信传输给主单片机进行显示。.2键盘显示电路显示电路采用八片74HC164驱动8位LED的静态显示。一片并入串出芯片74HC165完成键盘扫描。由于74HC164与74HC165都是串行数据传输,大大节省了I/O,而且键显的速度要求并不高,这种设计可以很好地实现功能。.2系统中关键器件的选用.1串行数码管显示接口芯片MAX7219功能和性能说明MAx7219是美国MAxIM公司生产的串行输入/输出共阴极显示驱动器。该芯片可直接驱动最多8位7段数字数码管显示器,或64个LED和条形图显示器。‘自与微处理器的接口非常简单,仅用3个引脚与微处理器相应端连接,即可实现最高10MHz的串行通信接日。MAX7219的位选方式很有特色,允许用户选择多种译码方式译码选位,而且每个显示位都能个别寻址和刷新,而不需要重写其他的显示位,这使得软件编程十分简单、灵活。另外,它具有数字和模拟亮度控制以及与MOTOROLASPI,QSPI及NATIONALMICROWIRE串行口相兼容等特点。对于MAX7219,串行数据以16位数据包的形式从Din脚串行输人,在CLK的每一个上升沿一位一位地送人芯片内部16位移位存放器,而不管LOAD脚的状态如何。LOAD脚必须在第16个CLK上升沿出现的同时或之后,但在下一个CLK上升沿之前变为高电平,否那么移人的数据将丧失。因此,只须编程发送16位数据包,就能简单地操作数码管的位选以及段选,设置和改变MAX7219的工作模式。16位数据包的数据格式如下:其中:D7~D0为8位数据位,D7为最高位,D0为最低位;D11~D8为4位地址位;D15~D12为无关位,通常全取1。MAX7219通过D11~D8中4位地址位译码,可寻址14个内部存放器,分别是8个数码管显示位存放器、5个控制存放器及1个空操作存放器。数码管显示存放器由内部8×8静态RAM构成,操作者可直接对位存放器进行个别寻址,以刷新和保持数据,只需V+超过2V〔一般为+5V〕。控制存放器包括译码模式、亮度调节、扫描限制〔选择扫描位数〕、关断模式及显示测试存放器。存放器地址见表7-1。MAX7219的驱动程序首先必须对5个控制存放器初始设置,即初始化。各控制存放器设置含义如下:译码模式选择存放器〔地址=F9H〕。共有4种译码模式供选择。当数据位全0时,选择“非译码方式〞。在此方式下,8个数据位分别一一对应7个段和小数点。通常选择此方式。扫描限制存放器〔地址=FBH〕。用于设置显示的数码管个数〔1~8〕,当D2D1D0=111(D7D6DSD4D3无关)时,可接8个数码管。亮度调节存放器〔地址=FAH〕。共有16级选择,用于数码管显示亮度的强弱设置。关断模式存放器〔地址=FCH〕。有2种模式选择:1种是关断状态模式〔D0=0〕;1种是正常操作状态〔D0=1〕。通常选择正常操作状态。显示测试存放器〔地址=FFH〕。有2种选择用于设置数码管是测试状态还是正常操作状态:在测试状态时〔D0=1〕,各位全亮;一般选择正常操作状态〔D0=0〕。2.引脚说明MAX7219的引脚排列如图7-2所示。MAX7219的引脚说明如下:1:Din—串行数据输人端。在CLK的上升沿,数据被锁人芯片内部16位移位存放器。2,3,5?~8,10,11:DIG0~DIG7—8数码管位选线。从共阴数码管的公共端吸人电流。12:LOAD—数据锁人控制。在此引脚的上升沿将最后的16位数据锁入16位移位存放器。13:CLK—串行时钟输人,最高时钟频率为10MHz。在CLK的上升沿,数据被锁人内部移位存放器;在下降沿,数据从Dout被输出。14~17,20~23:SEGA~SEGDP-—7段驱动和小数点驱动。18:ISET—设置段电流峰值。通过一个电阻与V+相连,调节电阻值即可调节段电流峰值。19:V+—电源。一般为+5V。4,9:GND—地线。此2引脚必须同时接电源地。24:Dout—串行数据输出。输人到Din的数据在16.5个时钟周期后从此脚输出。该引脚用于级联。7.2.2.2x25045串行EEPROM信息存储芯片1.功能简介看门狗X25045的看门狗定时器对单片机提供独立的保护系统。该定时器共有200ms\600ms、1.4s三种定时时间,可由用户编程选择。在设定的时间内,假设单片机没有访问X25045〔即表示系统出现故障〕,看门狗将输出RESET信号,将其RESET输出端置为高电平。延时约200ms后,RESET端由高电平变为低电平,将单片机复位。电压监控上电时,电源电压高于4.5V后,经过约200ms的稳定时间,RESET信号由高电平变为低电平;掉电时,电源电压低于4.5V时,RESET信号立即变为高电平直至电源电压恢复稳定为止。这样就保证了单片机可靠复位以及电源电压不稳定时,单片机不会出现死机和误动作。串行E2PROMX25045片内带512个字节串行E2PROM,每个字节可擦写10万次以上,数据可保存100年以上,具有可编程块锁定功能。用三总线串行I/O接口便可进行读写操作。2.X25045特性具有可编程的看门狗定时器;低Vcc检测;直至VcC一IV复位信号有效;IMHz时钟频率;512×8位串行EEPROM;为低功耗CMOS,等待电流10µA,工作电流3mA;宽电源电压范围;具有块锁定功能:可以保护1/4,1/2或所有EEPROM阵列;具有片内偶然性写保护:上电和掉电保护电路、写锁存、写保护引脚;高可靠性:可写人100000次每字节,数据保存期为100年,ESD保护所有引脚均为2000V;.8引脚小型DIP封装8引脚SOIC封装,或14引脚TSSOP封装;是高电平有效复位。2.引脚定义X25045的引脚排列如图7一3所示。1:CS―芯片选择输人端。当CS为高电平时,X25045不被选择,SO输出引脚处于高阻状态,除非内部写操作正在进行,否那么X25045将处于等待电源方式〔standbypowermode〕;CS为低电平,那么使X25045工作,把它置于工作电源方式〔activepower而ode〕。应当注意。上电之后,在任何操作开始之前,需要CS从高电平至低电平的跳变。2:SO—串行输出端。SO是推挽串行数据输出引脚。在读周期内,数据在此引脚上移出,数据由串行时钟的下降沿同步输出。3:WP―写保护输人端。当WP为低电平时,向X25045的非易失性存储器写操作被禁止,但是器件的其他功能仍正常;当WP保持高电平时,所有的功能包括非易失性写操作都正常。在CS仍为低电平时,WP变为低电平将中断对X25045的写操作。如果内部写周期已经开始,WP变为低电平将不影响写操作。4:Vss―接地端。5:SI―串行输人端。SI是串行数据输入引脚。所有操作码、字节地址以及写人存储器的数据在此引脚上输人。数据由串行时钟的上升沿锁存。6:SCK―串行时钟输人端。串行时钟控制用于数据输人和输出的串行总线定时。操作码、地址或出现在SI引脚上的数据在时钟输人的上升沿锁存;而SO引脚上的数据在时钟输入的下降沿之后发生改变。7:RESET―复位输出端。X25045的RESET是高电平有效、漏极开路的输出端。只要VcC下降至低于最小VcC检测电平,RESET便变为高电平。它将保持高电平直至VcC上升到最小VcC检测电平200ms为止。如果允许看门狗定时器工作,且CS保持高电平或低电平的时间长于看门狗超时周期,那么RESET便变为高电平。CS的下降沿将引起复位。也即,X25045监视总线,如果在看门狗定时器预置的时间周期内没有总线的活动,它将提供复位信号输出。8:Vcc―电源电压输人端。3.指令集X25045指令集见表7一2。表中所有的指令、地址及数据都以MSB〔最高有效位〕在前的方式传送。读和写指令的位3包含了高地址位A8。表7一2X25045的指令集4.存放器及其分析(1)写使能锁存器X25045包含1个写使能锁存器。在内部进行写操作时,写使能锁存器必须被设置(SET)。WREN指令可以设置锁存器,而WRDI指令起复位锁存器的作用。上电情况、字节、页及状态存放器写周期完成以后,该锁存器被自动复位。如果WP变为低电平,锁存器也被复位。(2)状态存放器RDSR指令提供对状态存放器的访问。在任何时候都可以读状态存放器,即使在写周期也如此。状态存放器格式如下:D7D6D5D4D3D2DlDO//WDIWDOBL1BL0WELWIP当发出WREN,WRDI及RDSR命令时,不必发送字节地址或数据。“正在写〞WIP(writeinprocess)位表示X25045是否忙于写操作。当为“1〞时,写操作正在进行;当为“O〞时,没有写操作。在写期间,所有其他位全置为“1〞。WIP位是只读的。“写使能锁存〞WEL(writeenablelatch)位表示“写使能〞锁存器的状态。当设置为“1〞时,表示锁存器置位;当设置为“o〞时,表示锁存器复位。WEP位是只读的,它由WREN指令置位,由WRDI指令或成功地完成了写周期后复位。“块保护〞BL0或BL1(blockprotect)位表示所使用的保护范围。这些非易失性的位由发出WRSR指令来设置,允许用户选择4种保护级别之一。X25045分为4个1024位的段,可以锁定1个、2个或全部4个段,即在选定的段内可以读这些段,但是不能改变〔写〕数据。用BIL1和BL0的状态可以控制范围的划分,如表7一3所列。表7一3块保护地址范围“看门狗定时器〞WDo和WDI(watchdogtimer,〕位允许如表7一4所列那样设置看门狗的超时功能。这些非易失性的位由发出WRSR指令来设置。表7一4看门狗超时周期5.读/写操作及其时序(l)读时序从EEPROM中读取数据的操作,分以下几个步骤:①把CS拉低,以选择芯片;②发送8位的读〔READ〕指令到X25045,读指令的位3包含地址,用于选择器件;③送8位的字节地址;④在发出读操作和字地址之后,将选定地址的存储器中的数据移到SO线上。继续提供时钟脉冲,可连续读出接下的地址空间中的数据。每移出1B数据之后,字节地址自动增加到下一个较高地址。到达最高地址时,地址计数器翻转至00H,无限循环下去,直到把CS置为高电平,可以终止操作。图7-4(a)所示为从EEPROM阵列中读数据的操作时序。读状态存放器操作的时序见图7-4(b)。(b)读状态存放器的时序图7-4读EEPPROM的时序和读状态存放器的时序(2)写时序在写时序之前,必须先发出存器的操作步骤为:CS先被拉到低电平;②由时钟同步送入WREN指令;将CS变为高电平。时序见图7-5(a)。写数据到EEPROM操作时序见图7-5(b),操作过程为:拉低CS并保持在低电平;发送写指令〔WRITE〕;写数据。可以诈纯写多达4B的数据,但这4B必须驻留在同一页上。〔b〕字节写操作时序图7-5置位写使能存放器时序和字节写操作时序.3串行时钟芯片DS1302传统的时钟芯片主要有MC68HC68T,MC146818及LM8365等。这些器件引脚数多、体积大、占用口线较多。美国DALLAS公司推出的低功耗实时时钟芯片DS1302采用串行通信方式,只需3条线即可与单片机通信,而体积仅仅是上述时钟芯片的1/4且片内均含RAM,可增加系统的RAM。DS1302的时钟校准也较为容易,假设采用专用晶振器,几乎无须调整即可到达国家要求的时钟误差标准。DSI302是DSI202的升级产品,对于停电时只需对时钟电路单独供电的系统,该芯片正好具备电池充电和切换管理功能。最适用于长时间无人职守的监测控制系统或需经常记录某些具有特殊意义的数据及对应时间的场合。下面分别介绍DS1302的功能、工作原理及与MCS-51单片机的接口问题。Ds1302的主要功能DS1302慢速充电时钟芯片包括实时时钟/日历和3lB的静态RAM,经过一个简单的串行接口与单片机通信。实时时钟/日历提供秒、分、时旧、月及年等信息,对小于31天的月末的日期进行调整,还包括闰年的校正功能。时钟的运行可采用24h或带AM〔上午〕和PM〔下午〕的12h格式。DS1302与单片机的通信仅需3根线,即RST〔复位线〕、I/O〔数据线〕及SCLK〔串行时钟线〕。数据可按每次1B或多达31B的形式传送到时钟/RAM或从中送出。DS1302还有另外的功能,即用于主电源和备用电源相连接的双电源引脚V1和V2。DS1302由Vl或V2两者中较大者供电。当V2>Vl+0.2时,V2给DS1302供电;当V2<Vl时,Vl给DS1302供电。这样使系统在没有主电源的情况下,也能保持时钟的连续运行。此外,它还提供可编程的慢速充电功能,从而对备用电池进行充电。DS1302引脚排列如图7一6所示。图7一6DS13oZ引脚排列图2.DS1302的内部结构DS1302串行时钟芯片主要由移位存放器、控制逻辑、振荡器、实时时钟及3lB的RAM组成。为了开始任何数据的传送,必须把RST置为高电平,且把提供地址和命令信自、8位装人到移位存放器。在进行单字节传送或多字节传送时,开始的8位命令字节用于指定40B(31BRAM和9B时钟存放器)中哪个将被访问。在开始8个时钟周期把命令装人移位存放器之后,另外的时钟在读操作时输出数据,在写操作时输人数据。3.控制命令字节对DS1302进行任何数据传送时,第1个数据字节必须是命令字节,格式见图7-7。其最高有效位MSB〔位〕必须为逻辑1,如果它是0,禁止写DS1302。位6为逻辑0时,指定传送时钟/日历数据;逻辑1指定传送RAM数据。位1-5指定进行输人或输出的特定存放器的地址。最低有效位LSB〔位0〕为逻辑0时,指定进行写操作〔输人〕;逻辑l指定进行读操作〔输出〕。命令字节总是从最低有效位LSB〔位0〕开始输人。图7一7地址/命令字节4.数据传送方式和时序分析DSl302有单字节传送方式和多字节传送方式。通过把RST复位线驱动至高电平,启动所有的数据传送。RST输人线有2种功能:接通控制逻辑,允许地址/命令序列送人移位存放器;提供中止单字节或多字节数据传送的手段。数据输人时,时钟的上升数据必须有效,数据的输出在时钟的下降沿。如果RST为低电平,那么所有的数据传送将被中止,且I/O引脚变为高阻状态。上电时,在Vl>2.5V之前,RST必须为逻辑0。当把RST驱动至逻辑1状态时,SCLK必须为逻0。数据传送时序如图7-8所示。单字节数据输人跟随在写命令字节的8个SCLK周期之后,在随后的8个SCLK周期的上升沿输人数据字节,数据从位0开始输人。单字节数据输出跟随在输入读命令字节的8个SCI人周期之后,在随后的8个SCI术周期的下降沿输出数据字节。注意,被传送的第1个数据位发生在写命令字节的最后1位之后的第1个下降沿。只要RST保持为高电平,如果有额外SCLK周期,它们将重新发送数据字节。这一操作使DS1302具有连续的多字节方式的读能力。在SCLK为高电平期间,I/O引脚为高阻状态。数据从位。开始输出。DS1302的其他功能,在此不再赘述。图7-8数据传翰时序1.2.2.4RS-485通信接口芯片SN75LBC1841.RS一485总线RS-232是目前串行通信中最常用的总线,其标准RS-232C是美国电子工业协会EIA制定的串行物理接口协议。RS-232接口的特征是负逻辑、单端驱动、共地接收,只适用于点对点通信。当信号线上的电平为-3~15V时,表示逻辑“1";当信号线上的电平为+3~+15V时,表示逻辑“O〞。通信双方使用一条公共信号地线作电平参考。RS-232C标准规定,驱动器负载电容不超过2500pF,通信距离受此电容的限制。另外,RS-232属于单端信号传送,存在共地噪声和不能抑制的共模干扰;因此其通信距离限15m以下,通信速率限于20kbps以下。当要求通信距离为几十米至上千米时,目前广泛采用RS-485总线。RS-485总线示意图如图7-9所示。RS-485收/发器采用平衡驱动和差分接收,具有抑制共模干扰的能力。RS-485接收器灵敏度可达±200mV,因而大大延长了通信距离。在高达100kbPs速率下,电缆长度可达1200m;如果通信距离缩短,最大速率可达10MbPs。RS-485总线上允许带多个驱动器和接收器,可用于构建多点通信网络。图7-9RS-485总线示意图RS-485组网具有设备简单、价格低廉、能进行长距离通信的特点,故在工程工程中得到了广泛的应用。RS-485为串行平衡电压数字接口总线标准,与RS-422A总线标准根本相同,同样适用于DTE与DCE之间串行二进制信号点对多点的互联通信。不同之处在于:传输阻抗RL=54Ω,因此比RS-422A有更强的负载能力。多点互联可多达32个。接口芯片为DS3695〔或SN75176,UA96176〕,DS3696〔或SN75175,UA96177〕。MAX481,MAX483,MAX485,MAX487~491及MAX1487都是用于RS~485通信的低功耗收/发器,可实TTL与RS-485的电平转换。所有的器件都使用+5V的单一电源。RS-485为半双工通信。2.SN75LBC184接口芯片SN75LBC184是美国Tl公司生产的一种RS-485接口芯片。它使用单一电源,电压在3.0~5.5V范围内均能正常工作,可以完成TTL与RS-485之间的转换。其引脚图如图7-10所示。该芯片与普通的RS-485收/发器相比,有一个显著的特点,那就是片内A,B引脚接有高能量瞬变干扰保护装置,可以承受峰值400w〔典型值〕的过压瞬变。由于引起过压瞬变的原因通常是雷电、静电放电及电源系统开关干扰等,因而它能显著提高器件的可靠性。在环境比拟恶劣的场合,可直接与传输线相接,而不需要任何外加保护元件。该芯片还有一个独特的设计,即当输人端开路时,其输出为高电平。这样即使在接收器输人端电缆有开路故障时,也不影响系统的正常工作。另外,它的输入阻抗为RS-485标准输人阻抗〔≥〕24kΩ),故可在总线上连接64个收/发器。图7一10SN75LBC184的引脚排列7.2.3系统硬件设计1.系统电原理图设计及其说明(1)系统电原理图设计系统电原理图如图7-11所示。(2)系统原理分析图7一11系统电原理图显示界面本系统采用共阴数码管作为显示界面。由于时间显示的要求,一共用了6个,这样必须采用24h制。时间的分割符号“:〞由数码管中的小数点“.〞代替。考虑到控制器室外使用的需要,设计中采用超高亮显示数码管。系统复位由于系统采用X25045实现复位,因此无手动复位功能。系统在运行中出现死机及需要复位的情况下,如何实现复位?为了阐述这个问题,首先讨论单片机系统的几种复位形式。冷复位即上电复位,可通过开关电源来实现。这种复位方式不适用于无人职守的场合。软复位在系统尚能正常运行的情况下,可以通过上位机发送复位命令字节,由系统跳转到程序首实现软复位。当然,考虑到可靠性,复位命令宜采用2B以上。看门狗滋出复位在系统运行死机的情况下,系统的“喂狗〞功能丧失,不可能产生正常的“喂狗〞信号,从而引起系统自动溢出复位,以满足无人职守的需要。③光电隔离由于RS-485节点的距离往往比拟远,很难防止各种非共模干扰通过通信线路串人系统,引起系统故障。为了系统的可靠与平安,对RS-485与微处理器的接口电路实行光电隔离进行缓冲。另外,对象控制是通过P3.5和P3.7实现的。这2个口线也必须通过光电隔离后驱动继电器或固态继电器,实现对对象的隔离控制。时钟备用电源DS1302时钟芯片具有自动切换电源的特性。为了在系统+5V主电源消失的情况下,确保系统时钟正常运行,设计了一个3.6V的可充电锉电池,作为备用电源。正常情况下,由DS13O2对它进行涓流充电,以确保电池的长效性。7.3监控软件设计7.3.1监控软件结构结构系统监控软件的重点和难点是按时间控制表的时间顺序进行控制和串行通信中断子程序2局部.为了减少中断程序占用CPU的时间,串行中断只将接收到的本机时间表等信息写人系统开辟的缓冲区。时间表信息中还包括时间表累加和信息、2路控制输出标志信息等,前者主要用于判断时间表的有效性与完整性,防止错误动作;后者主要用于指定控制对象。监控程序的程序流程如图7一12所示。图7-12系统监控程序流程2.关键子程序设计MAX7219的初始化及读/写子程序初始MAX7219的程序流程如图7-13所示。按照图7-13,送完所有控制存放器的地址和相应的控制命令之后,再按同样的方法送待显示的数据,每次先送某个数码管的地址字节,后送待显示的数据字节。由于控制存放器和数据显示存放器全部单独编址,所以在送控制字或送显示数据时,均没有规定其先后顺序。图7-13MAX721,的初始化流程如何用51单片机的普通I/O端口控制MAX7219呢?关键是要编写51单片机向MAX7219写1B的子程序。应用单片机位操作指令能寻址累加器A各位的指令编程。累加器A中D7~D0各位对应的地址分别为E7,E6,…E0,以此分别对D7,D6,…D0位进行判断,判断某位为1还是为0,分别调写1和写0的子程序WMI和WM0。下面简要分析51单片机向MAX7219写1B的子程序,有关指令的分析说明见程序清单后的注释。程序清单如下:;**************************************;写字节子程序WMAX;占用存放器ACC;;**************************************DINEQUPI.6CLKEQUPI.4WMAX:JBE7,W7;判是否为lLCALLWM0;不是,那么调用写“0〞子程序LJMPN7W7:LCALLWMI;是,那么调用写“1〞子程序N7:JBE6,W6LCALLWM0LJMPN6W6:LCALLWM1N6:JBE5,W5LCALLWM0LGMPN5W5:LCALLWM1N5:JBE4,W4LCALLWM0LJMPN4W4:LCALLWM1N4:JBE3,W3LCALLWM0LJMPN3W3:LCALLWM1N3:JBE2,W2JCALLWM0LJMPN2W2:LCALLWM1N2:JBE1,W1LCALLWM0LJMPN1W1:LCALLWM1N1:JBE0,W0LCALLWM0LJMPN0W0:LCALLWM1N0:CLRCLKCLRDINRET;**************************************;写“1〞子程序;**************************************WM1;CLRCLKSETBDIN;送出“1〞NOPSETBCLK;产生CLK的下降沿RET;**************************************WM0;CLRCLKCLRDIN;送出“0〞NOPSETBCLK;产生CLK的下降沿NOPNOPCLRCLK;产生CLK的下降沿RET〔2〕X25045的初始化及读/写子程序对X25045的操作包括写状态存放器、写数据、读状态存放器及读数据等。这里仅介绍对X25045写数据程序及其相关程序的设计。;X25045引脚定义如下SCKEQUP2.3;串行时钟输入SIEQUP2.4;串行数据输入SOEQUP2.6;串行数据输出CSEQUP2.7;片选输入;其中写保护输入WP始终接高电平;状态存放器及各命令字节定义STATUS_REGEQU#00000011BWR1TE_INSTEQU#00000010BRDSR_INSTEQU#00000101BWREN_INSTEQU#00000110BWRSR_INSTEQU#00000001BWRDI_INSTEQU#00000100B;**************************************;写1B数据X25045种的子程序WRONE;数据在A中,地址在DPTR种;占用存放器;ACC,DPTR;**************************************WRONE:PUSHACC;待写数据保护LCALLWREN;WRITEENABLECLRSCK;X25045的SCK置低MOVA,WRITE_INSTMOVB,DPHMOVC,B.0MOVACC.3,C;DPH的最低位〔A8〕送ACC.3LCALLOUTBYT;送含地址高位的写命令MOVA,DPLLCALLOUTBYT;送低8位地址POPACCLCALLOUTBYT;写1B数据CLRSCK;X25045的SCK置低STEBCS;片选CS置高,无效RET;**************************************;设置写使能锁存器WREN子程序〔即允许写操作〕;**************************************WREN:CLRCSCLRSCKMOVA,WREN_INSTLCALLOUTBYT;送写使能命令WRENSETBCSCLRSCKRET;**************************************;给X25045写入1B地址或数据子程序OUTBYT;欲写内容A中;占用存放器:ACC,B;**************************************OUTBYT:MOVB,#081;置循环次数8OUTBYT1:CLRSCKRLCA;ACC的最高位送CyMOVSI,C;Cy送X25045的SISETBSCKDJNZB,OUTBYT1;循环8次,8bitsCLRSI;X25045DESI置低RET;**************************************;功能:读X25045状态存放器,等待内部写;入口条件:R6的数据事等待延时时间;出口信息:WIP=1,正在写;WIP=0,写完成;占用资源:R6,A,B,PSW;**************************************RDS045:MOVR6,0FFH;循环次数送入R6RDS01:CLRSCKNOPCLRCS;选中X25045NOPMOVA,RDSR_INST;05H,读X25045状态存放器命令送ALCALLOUTBYT;调用X25045写入1B子程序LCALLINBYT;调用X25045读出1B子程序SETBCS;不选中X25045JNBACC.0.DS02;WIP=`1正在写;WIP=0,写完成DJNZR6,DS01RDS02:RET;**************************************;功能:向X25045写入一批数据子程序W045;入口条件:R0的内容伟CPU内存的地址;R1的内容事X25045的待写地址,R3事待写数据的长度R4的内容事02H或0AH,表示写命令的执行区域;出口信息:R3的内容为0;占用资源:A,B,PSW,R0,R1,R2,R3,R4;**************************************W045:CLRSCKNOPCLRCSNOPMOVA,WREN_INST;#06H,写允许命令送入ALCALLOUTBYT;调用向X25045写入1B子程序SETBCSNOPCLRCSMOVA,R4;命令送入ALCALLOUTBYT;调用X25045写入1B子程序MOVA,R1;X25045的首地址送入ALCALLOUTBYT;调用X25045写入1B子程序W0450MOVA,@R0;待写数据送入ALCALLOUTBYT;调用X25045写入1B子程序INCR0;调整CPU内数据存储区的位置DJNZR3,W0450;判断这批数据事否完整SETBCS;批量数据写完,不选中X25045RET;**************************************;功能:向X25045读出一批数据子程序;入口条件:R0的内容伟CPU内存的地址R1的内容是X25045的待写地址,R3是待写数据的长度R4的内容是03H或0BH,表示写命令的执行区域;出口信息:R3的内容为0;占用资源:A,S,PSW,R0,R1,R2,R3,R4;**************************************R045:CLRSCKNOPCLRCSNOPMOVA,R4;命令送入ALCALLOUTBYT;X25045写入8B子程序MOVA,R1;对X25045的操作首地址送入ALCALLOUTBYT;X25045写入8B子程序R0451:LCALLINBYT;调用读出8位数据子程序MOV@R0,A;读出的数据送入CPU内存INCR0;调整CPU内部存放数据的位置DJNZR3,R0451;数据未读完,跳转SFTBCS;数据读完,不选中X25045RET;**************************************;功能:从X25045中读出8位数据子程序;出口信息:A的内容为读出的8位数据;占用资源:B,PSW;**************************************INBYT:MOVB,#08HINBYT:CLRSCKNOPMOVMOVC,SONOPSETBSCKRLCANOPDJNZB,INBYTCLRSCKRET〔3〕DS1302的初始化及读/写子程序实时时钟芯片DS1302的初始化及其读/写程序设计的关键是要遵循其时序要求。这里讨论有关子程序模块的设计。设计中的有关要点参见程序清单的注释。;**************************************T_CLKEQUP3.3;实时时钟时钟线引脚T_IOEQUP3.4;实时时钟数据线引脚T_RSTEQUP3.2;实时时钟复位线引脚;**************************************;子程序名:Set1302;功能:设置DS1302初始时间,并启动计时;说明:;调用:RTInputbyte;入口参数:初始时间在Second,Minute,Hour,Day,Month,Week,Year〔地址连续〕;返回值:无;影响资源:A,B,R0,R1,R4,R7;**************************************Set1302:CLRT_RSTCLRT_CLKSETBT_RSTMOVB,#8EH;控制存放器LCALLRTInputByteMOVB,#00H;写操作前WP=0LCALLRTInputByteSETBT_CLKCLRT_RSTMOVR0,#Second;MOVR7,#7;秒、分、时、日、月、星期、年MOVR1,#80H;秒写地址Set13021:CLRT_RSTCLRT_CLKSETBT_RSTMOVB,R1;写秒、分、时、日、月、星期、年地址LCALLRTInputByteMOVA,@R0;写秒数据MOVB,ALCALLRTInputByteINCR0INCR1INCR1SETBT_CLKCLRT_RSTDJNZR7,Set13021CLRT_RSTCLRT_CLKSETBT_RSTMOVB,#8EH;控制存放器LCALLRTInputByteMOVB,#80H;控制,WP=1,写保护LCALLRTInputByteSETBT_CLKCLRT_RSTRET;**************************************;子程序名:Get1302;功能:从DS1302读时间;说明:;调用:RTInputByte,RTOutputBte;入口参数:时间保存在Second,Minute,Hour,Day,Month,Week,Year;返回值:无;影响资源:A,B,R0,R4,R7;**************************************Get1302:MOVR0,#SecondMOVR7,#7MOVR1,#81H;秒地址Get13021:CLRT_RSTCLRT_CLKSETBT_RSTMOVB,R1;秒、分、时、日、月、星期、年地址LCALLRTInputByteLCALLRTOutputByteMOV@R0,A;秒INCR0INCR1INCR1SETBT_CLKCLRT_RSTDJNZR7,Get13021RET;**************************************;写13021B子程序;**************************************RTInputByte:MOVR4,#8Inbitl:MOVA,BRRCAMOVB,AMOVT_IO,CSETBT_CLKCLRT_CLKDJNZR4,InbitlRET;**************************************;读13021B子程序;**************************************RTOutputByte:MOVR4,#8Outbitl:MOVC,T_IORRCASETBT_CLKCLRT_CLKDJNZR4,OutbitlRET(4)RS一485通信接口程序设计主从式半双工通信方式系统传送数据采用主从站的方法。主机可以是PC机、工控机或单片机。每个从机拥有自己固定的地址,由主机控制完成网上的每一次通信。开始时所有从机复位,即处于监听状态,等待主机的呼叫。当主机向网上发出某一从机的地址时,所有从机接收到该地址并与自己的地址相比拟。如果相符,说明主机在呼叫自己,应发回应答信号,表示准备好开始接收后面的命令和数据;否那么不予理睬,继续监听呼叫地址。主机收到从机的应答后,那么开始一次通信。通信完毕,从机继续处于监听状态,等待呼叫。由于使用半双工方式,RS-485接口芯片的SN75LBC184的A,B为RS-485总线接口;DI是发送端,RO为接收端,分别与单片机串行口的TXD,RXD连接;RE,DE为收/发使能端,由单片机的Pl.7口作为收/发控制。网络拓朴原理可用图7一14表示。图7一14RS一485拓朴结构通信网络协议SN75LBC184仅能保证在物理层上二进制信号流的畅通。为了能使具体的命令、数据在一网络上正确地传输,在数据链路层必须提供一定的网络协议,保证在物理层的比特流出现错误时,进行检测和校正,同时实现生成数据帧和命令帧的功能。主机发出的信息分为地址和数据,必须区分开。单片机串行口模式3是波特率可变的9位通信方式,可编程位〔TB8〕由主机单片机自动打包区别地址和数据。TBS为1,表示地址字节;否那么是数据字节。从机接收时那么根据这一位来区别地址和数据。通信开始前,所有的从机处于复位状态,监听主机的地址呼叫。FFH的呼叫地址将使所有的从机复位。这时的从机只对TBS为1的地址字节敏感,对数据字节不予理睬。如果有地址呼叫,那么中断所有的从机。每个从机都把接收到的呼叫地址和本机地址相比拟,如果相符,那么该从机开始接收数据帧;其他从机保持不变,后面的数据字节由于TB8为O,它们不接收,继续监听地址呼叫。通信的从机完成通信后,自动转人复位状态。通信的数据长度必定大于1B,必须将它们合成一帧。网络数据协议帧的格式如表7-5所列。第1局部只有1B,代表该帧的长度为N+2。第2局部是N个数据的数据包。具体地说,当主机发给从机时,数据包包括命令字及参数;当从机回送给主机时,包括状态字以及必要的数据。最后1部处是采用CCITT(consultativecommitteeinternationalfortelephonyandtelegraph,国际电报咨询委员会)的CRC(cyclicredundancycheek,循环冗余校验)码,长度是2B。通信接口程序设计按照网络协议的帧格式编写的通信接口程序,通过物理层最终完成主机与从机之间的数据交换。主机和各从机间传送的命令和数据是二进制的直接传送。RS-485通信接口程序包括主机程序和从机程序。由于主机为PC机,因此其程序不予讨论,可基于VB开发。这里仅讨论从机〔即本系统〕局部的程序设计。为了提高从机响应的灵敏度,采用中断方式进行接收与发送通信。为了减少现场保护的工作量,中断子程序采用了存放器组切换方式。串行通信使用1组,主程序使用O组,相互之间互不干扰。有关分析参见程序注释。;**************************************;发送/接受控制信号SFCTRLEQUP1.7;本通信节点地址定义ADDRESSEQU01H;通信所需变量定义;**************************************;主程序串行通信的初始化MAIN:MOVSP,#60HMOVPCON,#00H;SMODE=0MOVTMOD,#20H;定时器1设为模式2〔波特率发生器〕CLREAMOVTH1,#0F3H;定时起始值,6MHz晶振时波特率1200bpsMOVSCON,#0D8H;串行口模式3,TB8=1发送地址呼叫SETBTR1SETBEA〔其他初始化〕〔其他处理程序〕TXSETBRS0;选择1组工作存放器PUSGACCCLRR1;清接收标志CLRES;关闭串行口中断CLRSFCTRL;使485处于接收方式MOVA,SBUF;接受数据MOVB,A;数据暂存XRLA,#0FFH;判是否复位命令〔字节0FFH〕JNZTX_1;不是,那么转SETBSM2;是,那么进行软复位处理SETBES〔设置系统软复位标志,以便系统进行软复位处理〕POPACC;恢复现场CLRR

温馨提示

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

评论

0/150

提交评论