DSB读写时序分析

上传人:206****923 文档编号:40275758 上传时间:2018-05-25 格式:DOC 页数:8 大小:128KB
返回 下载 相关 举报
DSB读写时序分析_第1页
第1页 / 共8页
DSB读写时序分析_第2页
第2页 / 共8页
DSB读写时序分析_第3页
第3页 / 共8页
DSB读写时序分析_第4页
第4页 / 共8页
DSB读写时序分析_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《DSB读写时序分析》由会员分享,可在线阅读,更多相关《DSB读写时序分析(8页珍藏版)》请在金锄头文库上搜索。

1、新手在 DS18B20 读写过程中要犯很多错误。老衲普度众生,简要说明它怎么用。1、过程 1、2 是初始化过程,每次读取都要初始化,否则 18b20 处于待机状态,无法成功读取。过程1:拉低信号线 480-700us,使它复位,然后释放总线 15-60us,18b20 会拉低总线 60-240us,然后它释放总线。所以初始化成功的一个标志就是能否读到 18b20 这个先低后高的操作时序。(注意:黑色部分表示主机操作,蓝色部分表示 18b20 操作,每次主机操作完成之后等待 18b20 状态时,必须要释放总线,比如将 IO 设置为高阻态什么的。否则 18B20 没法把状态写到线上)2、过程 3、

2、4 是写 1bit 数据过程。过程 3 是写 0 ,过程 4 是写 1。过程 3:拉低总线 60us,然后抬高总线 5us,完成。过程 4:拉低总线 5us,然后抬高总线 60us,完成3、过程 5、6 是读 1bit 过程。过程 5 是读 0,过程 6 是读 1。过程 5、6:拉低总线 5us,然后释放总线,读取总线,如果为 0,则读入 0,如果为 1,则读入 1。DS18B20 时序 Author:exploer 初始化序列初始化序列复位和存在脉冲复位和存在脉冲 DS18B20 的所有通信都由由复位脉冲组成的初始化序列开始。该初始化序列由主机发出, 后跟由 DS18B20 发出的存在脉冲(

3、presence pulse) 。下图(插图 13,即如下截图)阐述 了这一点。当发出应答复位脉冲的存在脉冲后,DS18B20 通知主机它在总线上并且准备好 操作了。 在初始化步骤中,总线上的主机通过拉低单总线至少 480s 来产生复位脉冲。然后总线主 机释放总线并进入接收模式。 当总线释放后,5k 的上拉电阻把单总线上的电平拉回高电平。当 DS18B20 检测到上升 沿后等待 15 到 60us,然后以拉低总线 60-240us 的方式发出存在脉冲。如文档所述,主机将总线拉低最短 480us,之后释放总线。由于 5k 上拉电阻的作用,总 线恢复到高电平。DS18B20 检测到上升沿后等待 1

4、5 到 60us,发出存在脉冲:拉低总线 60-240us。至此,初始化和存在时序完毕。 根据上述要求编写的复位函数为: 首先是延时函数:(由于 DS18B20 延时均以 15us 为单位,故编写了延时单位为 15us 的 延时函数,注意:以下延时函数晶振为 12MHz) /* * 函数:Delayxus_DS18B20 功能:DS18B20 延时函数 参数:t 为定时时间长度 返回:无 说明: 延时公式:15n+15(近似),晶振 12Mhz * */ void Delayxus_DS18B20(unsigned int t) for(t;t0;t-) _nop_();_nop_();_no

5、p_();_nop_(); _nop_(); _nop_(); 延时函数反汇编代码(方便分析延时公式)C:0x0031 7F01 MOV R7,#0x01 C:0x0033 7E00 MOV R6,#0x00 C:0x0035 1206A6 LCALL delayxus(C:06A6) 38: void Delayxus_DS18B20(unsigned int t) 39: 40: for(t;t0;t-) C:0x06A6 D3 SETB C C:0x06A7 EF MOV A,R7 C:0x06A8 9400 SUBB A,#0x00 C:0x06AA EE MOV A,R6 C:0x0

6、6AB 9400 SUBB A,#0x00 C:0x06AD 400B JC C:06BA 41: 42: _nop_();_nop_();_nop_();_nop_();C:0x06AF 00 NOP C:0x06B0 00 NOP C:0x06B1 00 NOP C:0x06B2 00 NOP 43: C:0x06B3 EF MOV A,R7 C:0x06B4 1F DEC R7 C:0x06B5 70EF JNZ Delayxus_DS18B20 (C:06A6) C:0x06B7 1E DEC R6 C:0x06B8 80EC SJMP Delayxus_DS18B20 (C:06A6

7、) 44: _nop_(); _nop_(); C:0x06BA 00 NOP C:0x06BB 00 NOP 45: C:0x06BC 22 RET 分析上述反汇编代码,可知延时公式为 15*(t+1) /* * 函数:RST_DS18B20 功能:复位 DS18B20,读取存在脉冲并返回 参数:无 返回:1:复位成功 ;0:复位失败 说明: 拉低总线至少 480us ;可用于检测 DS18B20 工作是否正常 * */ bit RST_DS18B20() bit ret=“1“; DQ=0;/*拉低总线 */ Delayxus_DS18B20(32);/*为保险起见,延时 495us */

8、 DQ=1;/*释放总线 ,DS18B20 检测到上升沿后会发送存在脉冲*/ Delayxus_DS18B20(4);/*需要等待 1560us,这里延时 75us 后可以保证接受到的是存在 脉冲(如果通信正常的话) */ ret=DQ; Delayxus_DS18B20(14);/*延时 495us,让 ds18b20 释放总线,避免影响到下一步的操作 */ DQ=1;/*释放总线 */ return(ret); 写时序: 主机在写时隙向 DS18B20 写入数据,并在读时隙从 DS18B20 读入数据。在单总线上每 个时隙只传送一位数据。 写时间隙 有两种写时隙:写“0”时间隙和写“1”时

9、间隙。总线主机使用写“1”时间隙向 DS18B20 写入逻 辑 1,使用写“0”时间隙向 DS18B20 写入逻辑 0.所有的写时隙必须有最少 60us 的持续时 间,相邻两个写时隙必须要有最少 1us 的恢复时间。两种写时隙都通过主机拉低总线产生 (见插图 14) 。 为产生写 1 时隙,在拉低总线后主机必须在 15s 内释放总线。在总线被释放后,由于 5k 上拉电阻的作用,总线恢复为高电平。为产生写 0 时隙,在拉低总线后主机必须继续 拉低总线以满足时隙持续时间的要求(至少 60s)。 在主机产生写时隙后,DS18B20 会在其后的 15 到 60us 的一个时间窗口内采样单总线。 在采样

10、的时间窗口内,如果总线为高电平,主机会向 DS18B20 写入 1;如果总线为低电 平,主机会向 DS18B20 写入 0。 如文档所述,所有的写时隙必须至少有 60us 的持续时间。相邻两个写时隙必须要有最少 1us 的恢复时间。所有的写时隙(写 0 和写 1)都由拉低总线产生。 为产生写 1 时隙,在拉低总线后主机必须在 15us 内释放总线(拉低的电平要持续至少 1us) 。由于上拉电阻的作用,总线电平恢复为高电平,直到完成写时隙。 为产生写 0 时隙,在拉低总线后主机持续拉低总线即可,直到写时隙完成后释放总线(持 续时间 60-120us) 。 写时隙产生后,DS18B20 会在产生后

11、的 15 到 60us 的时间内采样总线,以此来确定写 0 还是写 1。 满足上述要求的写函数为:/* * 函数:WR_Bit 功能:向 DS18B20 写一位数据 参数:i 为待写的位 返回:无 说明: 总线从高拉到低产生写时序 * */ void WR_Bit(bit i) DQ=0;/产生写时序 _nop_(); _nop_();/总线拉低持续时间要大于 1us DQ=i;/写数据 ,0 和 1 均可 Delayxus_DS18B20(3);/延时 60us,等待 ds18b20 采样读取 DQ=1;/释放总线 /* * 函数:WR_Byte 功能:DS18B20 写字节函数,先写最低位

12、 参数:dat 为待写的字节数据 返回:无 说明:无 * */ void WR_Byte(unsigned char dat) unsigned char i=“0“; while(i+=1; /注意不要写成 dat1 读时序: DS18B20 只有在主机发出读时隙后才会向主机发送数据。因此,在发出读暂存器命令 BEh或读电源命令B4h后,主机必须立即产生读时隙以便 DS18B20 提供所需数据。另 外,主机可在发出温度转换命令 T 44h或 Recall 命令 E 2B8h后产生读时隙,以便了解 操作的状态(在 DS18B20 操作指令这一节会详细解释)。 所有的读时隙必须至少有 60us

13、的持续时间。相邻两个读时隙必须要有最少 1us 的恢复时 间。所有的读时隙都由拉低总线,持续至少 1us 后再释放总线(由于上拉电阻的作用,总 线恢复为高电平)产生。在主机产生读时隙后,DS18B20 开始发送 0 或 1 到总线上。DS18B20 让总线保持高电平的方式发送 1,以拉低总线的方式表示发送 0.当发送 0 的时候, DS18B20 在读时隙的末期将会释放总线,总线将会被上拉电阻拉回高电平(也是总线空闲 的状态) 。DS18B20 输出的数据在下降沿(下降沿产生读时隙)产生后 15us 后有效。因 此,主机释放总线和采样总线等动作要在 15s 内完成。 插图 15 表明了对于读时

14、隙,TINIT(下降沿后低电平持续时间), TRC(上升沿)和 TSAMPLE(主机采样总线)的时间和要在 15s 以内。 插图 16 显示了最大化系统时间宽限的方法:让 TINIT 和 TRC 尽可能的短,把主机采样总 线放到 15s 这一时间段的尾部。由文档可知,DS18B20 只有在主机发出读时隙时才能发送数据到主机。因此,主机必须在 BE 命令,B4 命令后立即产生读时隙以使 DS18B20 提供相应的数据。另外,在 44 命令, B8 命令后也要产生读时隙。 所有的读时隙必须至少有 60us 的持续时间。相邻两个读时隙必须要有最少 1us 的恢复时 间。所有的读时隙都由拉低总线,持续

15、至少 1us 后再释放总线(由于上拉电阻的作用,总 线恢复为高电平)产生。DS18B20 输出的数据在下降沿产生后 15us 后有效。因此,释放 总线和主机采样总线等动作要在 15us 内完成。 满足以上要求的函数为: /* * 函数:Read_Bit 功能:向 DS18B20 读一位数据 参数:无 返回:bit i 说明: 总线从高拉到低,持续至 1us 以上,再释放总线为高电平空闲状态产生读时序 * */ unsigned char Read_Bit() unsigned char ret; DQ=0;/拉低总线 _nop_(); _nop_(); DQ=1;/释放总线 _nop_(); _nop_(); _nop_(); _nop_(); ret=DQ;/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号