【很好】第八章常用串行总线及应用解读课件_第1页
【很好】第八章常用串行总线及应用解读课件_第2页
【很好】第八章常用串行总线及应用解读课件_第3页
【很好】第八章常用串行总线及应用解读课件_第4页
【很好】第八章常用串行总线及应用解读课件_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

1、第八章 常用串行总线介绍及 应用 第1页,共50页。8.1 1-wire总线 目前单片机应用系统比较常见的串行扩展接口和串行扩展总线有:1-Wair单总线、SPI串行总线、IIC总线。1-wire单总线采用单根信号线,既可以传输时钟又可以传输数据,而且数据传输是双向的。它具有节省I/O口资源、结构简单、成本低廉、便于总线扩展和维护等诸多优点。1-wire单总线适用于单个主机系统,能够控制一个或多个从机设备。当只有一个从机位于总线上时,系统可按照单节点系统操作,而当多个从机位于总线上时则系统按照多节点系统操作。 我们以单总线温度传感器DS18B20的应用为例,详细介绍1-wire的应用。第2页,

2、共50页。8.1.1 DS18B20的简介DS18B20的主要特征: 全数字温度转换及输出。 先进的单总线数据通信。 最高12位分辨率,精度可达土0.5摄氏度。 12位分辨率时的最大工作周期为750毫秒。 可选择寄生工作方式。 检测温度范围为55C +125C (67F +257F) 内置EEPROM,限温报警功能。 64位光刻ROM,内置产品序列号,方便多机挂接。 多样封装形式,适应不同硬件系统。 DALLAS(达拉斯)公司生产的DS18B20温度传感器具有超小的体积,超低的硬件开消,抗干扰能力强,精度高,附加功能强。DS18B20的优势是我们学习单片机技术和开发温度相关的小产品的不二选择。

3、第3页,共50页。8.1.2 DS18B20的引脚及内部结构1 .DS18B20的封装DS18B20的封装采用TO-92和8-Pin SOIC封装,外形及管脚排列如图8-1。DS18B20引脚定义:GND 为电源地。DQ 为数字信号输入/输出端。VDD 为外接供电电源输入端(在寄生电源接线方式时接地)。NC 空引脚。第4页,共50页。2 . DS18B20的构成DS18B20内部结构图如图8-2所示。主要包括:寄生电源、温度传感器、64位激光(lasered)ROM、存放中间数据的高速暂存器RAM、非易失性温度报警触发器TH和TL、配置寄存器等部分。第5页,共50页。1)寄生电源寄生电源由二极

4、管VD1、VD2、寄生电容C和电源检测电路组成,电源检测电路用于判定供电方式,DS18B20有两种供电方式:3V5.5V的电源供电方式和寄生电源供电方式。在寄生电源供电方式下,DS18B20从单线信号线上汲取能量:在信号线DQ处于高电平期间把能量储存在内部电容里,在信号线处于低电平期间消耗电容上的电能工作,直到高电平到来再给寄生电源(电容)充电。该寄生电源有两个优点:第一,检测远程温度时无需本地电源;第二,缺少正常电源时也能读ROM。2)64位只读存储器ROMROM中的64位序列号是出厂前被光刻好的,它是该DS18B20的地址序列码。光刻ROM的作用是使每一个DS18B20都各不相同,可以实现

5、一根总线上挂接多个DS18B20。64位光刻ROM序列号的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。第6页,共50页。3)内部存储器DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPROM,EEPROM用于存放高温度和低温度触发器TH、TL和配置寄存器的内容。高速暂存存储器由9个字节组成。 第7页,共50页。4)温度传感器DS18B20中的温度传感器可以完成对温度的测量。DS18B20的温度测量范围是-55+125,分辨率的默认值是12位。D

6、S18B20温度采集转化后得到16位数据,存储在DS18B20的两个8位RAM中,高字节的高5位S代表符号位,如果温度值大于或等于零,符号位为0;温度值小于零,符号位为1。低字节的第四位是小数部分,中间7位是整数部分。D7D6D5D4D3D2D1D02322212-02-12-22-32-4D15D14D13D12D11D10D9D8SSSSS262524对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。 第8页,共50页。5)配置寄存器暂存器的第五字节是配置寄存器,可以通过相应的写命令进行配置其内容如下表:低五位一直都是“1”,TM是

7、测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置DS18B20的分辨率 。第9页,共50页。8.1.3 单总线开发使用单总线的开发使用过程分三步:1)单总线的硬件连接结构;2)单总线的操作命令序列;3)单总线的通信协议,总线的操作时序。1硬件结构主机或从机通过一个漏极开路或三态端口连接至该数据线,这样允许设备在不发送数据时释放数据总线,以便总线被其它设备所使用。第10页,共50页。为了使总线上所有电路的输出能完成“线与”的功能,连接到总线上的器件的输出级必须为“开漏”或“开集”的形式。其内部等效电路如图8-3所

8、示 第11页,共50页。单总线操作命令序列典型的单总线命令序列如图8-4所示,每次访问单总线器件,必须严格遵守这个命令序列,否则,单总线器件不会响应主机。但是,这个准则对于搜索ROM命令和报警搜索命令例外,在执行两者中任何一条命令之后,主机不能执行其后的功能命令,必须返回,从初始化开始。 根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。 第12页,共50页。控制器对18B20操作流程总流程:初始化1-WIRE 总线

9、发送ROM 命令发送Memory 命令提取数据(可以没有)1.复位:首先我们必须对DS18B20芯片进行复位,复位就是由控制器(单片机)给DS18B20单总线至少480uS的低电平信号。当18B20接到此复位信号后则会在1560uS后回发一个芯片的存在脉冲。 2.存在脉冲:在复位电平结束之后,控制器应该将数据单总线拉高,以便于在1560uS后接收存在脉冲,存在脉冲为一个60240uS的低电平信号。至此,通信双方已经达成了基本的协议,接下来将会是控制器与18B20间的数据通信。如果复位低电平的时间不足或是单总线的电路断路都不会接到存在脉冲,在设计时要注意意外情况的处理。 第13页,共50页。3.

10、ROM操作命令在主机检测到应答脉冲后,就可以发出ROM命令。这些命令与各个从机设备的唯一64位ROM代码相关,允许主机在单总线上连接多个从机设备时,指定操作某个从机设备。这些命令还允许主机能够检测到总线上有多少个从机设备以及其设备类型,或者有没有设备处于报警状态。从机设备可能支持5种ROM命令(实际情况与具体型号有关)每种命令长度为8位,主机在发出功能命令之前,必须送出合适的ROM命令。以下为几个ROM命令的功能:控制器对18B20操作流程(1)读ROM33h命令(仅适合于单节点)(2)报警搜索ECh命令(仅少数1-wire器件支持)(3)跳越ROMCCh命令(仅适合于单节点)第14页,共50

11、页。4.RAM功能命令在主机发出ROM命令,以访问某个指定的DS18B20,接着就可以发出DS18B20支持的某个RAM功能命令。这些命令允许主机写入或读出DS18B20暂存器、启动温度转换以及判断从机的供电方式。 第15页,共50页。3单总线数据通讯协议数字式温度传感器和模拟传感器最大的区别,是将温度信号直接转化成数字信号,然通过串行通信方式输出。所有的单总线器件要求采用严格的通信协议,以保证数据的完整性。该协议定义了几种信号类型:复位脉冲、应答脉冲序列;写0、写1、和读0、读1。所有这些信号,除了应答脉冲以外,都由主机发出同步信号。并且发送所有的命令和数据都是字节的低位在前,这一点与多数串

12、行通信格式不同(多数为字节的高位在前)。1)初始化序列复位和应答脉冲单总线上的所有通信都是以初始化序列开始。主机通过拉低单线480us以上,产生复位脉冲,然后释放该线,进入Rx接收模式。主机释放总线时,4.7K的电阻将单总线拉高,产生一个上升沿。单线器件DS18B20检测到该上升沿后,延时1560us,DS18B20通过拉低总线60240us来产生应答脉冲。主机接收到从机的应答脉冲后,说明有单线器件在线。第16页,共50页。总线初始化脉冲时序图如图8-5:第17页,共50页。/温度传感器bit init_ds18b20(void)uchar j;DQ=1;DQ=0;j=250;while(-j

13、);DQ=1;j=40;while(-j);j=110;while(DQ!=0)j-;if(!j)return 0;j=250;while(-j);return 1;第18页,共50页。2)写时隙 当主机将单总线DQ从逻辑高(空闲状态)拉为逻辑低时,即启动一个写时序。存在两种写时隙:“写1”和“写0”。主机采用写1时隙向从机写入1,而采用写0时隙向从机写入0。所有写时隙至少需要60us,且在两次独立的写时隙之间至少需要1us的恢复时间。第19页,共50页。两种写时隙均起始于主机拉低总线(图8-6所示)。 产生写1时隙的方式:主机在拉低总线后,接着必须在15 us之内释放总线(向总线写1),由4

14、.7K上拉电阻将总线拉至高电平;而产生写0时隙的方式:在主机拉低总线后,只需在整个时隙期间保持低电平即可(至少60us)。在写时隙起始后15-60 us期间,单总线器件采样总线电平状态。如果在此期间采样为高电平,则逻辑1被写入该器件;如果为0,则写入逻辑0。第20页,共50页。/写时序void wtbyte_ds18b20(uchar wdat)uchar i,j;for(i=0;i=1;第21页,共50页。3)读时隙 总线器件仅在主机发出读时隙时,才向主机传输数据,所以,在主机发出读数据命令后,必须马上产生读时隙,以便从机能够传输数据。所有读时隙至少需要60us, 且在两次独立的读时隙之间至

15、少需要1us的恢复时间。每个读时隙都由主机发起,至少拉低总线1us 图8-7所示。第22页,共50页。/*读时序(位)*/bit rdbit_ds18b20(void)uchar j;bit b;DQ=1;_nop_();DQ=0;_nop_();_nop_();_nop_();DQ=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();if(DQ)b=1;elseb=0;j=30;while(-j);return b;第23页,共50页。/*读字节*/uchar rdbyte_ds18b20(voi

16、d)uchar i,dat;for(dat=0,i=0;i=1;if(rdbit_ds18b20()dat|=0 x80;return dat;第24页,共50页。温度转换/温度转换函数unsigned char display_7leds7;/*用数组保存转换后的温度,第1位保存符号,第2,3,4保存整数,第5位保存小数点,6,7位保存小数值*/void convert_t(char uct_l,char uct_h)uchar tm_dot;tm_dot=(uct_l2)&0 x03;uct_h=(uct_h4)&0 x0f);if(uct_h&0 x80)display_7leds0=-

17、;tm=tm+1;elsedisplay_7leds0= ;display_7leds1=tm/100;display_7leds2=tm%100/10;display_7leds3=tm%10;display_7leds4=46;/. asc=46tm_dot=tm_dot*25;display_7leds5=tm_dot/10;display_7leds6=tm_dot%10;第25页,共50页。#include#define uchar unsigned charuchar data display_7leds7;sbit BEEP=P37;main()char uct_1,uct_h,

18、i;uchar code str1=Temp:;lcd_init(); /液晶初始化delay(10);lcd_pos(0);i=0;while(str1i!=0)lcd_wdat(str1i);/液晶显示i+;while(1)init_ds18b20();/温度传感器初始化wtbyte_ds18b20(0 xcc); /跳越ROM命令wtbyte_ds18b20(0 x44);/启动温度转化delay(10);/温度转化装入RAM需要一定的时间init_ds18b20();/每次读写前都需要初始化wtbyte_ds18b20(0 xcc);wtbyte_ds18b20(0 xbe);/读RA

19、M命令uct_1=rdbyte_ds18b20();/读取温度低字节数据uct_h=rdbyte_ds18b20();/读取温度高字节数据convert_t(uct_1,uct_h);/温度转化if(tm28|tm20)BEEP=0;/温度不在设定内报警elseBEEP=1; lcd_pos(6);for(i=0;i7;i+)/-,.的asc码值都大于10if(display_7ledsi10)lcd_wdat(display_7ledsi+48elselcd_wdat(display_7ledsi);第26页,共50页。DS18B20的编程注意事项:较小的硬件开销需要相对复杂的软件进行补偿,

20、由于DS1820与微处理器间采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。每次执行相应操作时,都应该遵循单总线的命令周期,复位ROM命令功能命令,否则无法完成命令。从DS18B20中读取温度数据,是按照先低字节再高字节,先低位(LSB)再高位(MSB)的顺序读取。第27页,共50页。8.2 IIC总线接口IIC总线是PHILIPS公司推出的串行总线,它是一种简单、双向二线制同步串行总线,它只需要两根线即可在连接于总线上的器件之间传送信息。易于扩展凡是具有IIC接口的器件都可以挂接在IIC总线上。 第28页,共50页。8.2.1 IIC总

21、线简介下面是IIC总线的一些特征:1只要求两条总线线路 一条串行数据线 SDA 一条串行时钟线 SCL。 2 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机 从机关系软件设定地址 主机可以作为主机发送器或主机接收器。3 它是一个真正的多主机总线 如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止数据被破坏。4串行的8位双向数据传输位速率在标准模式下可达100kbit/s 快速模式下可达400kbit/s 高速模式下可达3.4Mbit/s。5片上的滤波器可以滤去总线数据线上的毛刺波 保证数据完整。6连接到相同总线的IC数量只受到总线的最大电容400pF限制。第29页,

22、共50页。8.2.2 IIC总线数据的通信协议1IIC接口 IIC总线接口的电气结构如图8-9,IIC总线的串行数据线SDA和串行时钟线SCL必须经过上拉电阻Rp接到正电源上。当总线空闲时,SDA和SCL必须保持高电平。为了使总线上所有电路的输出能完成“线与”的功能,连接到总线上的器件的输出级必须为“开漏”或“开集”的形式,所以总线上需加上拉电阻。第30页,共50页。2起始和终止信号对IIC器件的操作总是从一个规定的启动(Start)时序开始,即SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据;信息传输完成后总是以一个规定的停止(Stop)时序结束,即SCL为高电平时,SDA由低电平

23、向高电平跳变,结束传送数据。时序图如图8-10。起始信号和终止信号都是由主机发出的,在起始信号产生后,总线就处于被占用的状态;在终止信号产生一段时间后,总线就处于空闲状态。第31页,共50页。启动信号与停止信号代码实例/发送开始信号voidi2c_start(void)SDA = 1;SCL = 1;SDA = 0;SCL = 0;return;/发送结束信号voidi2c_stop(void)SDA = 0;SCL = 1;SDA = 1;return; 第32页,共50页。在进行数据传输时,SDA线上的数据必须在时钟的高电平周期保持稳定,数据线的高、低电平变换只有在SCL线的时钟信号是低电

24、平时才能改变,如图8-11所示。第33页,共50页。3字节数据传送及应答信号IIC总线传送的每个字节均为8位,每次传输可以发送的字节数量不受限制,每个字节后必须跟一个应答信号。首先传输的是数据的最高位,如图8-12所示。接收数据的设备在接收到8bit数据后,向发送数据的设备发出特定的应答信号(ACK),表示已收到数据。CPU向受控单元发出8bit数据后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,可判断为受控单元出现故障。第34页,共50页。应答信号接收与发送例程/接收确认信号Bit i2c_receive_ack(void)

25、bitack;SDA = 1; _nop_();SCL = 1; _nop_();ack = SDA;SCL = 0;return (ack);/发送确认信号void i2c_send_ack(void)SDA = 0;_nop_();SCL = 1; _nop_();SCL = 0;/发送反向确认信号void i2c_send_noack(void)SDA = 1;_nop_();SCL = 1; _nop_();SCL = 0;传送完一个字节数据后,在接下来(即第个)的时钟高脉冲时,接收方应输出低电平为应答信号,表示对接收数据的认可。第35页,共50页。4完整的数据传送IIC数据的传输遵循

26、上图 8-12 所示的格式。先由主控器发送一个启动信号(S),随后发送一个带读/写(R/W)标记的从地址字节(SLAVE ADDRESS),从机地址只有7位长,第8位是“读/写(R/W),用来确定数据传送的方向。1)写格式对于写格式,从机地址中第八位R/W应为0,表示主机控制器将发送数据给从机,从机发送应答信号(A)表示接收到地址和读写信息,接着主机发送若干个字节,每个字节后从机发送一个应答位(A)。注意根据具体的芯片功能,传送的数据格式也有所不同。主机发送完数据后,最后发送一个停止信号(P),表示本次传送结束。第36页,共50页。2)读格式主机发送从机地址(SLAVE ADDRESS)时将R

27、/W设位1,则表示主机将读取数据,从机接收到这个信号后,将数据传送到数据线上(SDA),主机每接收到一个字节数据后,发送一个应答信号(A)。当主机接收完数据后,发送一个非应带信号(/A),通知从机表示接收完成,然后再发送一个停止信号。第37页,共50页。8.2.3 IIC总线串行存储器AT24C021AT24C02简介AT24C02是美国ATMEL公司的串行EEPROM芯片,提供2Kbits的EEPROM存储空间,也就是256个字节的存储空间。该芯片有页写功能,数据保存可到100年。 第38页,共50页。2AT24C02的使用1)确定从机即AT24C02的地址AT24C02的地址字节格式如表8

28、-2。高半字节是出厂固定的数据,A2、A1、A0由有引脚确定,本例中将三引脚全部接低电平。R/W位决定对从机写或读(R/W=0写,R/W=1读),因此本机读地址为0 xA0,写地址为0 xA1。第39页,共50页。2)对AT24C02写操作(1)字节写在字节写模式下,主器件发送起始命令和从器件地址信息(R/W位置零)给从器件,在从器件产生应答信号后,主器件发送AT24C02的字节地址(即写入的数据在AT24C02中存放的地址)。主器件在收到从器件的另一个应答信号后,再发送数据到被寻址的存储单元。 AT24C02再次应答,并在主器件产生停止信号后开始内部数据的擦写。在内部擦写过程中 AT24C0

29、2不再应答主器件的任何请求。 图8-17 写一个字节的时序图(24c01与 24c02相同)第40页,共50页。At24c02单字节写实例/送八位数据(先送高位)void i2c_wt8bit(uchar b)uchara;for(a=0;a8;a+)if(ba)&0 x80)SDA = 1;else SDA = 0;SCL = 1;SCL = 0;return;/写一个字节的时序void i2c_wtbyte(uchar addr,uchar dat)i2c_start();i2c_wt8bit(0 xa0);i2c_receive_ack();i2c_wt8bit(addr);i2c_re

30、ceive_ack();i2c_wt8bit(dat);i2c_receive_ack();i2c_stop();Delay(10);第41页,共50页。(2)页写用页写 AT24C02可以一次写入 16个字节的数据,页写操作的启动和字节写一样,不同在于传送了一字节数据后并不产生停止信号(主器件被允许发送15个额外的字节),每发送一个字节数据后AT24C02产生一个应答位,并将字节地址低位加 1 ,高位保持不变。 如果在发送停止信号之前主器件发送超过16个字节,即字节地址的地位满16,地址计数器将自动翻转,将低位清零,高位不变,继续写入。先前写入的数据被覆盖。接收到16字节数据和主器件发送的停

31、止信号后AT24C02启动内部写周期将数据写到数据区,所有接收的数据在一个写周期内写入AT24C02。图8-18写一页的时序图(24c02为16字节) 第42页,共50页。3)对AT24C02读操作当从器件的R/W位被置1,启动读操作。存在三种基本读操作:读当前地址内容,读指定地址内容,读连续地址内容。(1)读当前地址内容AT24C02片内包含一个地址计数器,此计数器保持被存取的最后一个字的地址,并在片内自动加1,因此,如果以前存取的地址为n,则下一个读操作从n+1地址中读出数据。在接收到从器件的地址中R/W位为1的情况下,AT24C02发送一个确认位并且发送8位数据。主器件接收到8位数据后,

32、产生一个非响应信号(NACK),再发送一个停止信号,AT24C02就不再发送数据。 图8-19 读当前地址内容第43页,共50页。(2)读指定地址内容指定地址读操作允许主器件对AT24C02的任意字节进行读操作,主器件首先通过发送起始信号、从器件地址和它想读取的字节数据的地址,执行一个伪写操作。在AT24C02 应答之后,主器件重新发送起始信号和从器件地址此时R/W 位置1,AT24C02响应并发送应答信号,然后输出所要求的一个8 位字节数据,主器件不发送应答信号但产生一个停止信号。 图8-20读指定地址内容第44页,共50页。At24c02读指定地址时序实例/读八位数据uchar i2c_r

33、ead8bit(void)uchara;uchar b=0;for(a=0;a8;a+)SCL = 1;b=b1;if (SDA=1)b=b|0 x01;/按位或SCL = 0;return (b);uchar i2c_readbyte(uchar Address)uchar c;doi2c_start();i2c_wt8bit(0 xA0);while(i2c_receive_ack();/=1,表示无确认,再次发送i2c_wt8bit(Address);i2c_receive_ack();doi2c_start();i2c_wt8bit(0 xA1);while(i2c_receive_ack();c=i2c_read8bit();i2c_send_noack();i2c_stop();return(c);第45页,共50页。(3)读连续地址内容读连续地址内容可通

温馨提示

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

评论

0/150

提交评论