温度传感器DSl8B20在Proteus中的仿真
2 单总线器件DSl8B20的使用
2.1 DSl8B20的工作原理
在该测温系统中,单片机PICl6F877A作为主机,DSl8B20温度传感器作为从机。由于DSl8B20采用的是主从结构,只有主机呼叫从机时,从机才能应答。因此,访问器件时必须严格遵循单总线命令序列,以及初始化、ROM、命令功能的命令。如果序列混乱,则器件不响应主机。从机主机和从机之间的通信通过3个步骤完成:初始化器件;识别器件;交换数据。
单总线器件采用严格的通信协议来保证数据的完整性。通信协议包括:复位脉冲、应答脉冲、写0、写1、读O和读1。所有这些信号都是以先低位、后高位的方式发送的。
(1)复位脉冲和应答脉冲
复位脉冲和应答脉冲即为初始化过程,所有的通信都是以初始化开始的。首先主机要拉低总线至少480μs,接着释放总线并持续15~60μs,然后进入接收状态,检测总线DQ的电平。若DQ为低电平,则表示从机已就绪,可以发送ROM命令。由于C语言简洁紧凑、灵活方便且可
移植性好,因此本文程序采用C语言来完成。相应的初始化程序如下:
![]() |
![]() |
其中,变量dq用来判断DSl8B20是否有返回的存在脉冲,为O即有返回脉冲,表明复位成功,可跳出循环;DQ表示总线的电平,当总线为高电平时DQ为1,否则为0;DQ_IO用来表示DQ所连的单片机I/O口的状态,若该I/O口对单片机是作为输入使用则DQ_IO为1,作为输出使用则DQ_IO为O。
(2)写操作时序
无论是命令还是数据,所有的写操作都是以字节为单位的,全部以先低位、后高位的方式传输的。位写入过程是这样的:主机将总线拉低15μs,然后根据要发的那位数据的电平来决定接下来总线的电平。若数据待发位为低电平,则主机须将DQ置为低电平并保持1 5~45μs;若数据待发位为高电平,则主机需将DQ置为高电平且保持15~45μs。发送1位数据的时间(从总线拉低开始到发送结束)必须控制在60~20μ s。
位与位之间要有一个大于1μs的高电平时间间隙隔开。一个字节的数据写入结束后需要将总线释放,以确保之后操作的正确进行。
(3)读操作时序
所有数据的读取是以字节为单位,以先低位、后高位的方式进行传输的。位读取的过程如下:首先需要主机将总线拉低1~15μs,然后释放总线,对总线的电平进行判断。若总线为低电平,说明带读取数据位为0;若总线为高电平,则表明带读取数据位为1。读取1位数据的时间(从总线拉低开始到将总线置高准备下一位数据)必须大于60 μs。同样,位与位之间须有一个大于1 μs的高电平时间间隙隔开。一个字节的数据读取结束后需要将总线释放,以确保操作的正确进行。由于DSl8B20的温度采用9~12位的分辨率,因此一个温度数据需要读取2字节的温度数据。2字节的数据读取结束后将总线释放,以便接下来数据的正确传输。
评论