资源预览内容
第1页 / 共68页
第2页 / 共68页
第3页 / 共68页
第4页 / 共68页
第5页 / 共68页
第6页 / 共68页
第7页 / 共68页
第8页 / 共68页
第9页 / 共68页
第10页 / 共68页
亲,该文档总共68页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第第9章章 单片机的串行扩展技术单片机的串行扩展技术9.1 串行扩展概述串行扩展概述 新一代单片机技术的显著特点之一就是新一代单片机技术的显著特点之一就是串行扩展总线的推出。在没有专门的串行扩展串行扩展总线的推出。在没有专门的串行扩展总线时,除了可以使用总线时,除了可以使用UART串行口的移位寄串行口的移位寄存器方式扩展并行存器方式扩展并行I/O外,只能通过并行总线外,只能通过并行总线扩展外围器件。由于并行总线扩展时连线过多,扩展外围器件。由于并行总线扩展时连线过多,外围器件工作方式各异,外围器件与数据存储外围器件工作方式各异,外围器件与数据存储器混合编址等,外围器件在系统中软、硬件的器混合编址等,外围器件在系统中软、硬件的独立性较差,无法实现单片机应用系统的模块独立性较差,无法实现单片机应用系统的模块化、标准化设计。这给单片机应用系统设计带化、标准化设计。这给单片机应用系统设计带来了很大困难。来了很大困难。绣盗贪配错楷恭醚面懂垒态睫敲贞宙梧己摇蝎字议臂训姆旬叶帘薄哀前峡第9章单片机的串行扩展技术第9章单片机的串行扩展技术9.1.1串行扩展的特点串行扩展的特点 串行扩展总线技术是新一代单片机技术发展的一个显著特点。与并行扩展总线相比,串行扩展总线有突出的优点:电路结构简单,程序编写方便,易于实现用户系统软硬件的模块化、标准化等。9.1.2串行扩展的种类串行扩展的种类 目前在新一代单片机中使用的串行扩展接口有Motorola的SPI,NS公司的Microwire/Plus和Philips公司的I2C总线、其中总线I2C具有标准的规范以及众多带I2C 接口的外围器件,形成了较为完备的串行扩展总线。堰菊偷释驭俄哮炽忻裔疹佑巩跪足蓬杏漳汉录敲鸽曹咯越捍极竣项节蛛帽第9章单片机的串行扩展技术第9章单片机的串行扩展技术(1)I2C总线(两线制) I2C(IIC)总线是Philips公司推出的芯片间串行传输总线。它用两根线实现了完善的全双工同步数据传送,可以极为方便地构成多机系统和外围器件扩展系统。I2C总线采用了器件地址的硬件设置方法,通过软件寻址完全避免了器件的片选线寻址方法,从而使硬件系统具有简单灵活的扩展方法。(2)One-wire总线(一线制) One-wire总线是Dallas公司研制开发的一种协议。它利用一根线实现双向通信,由一个总线主节点、一个或多个从节点组成系统,通过一根信号线对从芯片进行数据的读取。每一个符合One-wire总线协议的从芯片都有一个唯一的地址,包括48位的序列号、8位的分类码和8位的CRC代码。主芯片对各个从芯片的寻找依据这64位的不同来进行。爬案般猎诱持醛沦童蔗每你钓巧振检鹰烘僧车毅肩绊棱句翼央蚀屑畅储扦第9章单片机的串行扩展技术第9章单片机的串行扩展技术(3)SPI串行扩展接口(三线制) SPI(Serial Peripheral Interface,串行外设接口)总线系统是Motorola公司提出的一种同步串行外设接口,允许MCU与各种外围设备以同步串行方式进行通信,其外围设备种类繁多,从最简单的TTL移位寄存器到复杂的LCD显示驱动器、网络控制器等,可谓应有尽有。SPI总线提供了可直接与各厂家生产的多种标准外围器件直接连接的接口,该接口一般使用4根线:串行时钟线SCK、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线SS。由于SPI系统总线只需3根公共的时钟数据线和若干位独立的从机选择线(依据从机数目而定),在SPI从设备较少而没有总线扩展能力的单片机系统中使用特别方便。即使在有总线扩展能力的系统中采用SPI设备也可以简化电路设计,省掉很多常规电路中的接口器件,从而提高了设计的可靠性。辜苏袖仲蹭央拌死啮捕淄知咖岳炳达春腻雕愚凸铜煮乏乳浅彰辩阶风陷屁第9章单片机的串行扩展技术第9章单片机的串行扩展技术(4)USB串行扩展接口 USB比较于其他传统接口的一个优势是即插即用的实现,即插即用(Plug-and-Play)也可以叫做热插拔(Hot plugging)。 USB接口的最高传输率可达12Mbit/s。一个USB口理论上可以连接127个USB设备,连接的方式也十分灵活。(5)Microware串行扩展接口 Microwire串行通信接口是NS公司提出的,Microwire是串行同步双工通信接口,由一根数据输出线、一根数据输入线和一根时钟线组成。所有从器件的时钟线连接到同一根SK线上,主器件向SK线发送时钟脉冲信号,从器件在时钟信号的同步沿作用下输出/输入数据。主器件的数据输出线DI和所有从器件的数据输入线相接,从器件的数据输出线都接到主器件的数据输入线DO上。与SPI接口类似,每个从器件也都需要另外提供一条片选通线CS。叁随蝴份比缅皖迪荫突亏渔硅吭爽耀踢披匪休弃队咏孜拎峪院酸殆南禽瞩第9章单片机的串行扩展技术第9章单片机的串行扩展技术(6)CAN总线 CAN,全称为“Controller Area Network”,即控制器局域网,是国际上应用最广泛的现场总线之一。最初,CAN被设计作为汽车环境中的微控制器,在车载各电子控制装置ECU之间交换信息,形成汽车电子控制网络。比如:发动机管理系统、变速箱控制器、仪表装备,由德国Bosch公司最先提出的电子主干系统中,均嵌入CAN控制装置。 一个由CAN总线构成的单一网络中,理论上可以挂接无数个节点。实际应用中,节点数目受网络硬件的电气特性所限制。CAN可提供高达1Mbit/s的数据传输速率,这使实时控制变得非常容易。另外,硬件的错误检定特性也增强了CAN的抗电磁干扰能力。 CAN是一种多主方式的串行通信总线,基本设计规范要求有高的位速率,高抗电磁干扰性,而且能够检测出产生的任何错误。当信号传输距离达10km时,CAN仍可提供高达50Kbit/s的数据传输速率。泼皑槐蝗博趟吐痒误逮棍肥嘴夜站谗赘忠祸负刻宇品真池豌劈瘦蹲乘激骆第9章单片机的串行扩展技术第9章单片机的串行扩展技术 9.2 I2C总线的串行扩展总线的串行扩展 单片机应用系统正向小型化、高可靠性、低功耗等方向发展。在一些设计功能较多的系统中,常需扩展多个外围接口器件。若采用传统的并行扩展方式,将占用较多的系统资源,且硬件电路复杂,成本高、功耗大、可靠性差。为此,Philips公司推出了一种高效、可靠、方便的串行扩展总线I2C总线。单片机系统采用I2C总线后将大大简化电路结构,增加硬件的灵活性,缩短产品开发周期,降低成本,提高系统可靠性。 I2C总线(Inter IC BUS)是Philips推出的芯片间串行传输总线。它以两根连线实现了完善的全双工同步数据传送,可以极方便地构成多机系统和外围器件扩展系统。I2C总线采用了器件地址的硬件设置方法,通过软件寻址完全避免了器件的片选线寻址方法,从而使硬件系统具有最简单而灵活的扩展方法。半峦烤神曙汝泵隅袁睹锹俊壤俱虚至桩虚瓮娟煮层倔褥肆懦要颠劳姚著斌第9章单片机的串行扩展技术第9章单片机的串行扩展技术9.2.1 I2C总线器件应用概述总线器件应用概述一、一、I2C总线器件总线器件 目前许多单片机厂商引进了Philips公司的I2C总线技术,推出了许多带有I2C总线接口的单片机。Philips公司除了生产具有I2C总线接口的单片机外,还推出了许多具备I2C总线的外部接口芯片,如24XX系列的EEPROM 、128字节的静态RAM芯片PCF8571、日历时钟芯片PCF8563、4位LED驱动芯片SAA1064、160段LCD驱动芯片PCF8576等多种类多系列接口芯片。二、二、I2C总线工作原理总线工作原理 采用I2C总线系统结构如下图9-1所示。雍萧偏浊文冷监慑驼巴歌卖碍炯冉眩寻些翠关精料松炬循狡哉尸恤由吾烟第9章单片机的串行扩展技术第9章单片机的串行扩展技术图图9-1 I2C总线系统结构图总线系统结构图 其中,SCL是时钟线,SDA是数据线。总线上的各器件都采用漏极开路结构与总线相连,因此,SCL、SDA均需接上拉电阻,总线在空闭状态下均保持高电平。 I2C总线支持多主和主从两种工作方式,通常为主从工作方式。在主从工作方式中,系统中只有一个主器件(单片机),总线上其它器件都是具有I2C总线的外围从器件。在主从工作方式中,主器件启动数据的发送(发出启动信号),产生时钟信号,发出停止信号。为了实现通信,每个从器件均有唯一一个器件地址,具体地址由I2C总线委员会分配。婆迎艺散既传近纷乌峦稚椿拟淮秧堰畸战贫雍木诚略巷私十嘎毛回券蝗沸第9章单片机的串行扩展技术第9章单片机的串行扩展技术(一)I2C总线工作方式 I2C总线上进行一次数据传输的通信格式如下图9-2所示。鞘衙濒痹坛洲沮邀铀囊垛流骂柄孺专抵寓躺响华溃匡芜无侯愚爵遵哟咬正第9章单片机的串行扩展技术第9章单片机的串行扩展技术(二)I2C总线数据传输方式模拟 目前已有多家公司生产具有I2C总线的单片机,如Philips 、Motorola、韩国三星、日本三菱等公司。这类单片机在工作时,总线状态由硬件监测,无须用户介入,应用非常方便。对于不具有I2C总线接口的MCS-51单片机,在单主机应用系统中可以通过软件模拟I2C总线的工作时序,在使用时,只需正确调用该软件包就可很方便地实现扩展I2C总线接口器件。I2C总线软件包组成:启动信号子程序STA停止信号子程序STOP发送应答位子程序MACK发送非应答位子程序MNACK应答位检查子程序CACK单字节发送子程序WRBYT单字节接收子程序RDBYTn字节发送子程序WRNBYTn字节接收子程序RDNBYT阁碾隧雇输亥蝗跑裁幅冒肺福绊咆沾渡幸见柱狸恫拷茸抗迪印膜摔七猩乍第9章单片机的串行扩展技术第9章单片机的串行扩展技术9.2.2 EEPROM AT24CXX系列系列 具有I2C总线接口的EEPROM 拥用多个厂家的多种类型产品。在此仅介绍ATMEL公司生产的AT24CXX系列EEPROM,主要型号有AT24C01/02/04/08/16,其对应的存储容量分别为1288/2568/5128/10248/20488。采用这类芯片可解决掉电数据保护问题,可对所存数据保存100年,并可多次擦写,擦写次数可达10万次。 在一些应用系统设计中,有时需要对工作数据进行掉电保护,如电子式电能表等智能化产品。若采用普通存储器,在掉电时需要备用电池供电,并需要在硬件上增加掉电检测电路,但存在电池不可靠及扩展存储芯片占用单片机过多端口的缺点。采用具有I2C总线接口的串行EEPROM器件可很好地解决掉电数据保持问题,且硬件电路简单。违羽恰吉糠裴啊橱朗梁滤及噪鸦拷谍血懒篱茁栅窜马编辙郝综染湾造顶泰第9章单片机的串行扩展技术第9章单片机的串行扩展技术一、现在以一、现在以AT24C02为例,讲述其结构及功能为例,讲述其结构及功能(一)(一)AT24C02的引脚功能的引脚功能 AT24C02芯片的常用封装形式有直插芯片的常用封装形式有直插(DIP8)式和贴片式和贴片(SO-8)式两种式两种, AT24C02直插式引脚图如下图直插式引脚图如下图9-3所示。所示。各引脚功能如下: 1脚,2脚,3脚(A0、A1、A2)-可编程地址输入端; 4脚(GND)-电源地; 5脚(SDA)-串行数据输入/输出端; 6脚(SCL)-串行时钟输入端; 7脚(WP)-写保护输入端, 用于硬件数据保护; 当其为低电平时,可以对整个存储器进行正常的读/写操作; 当其为高电平时,存储器具有写保护功能,但读操作不受影响。 8脚(VCC)-电源正端。吃氧晴妮娄角踞双伟芥碴妆锚揉冶隔舰坯篆吵蒂峪即芝表炳帖本妻老殿霞第9章单片机的串行扩展技术第9章单片机的串行扩展技术(二)AT24C02存储结构与寻址 AT24C02的存储容量为256B, 内部分成32页, 每页8B。操作时有两种寻址方式:芯片寻址和片内地址寻址。AT24C02的芯片地址为1010, 其地址控制字格式为1010A2A1A0D0.其中A2,A1,A0为可编程地址选择位。A2,A1,A0引脚接高、低电平后得到确定的三位编码,与1010形成7位编码,即为该器件的地址码。D0为芯片读写控制位,该位为0,表示对芯片进行写操作;该位为1,表示对芯片进行读操作。片内地址寻址可对内部256B中的任一个地址进行读/写操作, 其寻址范围为0X00-0Xff, 共256个寻址单元。(三)AT24C02读/写操作时序 串行EEPROM一般有两种写入方式: 一种是字节写入方式, 另一种是页写入方式。页写入方式允许在一个写周期内(10ms左右) 对一个字节到一页的若干字节进行编程写入,AT24C02的页面大小为8B。采用页写方式可提高写入效率,但也容易发生事故。AT24C02系列片内地址在接收到每一个数据字节后自动加1, 故装载一页以内数据字节时, 只需输入首地址。如果写到此页的最后一个字节, 主器件继续发送数据, 数据将重新从该页的首地写入, 进而造成原来的数据丢失, 这就是页地址空间的“上卷”现象。解决“上卷”的方法是:在第8个数据后将地址强制加1,或是将下一页的首地址重新赋给寄存器。阉怖甸帝抄撬应壹抵嗓刀纺状究唾部汹瞅弟雍松宰矩料汐菊疯囤烩诀漓游第9章单片机的串行扩展技术第9章单片机的串行扩展技术 1.字节写入方式:单片机在一次数据帧中只访问EEPROM一个单元。在这种方式下,单片机先发送启动信号,然后送一个字节的控制字,再送一个字节的存储器单元子地址,上述几个字节都得到EEPROM响应后,再发送8位数据,最后发送1位停止信号。发送格式如下图9-4所示。图图9-4 字节写入时序图字节写入时序图2.页写入方式:单片机在一个数据写周期内可以连续访问1页(8个)EEPROM存储单元。在该方式中,单片机先发送启动信号,接着送一个字节的控制字,再送1个字节的存储器单元地址,上述几个字节都得到EEPROM应答后就可以送最多1页的数据,并顺序存放在以指定起始地址开始的相继单元中,最后以停止信号结束,页写入帧格式如下图9-5所示。图图9-5 页写入时序图页写入时序图埠苫帧缎拭俱假芭向袍剐单镣巧狐殷派末寨拈竹禹克监他狄汗拐地研厘光第9章单片机的串行扩展技术第9章单片机的串行扩展技术3.指定地址读操作:读指定地址单元的数据。单片机在启动信号后先发送含有片选地址的写操作控制字,EEPROM应答后再发送1个(2KB以内的EEPROM)字节的指定单元的地址,EEPROM应答后再发送1个含有片选地址的读操作控制字,此时如果EEPROM作出应答,被访问单元的数据就会按SCL信号同步出现在串行数据/地址线SDA上。这种读操作的数据帧格式如下图9-6所示。图图9-6 指定地址字节读时序图指定地址字节读时序图4.指定地址连续读:此种方式的读地址控制与前面指定地址读相同。单片机接收到每个字节数据后应做出应答,只要EEPROM检测到应答信号,其内部的地址寄存器就自动加1指向下一单元,并顺序将指向的单元的数据送到SDA串行数据线上。当需要结束读操作时,单片机接收到数据后在需要应答的时刻发送一个非应答信号,接着再发送一个停止信号即可。这种读操作的数据帧格式如下图9-7所示。图图9-7 连续字节读时序图连续字节读时序图梦扼出凛介誓染漱恩徒牙然氟致饥镜刹荐簧顷奈废球疹诊较镑野殷水蜘伎第9章单片机的串行扩展技术第9章单片机的串行扩展技术二、二、AT24C系列存储卡简介系列存储卡简介(一)IC卡标准与引脚定义 IC卡标准与引脚定义如下图9-8所示。图图9-8 IC卡示意图卡示意图 1987年,国际标准化组织ISO专门为IC卡制定了国际标准:ISO/IEC7816-1、2、3、4、5、6,这些标准为IC卡在全世界范围内的推广和应用创造了规范化的前提和条件,使IC卡技术得到了飞速的发展。根据国际标准ISO 7816对接触式IC卡的规定,在IC卡的左上角封装有IC芯片,其上覆盖有6或8个触点和外部设备进行通信,见上图9-8。部分触点及其定义如下表9-1所示。朗问租随靳下东丝艾牢笋搞蒋鼻蜕焉恶朝聪殉地鼎迪拌访碉曙稍攻答嘶磅第9章单片机的串行扩展技术第9章单片机的串行扩展技术表表9-1 IC卡引脚定义卡引脚定义芯片触点触点定义功能C1VCC工作电压C2NC空脚C3SCL(CLK)串行时钟C4NC空脚C5GND地C6NC空脚C7SDA(I/O)串行数据(输入输出)C8NC空脚(二)AT24C系列存储卡型号与容量ATMEL公司生产的AT24C系列存储卡采用低功耗CMOS工艺制造,芯片容量规格比较齐全,工作电压选择多样化,操作方式标准化,因而使用方便,是目前应用较多的一种存储卡。这种卡实质就是前面介绍的AT24C系列存储器。该类IC卡型号与容量如下表9-2所示。表表9-2 AT24C9-2 AT24C系列存系列存储卡型号与容量卡型号与容量型号容量(K位)内部组态随机寻址地址位AT24C011128个8位字节7AT24C022256个8位字节8AT24C0442块256个8位字节9AT24C0884块256个8位字节10AT24C16168块256个8位字节11AT24C323232块128个8位字节12绰方坝秆欢姜睡祁痘该件慰冈鸳魁民枪贞尖瓦囤派迷学眉饲草乾球澄犬到第9章单片机的串行扩展技术第9章单片机的串行扩展技术(三)AT24C系列存储卡工作原理存储卡内部逻辑结构如下图9-9所示。其中A2、A1、A0为器件/页地址输入端,在IC卡芯片中,将此三端接地,并且不引出到触点上(如图中虚线所示)。(三)AT24C系列存储卡工作原理 存储卡内部逻辑结构如下图9-9所示。其中A2、A1、A0为器件/页地址输入端,在IC卡芯片中,将此三端接地,并且不引出到触点上(如图中虚线所示)。图图9-9 IC卡内部逻辑结构卡内部逻辑结构拖氖戈乃圃丰量堰损签绩哮暑肥雀玻梅塔鼻毅味已脉斯叭翔皮稗套吓迁鸭第9章单片机的串行扩展技术第9章单片机的串行扩展技术1.内部逻辑单元功能芯片信号线有两条:SCL时钟信号线和SDA数据信号线,数据传输采用I2C总线协议。当SCL为高电平期间,SDA上的数据信号有效;当SCL为低电平期间,允许SDA上的数据信号变化。启动与停止逻辑单元。当SCL为高电平期间,SDA从低电平上升为高电平的跳变信号作为I2C总线的停止信号;当SCL为高电平期间,SDA从高电平下降为低电平的跳变信号作为I2C总线的启动信号。串行控制逻辑单元。这是芯片正常工作的控制核心单元。该单元根据输入信号产生各种控制信号。在寻址操作时,它控制地址计数器加1并启动地址比较器工作;在进行写操作时,它控制升压/定时电路为EEPROM提供编程高压;在进行读操作时,它对输出/确认逻辑单元进行控制。地址/计数器单元。根据读/写控制信号及串行逻辑控制信号产生EEPROM单元地址,并分别送到X译码器进行字选(字长8位),送到Y译码器进行位选。升压定时单元。该单元为片内升压电路。在芯片采用单一电源供电情况下,它可将电源电压提升到1221.5V,以供作EEPROM编程高压。EEPROM存储单元。该单元为IC卡芯片的存储模块,其存储单元多少决定了卡片的存储容量。冒复绅杉罪涧腹苗跌啦禄率工凰晌瘁恐盎烫杀舷相跳潦常惯蔬写碎渍瞥氏第9章单片机的串行扩展技术第9章单片机的串行扩展技术2.芯片寻址方式器件地址与页面选择。IC卡芯片的器件地址为8位,即7位地址码,1位读/写控制码。如上图9-9可见,与普通24系列EEPROM集成电路相比,IC卡芯片的A2、A1、A0端均已在卡片内部接地,而没有引到外部触点上,在使用时,不同型号IC卡的器件地址码见下表9-3所示。R/R/R/R/R/R/IC卡型号容量(K)B7B6B5B4B3B2B1B0AT24C0111010000AT24C0221010000AT24C044101000P0AT24C08810100P1P0AT24C16161010P2P1P0AT24C32321010000对于容量为1K、2K的卡片,其器件地址是唯一的,无需进行页面选择。对于容量为4K、8K、16K的卡片,利用P2、P1、P0作为页面地址选择。不同容量的芯片,页面数不同,如AT24C08根据P1、P0的取值不同,可有0、1、2、3四个页面,每个页面有256个字节存储单元。对于容量为32K的卡片,没有采用页面寻址方式,而是采用直接寻址方式。字节寻址。在器件地址码后面,发送字节地址码。对于容量小于32K的卡片,字节地址码长度为一个字节(8位);对于容量为32K的卡片,采用2个8位数据字作为寻址码。第一个地址字只有低4位有效,此低4位与第二个字节的8位一起组成12位长的地址码,对4096个字节进行寻址。诬宿钩编桓魁碾碳瑞举顾变晚区氓蓉鸭渊闺铬子厩吼迢贬揍薛壕赛陨全贩第9章单片机的串行扩展技术第9章单片机的串行扩展技术3.读、写操作对这种IC卡的读、写操作实质上就是对普通AT24C系列EEPROM的读写,操作方式完全一样。9.2.3 AT24C02与单片机应用实例与单片机应用实例例题例题9-1:如图9-10所示,该电路实现的功能是开机次数统计。数码管初始显示“0”,复位后,数码管将无数字显示。当再次按下开机,CPU会从AT24C02里面调出保存的开机次数,并加1后显示在数码管上,如此反复。 图图9-10 AT24C02与单片机应用与单片机应用 伸洞虞表商揉驰刘脆与掺伍必潞娱候经翁讼逼杀衬磷哈泞践钙疯材坊烽镇第9章单片机的串行扩展技术第9章单片机的串行扩展技术解:解:程序如下。#include #include #define uchar unsigned char #define uint unsigned int #define OP_WRITE 0xa0 / 器件地址以及写入操作 #define OP_READ 0xa1 / 器件地址以及读取操作 uchar code display = 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 ; sbit SDA = P23; sbit SCL = P22; sbit SMG = P37;/定义数码管选择引脚void start(); void stop(); uchar shin(); bit shout(uchar write_data); void write_byte( uchar addr, uchar write_data); /void fill_byte(uchar fill_size,uchar fill_data); void delayms(uint ms); uchar read_current(); uchar read_random(uchar random_addr); #define delayNOP(); _nop_();_nop_();_nop_();_nop_(); 锋践引岗上遏心绞就万驴牲铡澜肩格勾封患翟秀煎辜粥叉浙抱礼忱嘴砌霍第9章单片机的串行扩展技术第9章单片机的串行扩展技术main(void) uchar i=1; SMG =0 ;/选数码管 SDA = 1; SCL = 1; i = read_random(1); /从AT24C02移出数据送到i暂存 if(i=9) i=0; else i+; write_byte(1,i); /写入新的数据到EEPROM P0=displayi; /显示 while(1); /停止等下一次开机或复位 /*/ void start() /开始位 SDA = 1; SCL = 1; delayNOP(); SDA = 0; delayNOP(); SCL = 0; /*/ 患守粉鼎匠茬蚌娃卞棺行寻侠腮患瞩狼蛮擅蒙企撅斑巡攘橡输查挛橡暗韦第9章单片机的串行扩展技术第9章单片机的串行扩展技术void stop() / 停止位 SDA = 0; delayNOP(); SCL = 1; delayNOP(); SDA = 1; /*/ uchar shin() / 从AT24C02移出数据到MCU uchar i,read_data; for(i = 0; i 8; i+) SCL = 1; read_data = 1; read_data |= SDA; SCL = 0; return(read_data); 拱节玛搬鬼谤叠董娜晋铆光结茂妻懒蠢蕊降晚极蕊汰赏睫劫屿弄蛰洪简醋第9章单片机的串行扩展技术第9章单片机的串行扩展技术/*/ bit shout(uchar write_data) / 从MCU移出数据到AT24C02 uchar i; bit ack_bit; for(i = 0; i 8; i+) / 循环移入8个位 SDA = (bit)(write_data & 0x80); _nop_(); SCL = 1; delayNOP(); SCL = 0; write_data = 1; SDA = 1; / 读取应答 delayNOP(); SCL = 1; delayNOP(); ack_bit = SDA; SCL = 0; return ack_bit; / 返回AT24C02应答位 肋须烤屑艘膳徘壮薄婿检戮闲葬整乃注隶拣并谣月懂蒲骚探贝嘿沸尊垃藉第9章单片机的串行扩展技术第9章单片机的串行扩展技术/*/ void write_byte(uchar addr, uchar write_data) / 在指定地址addr处写入数据write_data start(); shout(OP_WRITE); shout(addr); shout(write_data); stop(); delayms(10); / 写入周期 /*/ /*void fill_byte(uchar fill_size,uchar fill_data) / 填充数据fill_data到EEPROM内fill_size字节 uchar i; for(i = 0; i fill_size; i+) write_byte(i, fill_data); */氨佬柞哟侦埠荧缔张斌勾狸物鸯驯儒瘫浸艇赔堆痉二泰玖帧乘庙污萎畅剧第9章单片机的串行扩展技术第9章单片机的串行扩展技术/*/ uchar read_current() / 在当前地址读取 uchar read_data; start(); shout(OP_READ); read_data = shin(); stop(); return read_data; /*/ uchar read_random(uchar random_addr) / 在指定地址读取 start(); shout(OP_WRITE); shout(random_addr); return(read_current(); /*/ void delayms(uint ms) / 延时子程序 uchar k; while(ms-) for(k = 0; k 120; k+); 房其委择牙啼寻社佃料纲矢擞宫计权第鳖笼即莲舵烷仲住袄沈刨式倍臻潘第9章单片机的串行扩展技术第9章单片机的串行扩展技术9.3 单总线串行扩展单总线串行扩展9.3.1 DS18B20简述简述一、一、DS18B20的主要特性的主要特性1.适应电压范围更宽,电压范围在3.05.5V,在寄生电源方式下可由数据线供电。2.独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条线即可实现微处理器与DS18B20的双向通讯。3.DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。4.DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内。5.测温范围在-55+125,在-10+85时精度为0.5。6.可编程的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温。7.在9位分辨率时最多在 93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快。8.测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。9.负压特性:电源极性接反时,芯片不会因发热而烧毁, 但不能正常工作。蛙频奠籍练豹流啮栖稻亢梁呈董蜘贿其艾哥鲁梭云惺剁鞋式啥餐芳滇刹妨第9章单片机的串行扩展技术第9章单片机的串行扩展技术二、二、DS18B20的外形和内部结构的外形和内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM 、温度传感器、温度报警触发器TH和TL、配置寄存器。DS18B20的外形及管脚排列如下图9-11所示。PR-35封装封装 SOSI封装封装DS18B20引脚定义:(1)DQ为数字信号输入/输出端;(2)GND为电源地;(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。 图图9-11 DS18B20的外形及管脚排列的外形及管脚排列帜配耘天儿刃兢萝磺斤咙崩视睁汝菩苏潦允讶礼碘日串研婪衣札酱材蚂纺第9章单片机的串行扩展技术第9章单片机的串行扩展技术DS18B20内部结构如下图9-12所示。 DS18B20有4个主要的数据部件:(一)光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位 (28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。(二)DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以 0.0625/LSB形式表达,其中S为符号位。DS18B20温度格式如下表9-4所示。图图9-12 DS18B20内部结构内部结构 LS ByteMS ByteSSSSS表表9-4 DS18B20温度值格式表温度值格式表揩徐取惋砌乐牙泰陵勃烤柿伤斥就众书夹渭棚握戍樟耽谬锗桐拽绿动预漏第9章单片机的串行扩展技术第9章单片机的串行扩展技术这是12位转化后得到的12位数据,存储在DS18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0, 这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。例如:+125的数字输出为07D0H,+25.0625的数字输出为0191H;-25.0625的数字输出为FE6FH,-55的数字输出为FC90H。DS18B20温度数据转换如下表9-5所示。温度/二进制表示十六进制表示+1250000 0111 1101 000007D0H+850000 0101 0101 00000550H+25.06250000 0001 1001 00010191H+10.1250000 0000 1010 001000A2H+0.50000 0000 0000 10000008H00000 0000 0000 00000000H-0.51111 1111 1111 1000FFF8H-10.1251111 1111 0101 1110FF5EH-25.06251111 1110 0110 1111FE6FH-551111 1100 1001 0000FC90H表表9-5 DS18B20温度数据表温度数据表蛛鸳钡江沟巾射兰绩概呕易隙布蹬真匙篆哩坠熟烈伪伶豺绎穴凄钥混钉榜第9章单片机的串行扩展技术第9章单片机的串行扩展技术(三)DS18B20温度传感器的存储器 DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温触发器TH、低温度触发器TL和结构寄存器。(四)配置寄存器 配置寄存器该字节各位的意义如下表9-6所示。TMR1R011111表表9-6 配置寄存器结构配置寄存器结构 低五位一直都是“1”,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。DS18B20可以程序设定9-12位的分辨率,精度为0.5C。R1和R0用来设置分辨率,如下表9-7所示。(注意:DS18B20出厂时被设置为12位)表表9-7 温度分辨率设置表温度分辨率设置表R1R0分辨率温度最大转率换时间0 09位93.75ms0 110位187.5ms1 011位375ms1 112位750ms毁挺凸训躇湾蚜汹暇构弄浴熬脯喜蹿胸拱聊办败汪斤阎尼梆墟汲虽鼻卞瘤第9章单片机的串行扩展技术第9章单片机的串行扩展技术(五)高速暂存存储器高速暂存存储器由9个字节组成,其分配如下表9-8 所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表9-4所示。对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。表9-5是对应的一部分温度值。第8个字节是冗余检验字节。DS18B20高速暂存存储器分布如下表9-8所示。表表9-8 DS18B20暂存寄存器分布暂存寄存器分布寄存器内容字节地址温度值低位 (LS Byte)0温度值高位 (MS Byte)1高温限值(TH)2低温限值(TL)3配置寄存器4保留5保留6保留7CRC校验值8根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主CPU收到此信号表示复位成功。熏愿崔度忌刽劲时幂泉豆笑氦洛劫谓割驳宰埋馁拍纳堰豺张蠢椭津专飞炽第9章单片机的串行扩展技术第9章单片机的串行扩展技术三、三、DS18B20工作原理工作原理DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s 减为750ms。 DS18B20测温原理如图9-13所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图9-13中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。斜率累加器预置计数比较器低温度系数振荡器减法计数器1预置高温度系数振荡器减法计数器2减到0温度寄存器减到0加1停止图图9-13 DS18B20测温原理框图测温原理框图戍艘质乎疯侵倘骑缝侍誓夫澄鹰敲施酿讨途腾趣仿伪阴集幽污奔皖镣糯碱第9章单片机的串行扩展技术第9章单片机的串行扩展技术ROM指令表如下表9-9所示。 表表9-9 ROM指令表指令表指令约定代码功能读ROM33H读DS1820温度传感器ROM中的编码(即64位地址)符合ROM55H发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与该编码相对应的 DS1820 使之作出响应,为下一步对该 DS1820 的读写作准备。搜索 ROM0F0H用于确定挂接在同一总线上 DS1820 的个数和识别 64 位 ROM 地址。为操作各器件作好准备。跳过 ROM0CCH忽略 64 位 ROM 地址,直接向 DS1820 发温度变换命令。适用于单片工作。警告搜索命令0ECH执行后只有温度超过设定值上限或下限的片子才做出响应。RAM指令表如下表9-10所示。表表9-10 RAM指令表指令表指令约定代码功能温度变换44H启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75ms)。结果存入内部九字节RAM中。读暂存器0BEH读内部RAM中九字节的内容(高速暂存存储器)写暂存器4EH发出向内部RAM的第2、3字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。 复制暂存器48H将RAM中第2 、3字节的内容复制到EEPROM中。 重调 EEPROM0B8H将EEPROM中内容恢复到RAM中的第2 、3字节。 读供电方式0B4H读DS1820的供电模式。寄生供电时DS1820发送“ 0 ”,外接电源供电 DS1820发送“ 1 ”。 澄豺烃臭肠役凤傣叁蜕眉紧先绪叶财湍汉逮肪病烩稳戴逃以买诫侗布繁膀第9章单片机的串行扩展技术第9章单片机的串行扩展技术四、四、DS18B20使用中注意事项使用中注意事项DS18B20虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:1. 较小的硬件开销需要相对复杂的软件进行补偿。由于DS18B20与微处理器间采用串行数据传送,因此 ,在对DS18B20进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在使用PL/M、C等高级语言进行系统程序设计时,对 DS18B20操作部分最好采用汇编语言实现。2. 在DS18B20的有关资料中均未提及单总线上所挂DS18B20数量问题,容易使人误认为可以挂任意多个DS18B20,在实际应用中并非如此。当单总线上所挂DS18B20超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。3. 连接DS18B20的总线电缆是有长度限制的。试验中,当采用普通信号电缆传输长度超过50m时,读取的测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用DS18B20进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。4. 在测温程序设计中,向DS18B20发出温度转换命令后,程序总要等待DS18B20的返回信号,一旦某个DS18B20接触不好或断线,当程序读该DS18B20时,将没有返回信号,程序进入死循环。这一点在进行DS18B20硬件连接和软件设计时也要给予一定的重视。 测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接VCC和地线,屏蔽层在源端单点接地。咨屿岂宪猩就败茨减咐垦振蔽带贼掉着叹木攫投停抿涎测坠轴猛膜唯万眺第9章单片机的串行扩展技术第9章单片机的串行扩展技术9.3.2 DS18B20与单片机应用实例与单片机应用实例例题例题9-2:如图9-14所示,是一个实时测温电路。P2口接数码管的字型口,实现显示0-9数码的功能。P1.0-P1.2经74LS138译码器驱动数码管的字位口,实现个十百千等位置的选中。DS18B20的2脚(DQ)接P3.3,实现把实时温度传递给CPU,并显示在数码管上。图图9-14 DS18B20与单片机应用实例与单片机应用实例 晃觅侦引琶钳析景特叶玉占远衔呕打念汀静枪选妥沉速速井姿笔拼殊懊凉第9章单片机的串行扩展技术第9章单片机的串行扩展技术解:解:程序如下。#include #include #define uchar unsigned char#define uint unsigned intsbit DS=P33; /定义DS18B20接口int temp; uchar flag1; void display(unsigned char *lp,unsigned char lc);/数字的显示函数;lp为指向数组的地址,lc为显示的个数void delay();/延时子函数,5个空指令code unsigned char table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x40, 0x39, 0x00;/共阴数码管显示数的组成是 0-90-9有小数点的 - C 空 表unsigned char l_tmpdate8=0,0,10,0,0,0,0,0;/定义数组变量,并赋值1,2,3,4,5,6,7,8,就是本程序显示的八个数int tmp(void);void tmpchange(void);void tmpwritebyte(uchar dat);uchar tmpread(void);bit tmpreadbit(void);void dsreset(void);void delayb(uint count);哄生妨涎摆矿戳纷懦轩喳鹰匣掳孽和仆济嚏揽旭蹬钞即癌俄菩炯炎鄂榆矮第9章单片机的串行扩展技术第9章单片机的串行扩展技术void main() /主函数uchar i;int l_tmp; while(1) tmpchange(); /温度转换l_tmp=tmp();/读取温度值if(l_tmp0)l_tmpdate0=20;/判断温度为负温度,前面加-elsel_tmpdate0=l_tmp/1000;/显示百位,这里用1000,是因为我们之前乖以10了if(l_tmpdate0=0)l_tmpdate0=22;/判断温度为正温度且没有上百,前面不显示,查表第12是空l_tmp=l_tmp%1000;l_tmpdate1=l_tmp/100;/获取十位l_tmp=l_tmp%100;l_tmpdate2=l_tmp/10;/获取个位再l_tmpdate2+=10;/加入小数点,查表可得出有小数点的排在后10位,所以加10l_tmpdate3=l_tmp%10;/获取小数第一位l_tmpdate4=21;for(i=0;i10;i+)/循环输出10次,提高亮度display(l_tmpdate,5); 谨嫁帮译衔单邢州指肚退驭矗沫茄涟绚悲堰繁鼓报揪侣妊蛰觅觉案毗兼腹第9章单片机的串行扩展技术第9章单片机的串行扩展技术void display(unsigned char *lp,unsigned char lc)/显示unsigned char i;/定义变量P2=0;/端口2为输出P1=P1&0xF8;/将P1口的前3位输出0,对应138译门输入脚,全0为第一位数码管for(i=0;i0) i-; count-; 粹份芯蓑衡均赋演墅澳弯海抽串瀑堤骡句杨糠弊右湘波滴摄胳登怜皮氛嫁第9章单片机的串行扩展技术第9章单片机的串行扩展技术void dsreset(void) /DS18B20初始化 uint i; DS=0; i=103; while(i0)i-; DS=1; i=4; while(i0)i-;bit tmpreadbit(void) / 读一位 uint i; bit dat; DS=0;i+; /小延时一下 DS=1;i+;i+; dat=DS; i=8;while(i0)i-; return (dat);契醚勋酗顷蒋墟郝踏唉质罐披贿毫毕悍煮挂梗熟瞪漫氢源及乒太娠烛挟贫第9章单片机的串行扩展技术第9章单片机的串行扩展技术uchar tmpread(void) /读一个字节 uchar i,j,dat; dat=0; for(i=1;i=8;i+) j=tmpreadbit();dat=(j1); /读出的数据最低位在最前面,这样刚好 /一个字节在DAT里 return(dat); /将一个字节数据返回惋幼文床淆刊柬氛控围斌铡膨骨颇敢辊塑场找抄恐以巷扇枚啃否郁蝉碘汕第9章单片机的串行扩展技术第9章单片机的串行扩展技术void tmpwritebyte(uchar dat) /写一个字节到DS18B20里 uint i; uchar j; bit testb; for(j=1;j1; if(testb) / 写1部分 DS=0; i+;i+; DS=1; i=8;while(i0)i-; else DS=0; /写0部分 i=8;while(i0)i-; DS=1; i+;i+; 向郧丛旅史瞩妹谍财萎狱靛田统郑壳狞晓扰酞脂飘沤狙围宴晕捻统袒泄儡第9章单片机的串行扩展技术第9章单片机的串行扩展技术void tmpchange(void) /发送温度转换命令 dsreset(); /初始化DS18B20 delayb(1); /延时 tmpwritebyte(0xcc); / 跳过序列号命令 tmpwritebyte(0x44); /发送温度转换命令int tmp() /获得温度 float tt; uchar a,b; dsreset(); delayb(1); tmpwritebyte(0xcc); tmpwritebyte(0xbe); /发送读取数据命令 a=tmpread(); /连续读两个字节数据 b=tmpread(); temp=b; temp0;a-) for(b=60;b0;b-); 鞠菜痰密伙叮贫题朴聊射影魔诱温完额禹他瓣胁稽厩绅擅袄内绒弱周槛银第9章单片机的串行扩展技术第9章单片机的串行扩展技术 SCK MOSI MISO I/O MCU9.4 SPI总线串行扩展总线串行扩展9.4.1 SPI接口接口SPI(Serial Peripheral Interface-串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。SPI有三个寄存器分别为:控制寄存器SPCR,状态寄存器SPSR,数据寄存器SPDR。外围设备FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线CS(有的SPI接口芯片带有中断信号线INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。SPI接口的全称是Serial Peripheral Interface,意为串行外围接口,是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在EEPROM、FLASH、实时时钟、AD转换器,还有数字信号处理器和数字信号解码器之间。SPI接口是在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前,低位在后,为全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几Mbps。SPI串行扩展如下图9-15所表示,接口包括以下四种信号。图9-15 SPI9-15 SPI串行串行扩展示意展示意图SCKMOSIMISO雌溢仅摆妮剖丽些隶郧狡徽付逢芭迈矫饮契腻厩旭脖广绸负八肉唇努潭黔第9章单片机的串行扩展技术第9章单片机的串行扩展技术(1)MOSI:主器件数据输出,从器件数据输入(2)MISO:主器件数据输入,从器件数据输出(3)SCLK:时钟信号,由主器件产生(4)/CS:从器件使能信号,由主器件控制,有的IC会标注为CS(Chip select)在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从器件的系统中,每个从器件需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。SPI模块为了和外设进行数据交换,根据外设工作要求,其输出的串行同步时钟极性和相位可以进行配置。时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够用于选择两种不同的传输协议进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设间时钟相位和极性应该一致。SPI串行通信如图9-16所示。图图9-16 SPI串行通信示意图串行通信示意图忿触憋乓挪馋侨盲滋睡烦芋伪腋灸艾嗅似膊使监添酷瘁邢档攀正畏或谆侗第9章单片机的串行扩展技术第9章单片机的串行扩展技术优点:由于SPI系统总线一共只需34位数据线和控制线即可实现与具有SPI总线接口功能的各种I/O器件进行连接,而扩展并行总线则需要8根数据线、816位地址线、23位控制线,因此,采用SPI总线接口可以简化电路设计,节省很多常规电路中的接口器件和I/O口线,提高设计的可靠性。缺点:没有指定的流控制,没有应答机制确认是否接收到数据。应用:在MCS51系列等不具有SPI接口的单片机组成的智能仪器和工业测控系统中,当传输速度要求不是太高时,使用SPI总线可以增加应用系统接口器件的种类,提高应用系统的性能。9.4.2 DS1302简述简述 现在流行的串行时钟电路很多,如DS1302、 DS1307、PCF8485等,这些电路的接口简单、价格低廉、使用方便,被广泛地采用。实时时钟电路DS1302是DALLAS公司的一种具有涓细电流充电能力的电路,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768kHz晶振。而初酮阻猩研猫猫舶硫闺敲外身禹虎脑商堑浙睦阔仁拟未蓄壹彰藉顶卤浴第9章单片机的串行扩展技术第9章单片机的串行扩展技术一、一、DS1302的结构及工作原理的结构及工作原理DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。(一)DS1302的引脚功能及结构DS1302的引脚排列如图9-17所表示,其中Vcc1为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向)。SCLK为时钟输入端。图图9-17 DS1302的引脚排列图的引脚排列图额左粒灭告决客渭幅册疤抖然瘩蝉沽榔株伦哄帖全闸最烛延吹邹疏籍咱暇第9章单片机的串行扩展技术第9章单片机的串行扩展技术(二)DS1302的控制字节DS1302是SPI总线驱动方式,它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。要想与DS1302通信,首先要先了解DS1302的控制字, DS1302 的控制字如图9-18所示。765432101RAMA4A3A2A1A0RD图图9-18 DS1302控制字示意图控制字示意图位7:控制字的最高有效位,必须是逻辑1;如果它为0,则不能把数据写入到DS1302中。位6:如果为0,则表示存取日历时钟数据;如果为1,则表示存取RAM数据。位5-位1:指示操作单元的地址。位0:最低有效位,为0表示要进行写操作, 为1表示进行读操作。需要注意的是,控制字节总是从最低位开始输出。蘑摸凝掩柿芝谣悔环映测勾篮淬滑些都洒琵君狈诣国掩箩亦拓喉匣歉椰秸第9章单片机的串行扩展技术第9章单片机的串行扩展技术(三)数据输入输出I/O在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。DS1302的数据读写是通过I/O串行进行的,当进行一次读写操作时最少得读写两个字节:第一个字节是控制字节,就是一个命令,告诉DS1302是读还是写操作,是对RAM还是对CLOCK寄存器操作以及操作的址;第二个字节就是要读或写的数据了。 单字节写:在进行操作之前先得将CE(也可说是RST)置高电平,然后单片机将控制字的位0放I/O上,当I/O的数据稳定后,将SCLK置高电平 DS1302检测到SCLK的上升沿后就将I/O上的数据读取,然后单片机将SCLK置为低电平,再将控制字的位1放到I/O上。如此反复,将一个字节控制字的8个位传给DS1302,接下来就是传一个字节的数据给DS1302, 当传完数据后,单片机将CE置为低电平,操作结束。 单字节读:操作的一开始写控制字的过程和上面的单字节写操作是一样,但是单字节读操作在写控制字的最后一个位 SCLK还在高电平时,DS1302就将数据放到I/O上,单片机将SCLK置为低电平后数据锁存,单机机就可以读取I/O上的数据。如此反复,将一个字节的数据读入单片机。读与写操作的不同:写操作是在SCLK低电平时单片机将数据放到I/O上,当SCLK上升沿时DS1302读取;而读操作是在SCLK高电平时DS1302放数据到I/O上,将SCLK置为低电平后,单片机就可从I/O上读取数据。朋抑撩尘遇额淹痔列关涵咀彪捣阔傣越姑埠丢扔蓄潦志棘忻渔黄募泡桂澡第9章单片机的串行扩展技术第9章单片机的串行扩展技术(四)DS1302的寄存器1. 实时时钟/日历(12个字节)DS1302有关日历、时间的寄存器共有12个,其中有7个寄存器(读时81h8Dh,写时80h8Ch),存放的数据格式为BCD码形式,如图9-19所示。此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。12/读寄存器写寄存器BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0范围81h80hCH10秒秒00-5983h82h10分分00-5985h84h010时时1-12/0-23AM/PM87h86h0010日日1-3189h88h00010月月1-128Bh8Ah00000周日1-78Dh8Ch10年年00-998Fh8EhWP0000000-图图9-19 DS1302实时时钟实时时钟/日历日历细杂关刊江揍接地杨曰昏隘帮殃鸵诣嗓辈纳插瓦辫握昌跌衅咱陇硅钠唾离第9章单片机的串行扩展技术第9章单片机的串行扩展技术 小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。当为高电平时,选择12小时模式。在12小时模式时,位5是AM/PM选择位 ,当为1时,表示PM。在24小时模式时,位5是第二个10小时位。 秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。当该位置为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位置为0时,时钟开始运行。控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。在任何的对时钟和RAM的写操作之前,WP位必须为0。当WP位为1时,写保护位防止对任一寄存器的写操作。2.静态RAM(31个字节)DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。DS1302中附加31字节静态RAM的地址如表9-11所示。读地址写地址数据范围C1HC0H00-FFHC3HC2H00-FFHC5HC4H00-FFH.FDHFCH00-FFH表表9-11 DS1302静态静态RAM地址地址旱臣柠撑纬跑坦克向伸掏癣啤昼脏篆悍迷瞄貌疑慑筹见晶润仲酬晶滔翱猫第9章单片机的串行扩展技术第9章单片机的串行扩展技术二、二、DS1302实时显示时间的软硬件实时显示时间的软硬件DS1302与CPU的连接需要三条线,即SCLK(7)、I/O(6)、RST(5)。实际上,在调试程序时可以不加电容器,只加一个32.768kHz 的晶振即可。只是选择晶振时,不同的晶振,误差也较大。另外,还可以在上面的电路中加入DS18B20,同时显示实时温度。只要占用CPU一个端口即可。 LCD还可以换成LED,还可以使用10位多功能8段液晶显示模块LCM101,内含看门狗(WDT)/时钟发生器及两种频率的蜂鸣器驱动电路,并有内置显示RAM,可显示任意字段笔划,具有34线串行接口,可与任何单片机、IC接口。功耗低,显示状态时电流为2A (典型值),省电模式时小于1A,工作电压为2.4V-3.3V,显示清晰。三、调试中问题说明三、调试中问题说明DS1302 与微处理器进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高位Write Protect(D7)必须为逻辑1,如果D7=0,则禁止写DS1302,即写保护;D6=0,指定时钟数据,D6=1,指定RAM数据;D5-D1指定输入或输出的特定寄存器;最低位LSB(D0)为逻辑0,指定写操作(输入), D0=1,指定读操作(输出)。在DS1302的时钟日历或RAM进行数据传送时,DS1302必须首先发送命令字节。若进行单字节传送,8位命令字节传送结束之后,在下2个SCLK周期的上升沿输入数据字节,或在下8个SCLK周期的下降沿输出数据字节。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM寄存器,在此方式下可一次性读、写所有的RAM的31个字节。要特别说明的是备用电源Vcc1,可以用电池或者超级电容器(0.1F以上)。虽然DS1302在主电源掉电后的耗电很小,但是,如果要长时间保证时钟正常,最好选用小型充电电池。可以用老式电脑主板上的3.6V充电电池。如果断电时间较短(几小时或几天)时,就可以用漏电较小的普通电解电容器代替。100F就可以保证1小时的正常走时。DS1302在第一次加电后,必须进行初始化操作。初始化后就可以按正常方法调整时间。盖疚勿帧渴只熏斟她筐搏掇朵非饼酚种泥骂秆弛靡熟指谍孝哲豹逛渐手制第9章单片机的串行扩展技术第9章单片机的串行扩展技术四、特点及其应用四、特点及其应用DS1302存在时钟精度不高,易受环境影响,出现时钟混乱等缺点。DS1302可以用于数据记录,特别是对某些具有特殊意义的数据点的记录,能实现数据与出现该数据的时间同时记录。这种记录对长时间的连续测控系统结果的分析及对异常数据出现的原因的查找具有重要意义。传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此,只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且,某些测控系统可能不允许。但是,如果在系统中采用时钟芯片DS1302,则能很好地解决这个问题。9.4.2 DS1302与单片机应用实例与单片机应用实例例例9-3 如图9-20所示,该电路实现万年历功能。每隔5S,交替显示年月日-时分秒。分析:1.首先要通过8EH将写保护去掉,将日期、时间的初值写时各个寄存器 ;2.然后就可以对80H、82H、84H、86H、88H、8AH、8CH进行初值的写入,同时也通过秒寄存器将位7的CH值改成0,这样DS1302就开始运行了;3.将写保护寄存器再写为80H 防止误改写寄存器的值;4.不断读取80H-8CH的值,并将它们显示到数码管上。喝焦群候向问溶傲硒沪钒强湃伶茂岩施欢冕神贴龚邑泌听荤祸俯选滩岩拒第9章单片机的串行扩展技术第9章单片机的串行扩展技术图9-20 DS1302与单片机应用实例 岸弦鹃咬蝗蕉昭满疹靶要圭也劳痔辈琴草宣胡吹埋掐稻崎骸鸟析驻拾九搭第9章单片机的串行扩展技术第9章单片机的串行扩展技术解:解:程序如下。/*本程序采用外元件DS1302时钟IC,使用此IC不增加系统资源,要时钟时直接去读取就可以了*/#include #include sbit SCL2=P13;/SCL2定义为P1口的第3位脚,连接DS1302SCL和ADC0831SCL脚sbit SDA2=P14;/SDA2定义为P1口的第4位脚,连接DS1302SCL和ADC0831SDA脚/sbit CS2=P16;/CS2定义为P1口的第4位脚,连接ADC0831CS脚sbit RST = P15; / DS1302片选脚unsigned char l_tmpdate8=0x00,0x20,0x0a,0x1c,0x03,0x06,0x9,0;unsigned char l_tmpdisplay8=0x40,0x40,0x40,0x40,0x40,0x40,0x40,0;code unsigned char write_rtc_address7=0x80,0x82,0x84,0x86,0x88,0x8a,0x8c; code unsigned char read_rtc_address7=0x81,0x83,0x85,0x87,0x89,0x8b,0x8d;code unsigned char table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00; /共阴数码管 0-9 - 熄灭表慨世领迭千哭善敷暴猿涪隋旬书绩擎摧氯巾溢苫辽陋蛔议椿脉饶馒媒的氏第9章单片机的串行扩展技术第9章单片机的串行扩展技术void delay(); /延时子函数,5个空指令void display(unsigned char *lp,unsigned char lc);/数字的显示函数;lp为指向数组的地址,lc为显示的个数void Write_Ds1302_byte(unsigned char temp); void Write_Ds1302( unsigned char address,unsigned char dat );unsigned char Read_Ds1302 ( unsigned char address );void Read_RTC(void); /read RTC void Set_RTC(void); /set RTC void main(void) /入口函数Set_RTC();while(1)Read_RTC();switch (l_tmpdate0/5) /设计每个5秒交替显示:年月日-时分秒case 0:case 2:case 4:case 6:case 8:case 10:棉毗甄哦赴器歉哄药杂纸撼报智颊雀腮枕萍瑟辊步解系疏隶卢挪苛烛檄赃第9章单片机的串行扩展技术第9章单片机的串行扩展技术l_tmpdisplay0=l_tmpdate2/16;/数据的转换,因我们采用数码管0-9的显示,将数据分开l_tmpdisplay1=l_tmpdate2&0x0f;l_tmpdisplay2=10;/加入-l_tmpdisplay3=l_tmpdate1/16;l_tmpdisplay4=l_tmpdate1&0x0f;l_tmpdisplay5=10;l_tmpdisplay6=l_tmpdate0/16;l_tmpdisplay7=l_tmpdate0&0x0f;break;case 1:case 3:case 5:case 7:case 9:case 11:l_tmpdisplay0=l_tmpdate6/16;l_tmpdisplay1=l_tmpdate6&0x0f;l_tmpdisplay2=10;l_tmpdisplay3=l_tmpdate4/16;瓶晦际蹲领鸡裹依绘驮抵涡犁链疥吉啄廷慨远邱揉型涨密铅棵琵齐乖胞哼第9章单片机的串行扩展技术第9章单片机的串行扩展技术l_tmpdisplay4=l_tmpdate4&0x0f;l_tmpdisplay5=10;l_tmpdisplay6=l_tmpdate3/16;l_tmpdisplay7=l_tmpdate3&0x0f;break;default:break;display(l_tmpdisplay,8);void display(unsigned char *lp,unsigned char lc)/显示unsigned char i;/定义变量P2=0;/端口2为输出P1=P1&0xF8;/将P1口的前3位输出0,对应138译门输入脚,全0为第一位数码管for(i=0;ilc;i+)/循环显示P2=tablelpi;/查表法得到要显示数字的数码段delay();/延时P2=0;/清0端口,准备显示下位if(i=7)/检测显示完8位否,完成直接退出,不让P1口再加1,否则进位影响到第四位数据break;P1+;/下一位数码管么绸桂债研趾知锁孝外父疼诣沦用观腮汾咯奋松贵拦彼淳妄拐赂锰资坷禾第9章单片机的串行扩展技术第9章单片机的串行扩展技术void delay(void)/空5个指令unsigned char i=10;while(i)i-;void Write_Ds1302_Byte(unsigned char temp) unsigned char i; for (i=0;i=1; /右移一位 SCL2=1; 焕盛渊佩雪族帮岗汀米筛郡螟带充姑烽颧洽牛巍懂柒罐古湍堰眩哲琵众色第9章单片机的串行扩展技术第9章单片机的串行扩展技术/*/void Write_Ds1302( unsigned char address,unsigned char dat ) RST=0;_nop_(); SCL2=0;_nop_(); RST=1; _nop_(); /启动 Write_Ds1302_Byte(address);/发送地址 Write_Ds1302_Byte(dat);/发送数据 RST=0; /恢复/*/衍欠巩颁锰雄掣码颂算最难罩碟迷帛兢基础廓劲幽业这舵幌征谍揣歼哀锅第9章单片机的串行扩展技术第9章单片机的串行扩展技术unsigned char Read_Ds1302 ( unsigned char address ) unsigned char i,temp=0x00; RST=0;_nop_(); SCL2=0;_nop_(); RST=1;_nop_(); Write_Ds1302_Byte(address); for (i=0;i=1;/右移一位 RST=0;_nop_();SCL2=1;SDA2=0;return (temp);/返回擂功钟蒜藏钧之输缮湘赫顾跃靴嚏臣消执烛哇操亮瓢胞雷必盒损离递誊谆第9章单片机的串行扩展技术第9章单片机的串行扩展技术/*/void Read_RTC(void)/读取日历 unsigned char i,*p; p=read_rtc_address; /地址传递 for(i=0;i7;i+)/分7次读取年月日时分秒星期 l_tmpdatei=Read_Ds1302(*p); p+; /*/void Set_RTC(void)/设定日历unsigned char i,*p,tmp;for(i=0;i7;i+)tmp=l_tmpdatei/10;l_tmpdatei=l_tmpdatei%10;l_tmpdatei=l_tmpdatei+tmp*16; Write_Ds1302(0x8E,0X00); p=write_rtc_address;/传地址 for(i=0;i7;i+)/7次写入年月日时分秒星期 Write_Ds1302(*p,l_tmpdatei); p+; Write_Ds1302(0x8E,0x80);摩贰端烷吮兽呆隅捡色滔昂滑媳酞陨犬蜒帧消压萤绚陀云金绑洽摈胎手辟第9章单片机的串行扩展技术第9章单片机的串行扩展技术本章小结本章小结I2C总线是芯片间串行传输总线。它用两根线实现全双工同步数据传送,可方便地构成多机系统和外围器件扩展系统。I2C总线简单,结构紧凑,易于实现模块化和标准化。模拟I2C总线的应用程序可使没有I2C总线的单片机也能使用I2C总线技术。大大扩展了I2C总线器件的适用范围,使这些器件的使用不受系统中单片机必须带有I2C总线接口的限制。本章重点讲解了AT24C02、DS18B20、DS1302这三块芯片,分别作为I2C、One-wire、SPI这三种串行扩展的典型代表,及其与单片机的实际应用。本章介绍的例题应用非常广泛,请读者下点功夫掌握它。憾秉泵辖策禾区粮糠嚎桅伶祈楼荤缓讣汹卒谜趣侠谦阔猛扇间汛薪蓝愉熬第9章单片机的串行扩展技术第9章单片机的串行扩展技术习题习题1. 串行扩展有哪些种类?请简要说明。2. I2C总线启动条件是什么?停止条件是什么?3. I2C总线的数据传输方向如何控制?4. 简述I2C总线的数据传输方法。5. 单片机如何对I2C总线中的器件进行寻址?6. 简述温度传感器DS18B20的工作原理。7. 温度传感器DS18B20的温度分辨率如何进行设置?8. 简述温度传感器DS18B20的ROM指令和RAM指令。9. 简述SPI的特点及应用。10. 简述万年历DS1302的实时时钟/日历寄存器的控制字。峻航搭狠吴隋哗堤棵祈丑窒沦锈竟术疤仲耀总浮授蔼浙儿岩洞肝辫研罢晃第9章单片机的串行扩展技术第9章单片机的串行扩展技术
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号