首页 理论教育AVR单片机与DS18B20传感器通信指令

AVR单片机与DS18B20传感器通信指令

【摘要】:单片机通过单总线访问DS18B20要遵循以下协议和步骤:① 初始化;② ROM指令;③ DS18B20功能指令。以上3个指令都是单片机访问DS18B20时在单总线上要发出的,并且每次访问必须要按照上述先后顺序进行,不能缺少任一环节,否则DS18B20不会准确响应。DS18B20共有5个ROM指令,每个指令都是8位,主机依次将这8位二进制数在总线上发出,即为ROM指令。和某一从机建立了联系后,才能再发送DS18B20的功能指令。主机通过这条指令可以查询最近一次测温后,是否有DS18B20产生报警。

单片机通过单总线访问DS18B20要遵循以下协议和步骤:

初始化

② ROM指令;

③ DS18B20功能指令。

以上3个指令都是单片机访问DS18B20时在单总线上要发出的,并且每次访问必须要按照上述先后顺序进行,不能缺少任一环节,否则DS18B20不会准确响应。有两个指令稍有特殊,即“Search ROM”[F0H]和“Alarm Search”[ECH]指令,单片机在发出这两个指令后没有第3步,而是直接返回第1步。

1.初始化

单总线协议定义了一个表示开始传输数据的总线初始化时序,相当于总线操作的起始信号,所有在单总线上的数据传输都必须以这个初始化时序开始。初始化时序信号包括:

主机(单片机)发送的复位脉冲+从机(DS18B20)发送的应答脉冲

应答脉冲让主机知道从机的存在和准备就绪,复位脉冲和应答脉冲的时长有严格规定,后面有详细描述。

2.ROM指令

主机收到从机的应答脉冲之后,为了和某一特定从机通信,必须要在总线上发出ROM指令。DS18B20的ROM中存有器件唯一的64位编码,所以ROM指令就是涉及这64位编码的指令,可以理解为寻址某一器件,因此ROM指令后面通常要跟着器件的64位编码。DS18B20共有5个ROM指令,每个指令都是8位,主机依次将这8位二进制数在总线上发出,即为ROM指令。和某一从机建立了联系后,才能再发送DS18B20的功能指令。

➢“Search ROM”指令:[F0H]

当系统初始上电的时候,主机必须要识别总线上所有从机设备的ROM编码,从而确定总线上从机的数目和类别。主机通过排除法得到ROM编码,这一过程需要主机进行尽可能多次地循环执行“Search ROM”指令,进而识别所有从机设备。如果总线上只有一个从机,则可以用较简单的“Read ROM”指令代替“Search ROM”指令。

➢“Read ROM”指令:[33H]

当总线上只有一个从机的时候,这条指令才能使用,这条指令可以让主机在不使用“Search ROM”过程的情况下读取从机的64位编码。如果总线上不止一个从机,则所有从机将同时响应此命令,会发生数据冲突。

➢“Match ROM”指令:[55H]

主机发出这条匹配ROM编码的指令后,要紧跟着发出64位ROM编码,从而在多点或单点总线上寻址某一特定的从机设备。只有和这64位ROM编码完全匹配的从机才能响应主机随后发送的功能指令,而总线上的其他从机都将等待复位脉冲。

➢“Skip ROM”指令:[CCH](www.chuimin.cn)

主机可以用这条指令同时寻址总线上所有从机设备,并且不用发送64位ROM编码。例如,主机先发送“Skip ROM”指令,接着发送“Convert T”[44 H]指令,可以让总线上所有的DS18B20同时开始温度转换。注意,当总线上只有一个从机时,“Read Scratchpad”[BEH]指令可以跟着“Skip ROM”指令发出,在这种情况下,可以让主机无须发送设备的64位ROM编码,便可读取从机数据,从而节省了时间。但是,如果总线上不止一个从机,这样做会导致总线上数据冲突。

➢“Alarm Search”指令:[ECH]

这条指令的工作过程和“Search ROM”指令基本相同,唯一区别是,只有报警标志置位的从机才响应该指令。主机通过这条指令可以查询最近一次测温后,是否有DS18B20产生报警。这条指令后面没有功能指令,执行完之后,主机应返回第一步。

3.DS18B20功能指令

当主机使用ROM指令寻址了想要通信的DS18B20之后,就可以发送功能指令了。DS18B20一共有6条功能指令,主机通过这些指令可以对DS18B20缓存写或读数据、启动温度转换、确认供电方式等。

➢“Convert T”指令:[44H]

这条命令用于启动一次传感器温度转换。转换结束后,生成的温度数值被存储在缓存中的2个字节温度寄存器中,然后DS18B20返回闲置状态。如果DS18B20为寄生供电,主机在发出这条指令之后,必须在最多10 μs内把单总线转换到强上拉。

➢“Write Scratchpad”指令:[4EH]

主机可以使用这条命令向DS18B20的缓存中写入3个字节数据,第一个字节数据被写入缓存中Byte 2(TH寄存器),第二个字节被写入缓存中Byte 3(TL寄存器),第三个字节数据被写入缓存中Byte 4(配置寄存器)。数据传输时必须低位先发。

➢“Read Scratchpad”指令:[BEH]

主机可以使用这条命令读取缓存中的数据。数据传输从Byte 0最低位开始,直到缓存中第9个字节(Byte 8—CRC)被读出。如果只需要缓存中部分数据,主机可以在任何时候发出复位信号来终止读取。

➢“Copy Scratchpad”指令:[48H]

主机使用这条命令将缓存中Byte 2、Byte 3、Byte 4拷贝到EEPROM中的TH、TL和配置寄存器。如果DS18B20为寄生供电,主机在发出这条指令之后,必须在最多10 μs内把单总线转换到强上拉。

➢“Recall E2”指令:[B8H]

主机使用这条命令将EEPROM中的TH、TL和配置寄存器数据拷贝到缓存中Byte 2、Byte 3、Byte 4,这个拷贝过程在器件上电时也会自动进行。

➢“Read Power Supply”指令:[B4H]

主机可发送这条命令与“读时序链”来确认DS18B20供电方式。在“读时序链”期间,若是寄生供电,DS18B20将拉低总线,若是外部供电,DS18B20将保持总线为高电平