首页 单片机的串行扩展技术

单片机的串行扩展技术

举报
开通vip

单片机的串行扩展技术第9章 单片机的串行扩展技术9.1串行扩展概述新一代单片机技术的显著特点之一就是串行扩展总线的推出。在没有专门的串行扩展总线时,除了可以使用UART串行口的移位寄存器方式扩展并行I/O外,只能通过并行总线扩展外围器件。由于并行总线扩展时连线过多,外围器件工作方式各异,外围器件与数据存储器混合编址等,外围器件在系统中软、硬件的独立性较差,无法实现单片机应用系统的模块化、标准化设计。这给单片机应用系统设计带来了很大困难。9.1.1串行扩展的特点串行扩展总线技术是新一代单片机技术发展的一个显著特点。与并行扩展总线相比,串...

单片机的串行扩展技术
第9章 单片机的串行扩展技术9.1串行扩展概述新一代单片机技术的显著特点之一就是串行扩展总线的推出。在没有专门的串行扩展总线时,除了可以使用UART串行口的移位寄存器方式扩展并行I/O外,只能通过并行总线扩展外围器件。由于并行总线扩展时连线过多,外围器件工作方式各异,外围器件与数据存储器混合编址等,外围器件在系统中软、硬件的独立性较差,无法实现单片机应用系统的模块化、标准化 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 。这给单片机应用系统设计带来了很大困难。9.1.1串行扩展的特点串行扩展总线技术是新一代单片机技术发展的一个显著特点。与并行扩展总线相比,串行扩展总线有突出的优点:电路结构简单,程序编写方便,易于实现用户系统软硬件的模块化、标准化等。1讲9.1.2串行扩展的种类 目前在新一代单片机中使用的串行扩展接口有Motorola的SPI,NS公司的Microwire/Plus和Philips公司的I2C总线、其中总线I2C具有标准的 规范 编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载 以及众多带I2C接口的外围器件,形成了较为完备的串行扩展总线。(1)I2C总线(两线制)I2C(IIC)总线是Philips公司推出的芯片间串行传输总线。它用两根线实现了完善的全双工同步数据传送,可以极为方便地构成多机系统和外围器件扩展系统。I2C总线采用了器件地址的硬件设置方法,通过软件寻址完全避免了器件的片选线寻址方法,从而使硬件系统具有简单灵活的扩展方法。(2)One-wire总线(一线制)One-wire总线是Dallas公司研制开发的一种 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 。它利用一根线实现双向通信,由一个总线主节点、一个或多个从节点组成系统,通过一根信号线对从芯片进行数据的读取。每一个符合One-wire总线协议的从芯片都有一个唯一的地址,包括48位的序列号、8位的分类码和8位的CRC代码。主芯片对各个从芯片的寻找依据这64位的不同来进行。(3)SPI串行扩展接口(三线制)  SPI(SerialPeripheralInterface,串行外设接口)总线系统是Motorola公司提出的一种同步串行外设接口,允许MCU与各种外围设备以同步串行方式进行通信,其外围设备种类繁多,从最简单的TTL移位寄存器到复杂的LCD显示驱动器、网络控制器等,可谓应有尽有。SPI总线提供了可直接与各厂家生产的多种标准外围器件直接连接的接口,该接口一般使用4根线:串行时钟线SCK、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线SS。由于SPI系统总线只需3根公共的时钟数据线和若干位独立的从机选择线(依据从机数目而定),在SPI从设备较少而没有总线扩展能力的单片机系统中使用特别方便。即使在有总线扩展能力的系统中采用SPI设备也可以简化电路设计,省掉很多常规电路中的接口器件,从而提高了设计的可靠性。(4)USB串行扩展接口USB比较于其他传统接口的一个优势是即插即用的实现,即插即用(Plug-and-Play)也可以叫做热插拔(Hotplugging)。USB接口的最高传输率可达12Mbit/s。一个USB口理论上可以连接127个USB设备,连接的方式也十分灵活。(5)Microware串行扩展接口Microwire串行通信接口是NS公司提出的,Microwire是串行同步双工通信接口,由一根数据输出线、一根数据输入线和一根时钟线组成。所有从器件的时钟线连接到同一根SCK线上,主器件向SCK线发送时钟脉冲信号,从器件在时钟信号的同步沿作用下输出/输入数据。主器件的数据输出线DI和所有从器件的数据输入线相接,从器件的数据输出线都接到主器件的数据输入线DO上。与SPI接口类似,每个从器件也都需要另外提供一条片选通线CS。(6)CAN总线CAN,全称“ControllerAreaNetwork”,即控制器局域网,是国际上应用最广泛的现场总线之一。最初,CAN被设计作为汽车环境中的微控制器,在车载各电子控制装置ECU之间交换信息,形成汽车电子控制网络。比如:发动机 管理系统 工资管理系统慧云智能化管理系统免费考勤管理系统员工工资计算excel病人信息管理系统 、变速箱控制器、仪 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 装备,由德国Bosch公司最先提出的电子主干系统中,均嵌入CAN控制装置。一个由CAN总线构成的单一网络中,理论上可以挂接无数个节点。实际应用中,节点数目受网络硬件的电气特性所限制。CAN可提供高达1Mbit/s的数据传输速率,这使实时控制变得非常容易。另外,硬件的错误检定特性也增强了CAN的抗电磁干扰能力。CAN是一种多主控端的串行通信总线,基本设计规范要求有高的位速率,高抗电磁干扰性,而且能够检测出产生的任何错误。当信号传输距离达10km时,CAN仍可提供高达50Kbit/s的数据传输速率。9.2I2C总线的串行扩展单片机应用系统正向小型化、高可靠性、低功耗等方向发展。在一些设计功能较多的系统中,常需扩展多个外围接口器件。若采用传统的并行扩展方式,将占用较多的系统资源,且硬件电路复杂,成本高、功耗大、可靠性差。为此,Philips公司推出了一种高效、可靠、方便的串行扩展总线—I2C总线。单片机系统采用I2C总线后将大大简化电路结构,增加硬件的灵活性,缩短产品开发周期,降低成本,提高系统可靠性。I2C总线(InterICBUS)是Philips推出的芯片间串行传输总线。它以两根连线实现了完善的全双工同步数据传送,可以极方便地构成多机系统和外围器件扩展系统。I2C总线采用了器件地址的硬件设置方法,通过软件寻址完全避免了器件的片选线寻址方法,从而使硬件系统具有最简单而灵活的扩展方法。9.2.1I2C总线器件应用概述一、I2C总线器件目前许多单片机厂商引进了Philips公司的I2C总线技术,推出了许多带有I2C总线接口的单片机。Philips公司除了生产具有I2C总线接口的单片机外,还推出了许多具备I2C总线的外部接口芯片,如24XX系列的EEPROM、128字节的静态RAM芯片PCF8571、日历时钟芯片PCF8563、4位LED驱动芯片SAA1064、160段LCD驱动芯片PCF8576等多种类多系列接口芯片。二、I2C总线工作原理  采用I2C总线系统结构如下图9-1所示。图9-1I2C总线系统结构图其中,SCL是时钟线,SDA是数据线。总线上的各器件都采用漏极开路结构与总线相连,因此,SCL、SDA均需接上拉电阻,总线在空闭状态下均保持高电平。I2C总线支持多主和主从两种工作方式,通常为主从工作方式。在主从工作方式中,系统中只有一个主器件(单片机),总线上其它器件都是具有I2C总线的外围从器件。在主从工作方式中,主器件启动数据的发送(发出启动信号),产生时钟信号,发出停止信号。为了实现通信,每个从器件均有唯一一个器件地址,具体地址由I2C总线委员会分配。  (一)I2C总线工作方式  I2C总线上进行一次数据传输的通信格式如下图9-2所示。图9-2IIC总线上进行一次数据传输的通信格式1.发送启动(开始)信号  在利用I2C总线进行一次数据传输时,首先由主机发出启动信号启动I2C总线。在SCL为高电平期间,SDA出现下升沿则为启动信号(SDA由高电平向低电平跳变)。此时具有I2C总线接口的从器件会检测到该信号。2.发送寻址信号  主机发送启动信号后,再发出寻址信号。器件地址有7位和10位两种,这里只介绍7位地址寻址方式。寻址信号由一个字节构成,高7位为地址位,最低位为方向位,用以表明主机与从器件的数据传送方向。方向位为“0”,表明主机对从器件的写操作;方向位为“1”时,表明主机对从器件的读操作。3.应答信号  I2C总线协议规定,每传送一个字节数据(含地址及命令字)后,都要有一个应答信号,以确定数据传送是否正确。应答信号由接收设备产生,在SCL信号为高电平期间,接收设备将SDA拉为低电平,表示数据传输正确,产生应答。4.数据传输  主机发送寻址信号并得到从器件应答后,便可进行数据传输,每次一个字节,但每次传输都应在得到应答信号后再进行下一字节传送。5.非应答信号  当主机为接收设备时,主机对最后一个字节不应答,以向发送设备表示数据传送结束。I2C总线上第9个时钟对应于应答位,相应数据上低电平为“应答”信号A,高电平为“非应答信号”。6.发送停止信号  在全部数据传送完毕后,主机发送停止信号,即在SCL为高电平期间,SDA上产生一上升沿信号。(二)I2C总线数据传输方式模拟目前已有多家公司生产具有I2C总线的单片机,如Philips、Motorola、韩国三星、日本三菱等公司。这类单片机在工作时,总线状态由硬件监测,无须用户介入,应用非常方便。对于不具有I2C总线接口的MCS-51单片机,在单主机应用系统中可以通过软件模拟I2C总线的工作时序,在使用时,只需正确调用该软件包就可很方便地实现扩展I2C总线接口器件。  I2C总线软件包组成:启动信号子程序STA停止信号子程序STOP发送应答位子程序MACK发送非应答位子程序MNACK应答位检查子程序CACK单字节发送子程序WRBYT单字节接收子程序RDBYTn字节发送子程序WRNBYTn字节接收子程序RDNBYT9.2.2EEPROMAT24CXX系列具有I2C总线接口的EEPROM拥用多个厂家的多种类型产品。在此仅介绍ATMEL公司生产的AT24CXX系列EEPROM,主要型号有AT24C01/02/04/08/16,其对应的存储容量分别为128×8/256×8/512×8/1024×8/2048×8。采用这类芯片可解决掉电数据保护问题,可对所存数据保存100年,并可多次擦写,擦写次数可达10万次。  在一些应用系统设计中,有时需要对工作数据进行掉电保护,如电子式电能表等智能化产品。若采用普通存储器,在掉电时需要备用电池供电,并需要在硬件上增加掉电检测电路,但存在电池不可靠及扩展存储芯片占用单片机过多端口的缺点。采用具有I2C总线接口的串行EEPROM器件可很好地解决掉电数据保持问题,且硬件电路简单。一、现在以AT24C02为例,讲述其结构及功能(一)AT24C02的引脚功能 AT24C02芯片的常用封装形式有直插(DIP8)式和贴片(SO-8)式两种,AT24C02直插式引脚图如下图9-3所示。图9-3AT24C02直插式引脚图各引脚功能如下:1脚,2脚,3脚(A0、A1、A2)--可编程地址输入端;4脚(VSS)--电源地;5脚(SDA)--串行数据输入/输出端;6脚(SCL)--串行时钟输入端;7脚(WP)--写保护输入端,用于硬件数据保护;当其为低电平时,可以对整个存储器进行正常的读/写操作;当其为高电平时,存储器具有写保护功能,但读操作不受影响。8脚(VCC)--电源正端。(二)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,或是将下一页的首地址重新赋给寄存器。1.字节写入方式:单片机在一次数据帧中只访问EEPROM一个单元。在这种方式下,单片机先发送启动信号,然后送一个字节的控制字,再送一个字节的存储器单元子地址,上述几个字节都得到EEPROM响应后,再发送8位数据,最后发送1位停止信号。发送格式如下图9-4所示。图9-4字节写入时序图2.页写入方式:单片机在一个数据写周期内可以连续访问1页(8个)EEPROM存储单元。在该方式中,单片机先发送启动信号,接着送一个字节的控制字,再送1个字节的存储器单元地址,上述几个字节都得到EEPROM应答后就可以送最多1页的数据,并顺序存放在以指定起始地址开始的相继单元中,最后以停止信号结束,页写入帧格式如下图9-5所示。3.指定地址读操作:读指定地址单元的数据。单片机在启动信号后先发送含有片选地址的写操作控制字,EEPROM应答后再发送1个(2KB以内的EEPROM)字节的指定单元的地址,EEPROM应答后再发送1个含有片选地址的读操作控制字,此时如果EEPROM作出应答,被访问单元的数据就会按SCL信号同步出现在串行数据/地址线SDA上。这种读操作的数据帧格式如下图9-6所示。4.指定地址连续读:此种方式的读地址控制与前面指定地址读相同。单片机接收到每个字节数据后应做出应答,只要EEPROM检测到应答信号,其内部的地址寄存器就自动加1指向下一单元,并顺序将指向的单元的数据送到SDA串行数据线上。当需要结束读操作时,单片机接收到数据后在需要应答的时刻发送一个非应答信号,接着再发送一个停止信号即可。这种读操作的数据帧格式如下图9-7所示。二、AT24C××系列存储卡简介  (一)IC卡标准与引脚定义IC卡标准与引脚定义如下图9-8所示。              图9-8IC卡示意图1987年,国际标准化组织ISO专门为IC卡制定了国际标准:ISO/IEC7816-1、2、3、4、5、6,这些标准为IC卡在全世界范围内的推广和应用创造了规范化的前提和条件,使IC卡技术得到了飞速的发展。根据国际标准ISO7816对接触式IC卡的规定,在IC卡的左上角封装有IC芯片,其上覆盖有6或8个触点和外部设备进行通信,见上图9-8。部分触点及其定义如下表9-1所示。  (二)AT24C××系列存储卡型号与容量  ATMEL公司生产的AT24C××系列存储卡采用低功耗CMOS工艺制造,芯片容量规格比较齐全,工作电压选择多样化,操作方式标准化,因而使用方便,是目前应用较多的一种存储卡。这种卡实质就是前面介绍的AT24C系列存储器。该类IC卡型号与容量如下表9-2所示。  (三)AT24C××系列存储卡工作原理存储卡内部逻辑结构如下图9-9所示。其中A2、A1、A0为器件/页地址输入端,在IC卡芯片中,将此三端接地,并且不引出到触点上(如图中虚线所示)。1.内部逻辑单元功能  芯片信号线有两条:SCL时钟信号线和SDA数据信号线,数据传输采用I2C总线协议。当SCL为高电平期间,SDA上的数据信号有效;当SCL为低电平期间,允许SDA上的数据信号变化。   启动与停止逻辑单元。当SCL为高电平期间,SDA从低电平上升为高电平的跳变信号作为I2C总线的停止信号;当SCL为高电平期间,SDA从高电平下降为低电平的跳变信号作为I2C总线的启动信号。 串行控制逻辑单元。这是芯片正常工作的控制核心单元。该单元根据输入信号产生各种控制信号。在寻址操作时,它控制地址计数器加1并启动地址比较器工作;在进行写操作时,它控制升压/定时电路为EEPROM提供编程高电平;在进行读操作时,它对输出/确认逻辑单元进行控制。 地址/计数器单元。根据读/写控制信号及串行逻辑控制信号产生EEPROM单元地址,并分别送到X译码器进行字选(字长8位),送到Y译码器进行位选。 升压定时单元。该单元为片内升压电路。在芯片采用单一电源供电情况下,它可将电源电压提升到12~21.5V,以供作EEPROM编程高电平。EEPROM存储单元。该单元为IC卡芯片的存储模块,其存储单元多少决定了卡片的存储容量。  2.芯片寻址方式  器件地址与页面选择。IC卡芯片的器件地址为8位,即7位地址码,1位读/写控制码。如上图9-9可见,与普通AT24CXX系列EEPROM集成电路相比,IC卡芯片的A2、A1、A0端均已在卡片内部接地,而没有引到外部触点上,在使用时,不同型号IC卡的器件地址码见下表9-3所示。(1)对于容量为1K、2K的卡片,其器件地址是唯一的,无需进行页面选择。(2)对于容量为4K、8K、16K的卡片,利用P2、P1、P0作为页面地址选择。不同容量的芯片,页面数不同,如AT24C08根据P1、P0的取值不同,可有0、1、2、3四个页面,每个页面有256个字节存储单元。(3)对于容量为32K的卡片,没有采用页面寻址方式,而是采用直接寻址方式。字节寻址。在器件地址码后面,发送字节地址码。对于容量小于32K的卡片,字节地址码长度为一个字节(8位);对于容量为32K的卡片,采用2个8位数据字作为寻址码。第一个地址字只有低4位有效,此低4位与第二个字节的8位一起组成12位长的地址码,对4096个字节进行寻址。3.读、写操作对这种IC卡的读、写操作实质上就是对普通AT24C系列EEPROM的读写,操作方式完全一样。9.2.3AT24C02与单片机应用实例图9-10所示,该电路实现的功能是开机次数统计。数码管初始显示“0”,复位后例题9-1:如,数码管将无数字显示。当再次按下开机,CPU会从AT24C02里面调出保存的开机次数,并加1后显示在数码管上,如此反复。图9-10AT24C02与单片机应用解:程序如下。#include#include#defineucharunsignedchar#defineuintunsignedint#defineOP_WRITE0xa0//器件地址以及写入操作#defineOP_READ0xa1//器件地址以及读取操作ucharcodedisplay[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};sbitSDA=P2^3;sbitSCL=P2^2;sbitSMG=P3^7;//定义数码管选择引脚voidstart();voidstop();ucharshin();bitshout(ucharwrite_data);voidwrite_byte(ucharaddr,ucharwrite_data);//voidfill_byte(ucharfill_size,ucharfill_data);voiddelayms(uintms);ucharread_current();ucharread_random(ucharrandom_addr);#definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};/**********************************************************/main(void){uchari=1;SMG=0;//选数码管SDA=1;SCL=1;i=read_random(1);//从AT24C02移出数据送到i暂存if(i>=9)i=0;elsei++;write_byte(1,i);//写入新的数据到EEPROMP0=display[i];//显示while(1);//停止等下一次开机或复位}/**********************************************************/voidstart()//开始位{SDA=1;SCL=1;delayNOP();SDA=0;delayNOP();SCL=0;}/**********************************************************/voidstop()//停止位{SDA=0;delayNOP();SCL=1;delayNOP();SDA=1;}/**********************************************************/ucharshin()//从AT24C02移出数据到MCU{uchari,read_data;for(i=0;i<8;i++){SCL=1;read_data<<=1;read_data|=SDA;SCL=0;}return(read_data);}/**********************************************************/bitshout(ucharwrite_data)//从MCU移出数据到AT24C02{uchari;bitack_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;returnack_bit;//返回AT24C02应答位}/**********************************************************/voidwrite_byte(ucharaddr,ucharwrite_data)//在指定地址addr处写入数据write_data{start();shout(OP_WRITE);shout(addr);shout(write_data);stop();delayms(10);//写入周期}/**********************************************************//*voidfill_byte(ucharfill_size,ucharfill_data)//填充数据fill_data到EEPROM内fill_size字节{uchari;for(i=0;i#include#defineucharunsignedchar#defineuintunsignedintsbitDS=P3^3;//定义DS18B20接口inttemp;ucharflag1;voiddisplay(unsignedchar*lp,unsignedcharlc);//数字的显示函数;lp为指向数组的地址,lc为显示的个数voiddelay();//延时子函数,5个空指令codeunsignedchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x40,0x39,0x00};//共阴数码管显示数的组成是"0-9""0-9有小数点的""-""C""空表"unsignedcharl_tmpdate[8]={0,0,10,0,0,0,0,0};//定义数组变量,并赋值1,2,3,4,5,6,7,8,就是本程序显示的八个数inttmp(void);voidtmpchange(void);voidtmpwritebyte(uchardat);uchartmpread(void);bittmpreadbit(void);voiddsreset(void);voiddelayb(uintcount);voidmain()//主函数{uchari;intl_tmp;while(1){tmpchange();//温度转换l_tmp=tmp();//读取温度值if(l_tmp<0)l_tmpdate[0]=20;//判断温度为负温度,前面加"-"else{l_tmpdate[0]=l_tmp/1000;//显示百位,这里用1000,是因为我们之前乖以10了if(l_tmpdate[0]==0)l_tmpdate[0]=22;//判断温度为正温度且没有上百,前面不显示,查表第22是空}l_tmp=l_tmp%1000;l_tmpdate[1]=l_tmp/100;//获取十位l_tmp=l_tmp%100;l_tmpdate[2]=l_tmp/10;//获取个位再l_tmpdate[2]+=10;//加入小数点,查表可得出有小数点的排在后10位,所以加10l_tmpdate[3]=l_tmp%10;//获取小数第一位l_tmpdate[4]=21;for(i=0;i<10;i++){//循环输出10次,提高亮度display(l_tmpdate,5);}}}voiddisplay(unsignedchar*lp,unsignedcharlc)//显示{unsignedchari;//定义变量P2=0;//端口2为输出P1=P1&0xF8;//将P1口的前3位输出0,对应74LS138译门输入脚,全0为第一位数码管for(i=0;i0)i--;count--;}}voiddsreset(void)//DS18B20初始化{uinti;DS=0;i=103;while(i>0)i--;DS=1;i=4;while(i>0)i--;}bittmpreadbit(void)//读一位{uinti;bitdat;DS=0;i++;//小延时一下DS=1;i++;i++;dat=DS;i=8;while(i>0)i--;return(dat);}uchartmpread(void)//读一个字节{uchari,j,dat;dat=0;for(i=1;i<=8;i++){j=tmpreadbit();  dat=(j<<7)|(dat>>1);//读出的数据最低位在最前面,这样刚好 //一个字节在DAT里}return(dat);//将一个字节数据返回}voidtmpwritebyte(uchardat){//写一个字节到DS18B20里uinti;ucharj;bittestb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb)//写1部分{DS=0;i++;i++;DS=1;i=8;while(i>0)i--;}else{DS=0;//写0部分i=8;while(i>0)i--;DS=1;i++;i++;}}}voidtmpchange(void)//发送温度转换命令{dsreset();//初始化DS18B20delayb(1);//延时tmpwritebyte(0xcc);//跳过序列号命令tmpwritebyte(0x44);//发送温度转换命令}inttmp()//获得温度{floattt;uchara,b;dsreset();delayb(1);tmpwritebyte(0xcc);tmpwritebyte(0xbe);//发送读取数据命令a=tmpread();//连续读两个字节数据b=tmpread();temp=b;temp<<=8;temp=temp|a;//两字节合成一个整型变量。tt=temp*0.0625;//得到真实十进制温度值,因为DS18B20 //可以精确到0.0625度,所以读回数据的最低位代表的是 //0.0625度。temp=tt*10+0.5;//放大十倍,这样做的目的将小数点后第一位 //也转换为可显示数字,同时进行一个四舍五入操作。returntemp;//返回温度值}voidreadrom()//readtheserial读取温度传感器的序列号{//本程序中没有用到此函数ucharsn1,sn2;dsreset();delayb(1);tmpwritebyte(0x33);sn1=tmpread();sn2=tmpread();}voiddelay10ms(){uchara,b;for(a=10;a>0;a--)for(b=60;b>0;b--);}9.4SPI总线串行扩展9.4.1SPI接口SPI(SerialPeripheralInterface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备3讲 以串行方式进行通信以交换信息。SPI有三个寄存器分别为:控制寄存器SPCR,状态寄存器SPSR,数据寄存器SPDR。外围设备FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线CS(有的SPI接口芯片带有中断信号线INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。 SPI接口的全称是"SerialPeripheralInterface",意为串行外围接口,是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在EEPROM、FLASH、实时时钟、AD转换器,还有数字信号处理器和数字信号解码器之间。 SPI接口是在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前,低位在后,为全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几Mbps。 SPI串行扩展如图9-15所示,接口包括以下四种信号。图9-15SPI串行扩展示意图  (1)MOSI:主器件数据输出,从器件数据输入  (2)MISO:主器件数据输入,从器件数据输出  (3)SCLK:时钟信号,由主器件产生  (4)/CS:从器件使能信号,由主器件控制,有的IC会标注为CS(Chipselect)在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。 在多个从器件的系统中,每个从器件需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。 SPI模块为了和外设进行数据交换,根据外设工作要求,其输出的串行同步时钟极性和相位可以进行配置。时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。时钟相位(CPHA)能够用于选择两种不同的传输协议进行数据传输。如果CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。SPI主模块和与之通信的外设间时钟相位和极性应该一致。SPI串行通信如图9-16所示。图9-16SPI串行通信示意图优点:由于SPI系统总线一共只需3~4位数据线和控制线即可实现与具有SPI总线接口功能的各种I/O器件进行连接,而扩展并行总线则需要8根数据线、8~16位地址线、2~3位控制线,因此,采用SPI总线接口可以简化电路设计,节省很多常规电路中的接口器件和I/O口线,提高设计的可靠性。缺点:没有指定的流控制,没有应答机制确认是否接收到数据。  应用:在MCS–51系列等不具有SPI接口的单片机组成的智能仪器和工业测控系统中,当传输速度要求不是太高时,使用SPI总线可以增加应用系统接口器件的种类,提高应用系统的性能。9.4.2DS1302简述现在流行的串行时钟电路很多,如DS1302、DS1307、PCF8485等,这些电路的接口简单、价格低廉、使用方便,被广泛地采用。实时时钟电路DS1302是DALLAS公司的一种具有涓细电流充电能力的电路,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768kHz晶振。一、DS1302的结构及工作原理DS1302是美国DALLAS公司的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的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引脚变为高阻态。上电运行时,在Vcc>2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向)。SCLK为时钟输入端。图9-17DS1302的引脚排列图(二)DS1302的控制字节  DS1302是SPI总线驱动方式,它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。要想与DS1302通信,首先要先了解DS1302的控制字,DS1302的控制字如图9-18所示。位7:控制字的最高有效位,必须是逻辑1;如果它为0,则不能把数据写入到DS1302中。位6:如果为0,则表示存取日历时钟数据;如果为1,则表示存取RAM数据。位5-位1:指示操作单元的地址。位0:最低有效位,为0表示要进行写操作,为1表示进行读操作。 需要注意的是,控制字节总是从最低位开始输出。(三)数据输入输出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上读取数据。(四)DS1302的寄存器  1.实时时钟/日历(12个字节)  DS1302有关日历、时间的寄存器共有12个,其中有7个寄存器(读时81h~8Dh,写时80h~8Ch),存放的数据格式为BCD码形式,如图9-19所示。  此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。小时寄存器(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位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写静态RAM的31个字节(即所有字节),命令控制字为FEH(写)、FFH(读)。  DS1302中附加31字节静态RAM的地址如表9-11所示。二、DS1302实时显示时间的软硬件  DS1302与CPU的连接需要三条线,即SCLK(7)、I/O(6)、RST(5)。实际上,在调试程序时可以不加电容器,只加一个32.768kHz的晶振即可。只是选择晶振时,不同的晶振,误差也较大。另外,还可以在上面的电路中加入DS18B20,同时显示实时温度。只要占用CPU一个端口即可。LCD还可以换成LED,还可以使用10位多功能8段液晶显示模块LCM101,内含看门狗(WDT)/时钟发生器及两种频率的蜂鸣器驱动电路,并有内置显示RAM,可显示任意字段笔划,具有3-4线串行接口,可与任何单片机、IC接口。功耗低,显示状态时电流为2μA(典型值),省电模式时小于1μA,工作电压为2.4V-3.3V,显示
本文档为【单片机的串行扩展技术】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
正方体
暂无简介~
格式:ppt
大小:1MB
软件:PowerPoint
页数:92
分类:
上传时间:2022-05-10
浏览量:0