1. 程式人生 > >DS18B20設定高低溫限值(寫暫存器)

DS18B20設定高低溫限值(寫暫存器)

最近使用到DS18B20,一個匯流排掛載多個感測器,為了識別每個感測器的實際位置,想了一個辦法:在使用前先對DS18B20編號並記錄該編號的實際放置位置。這樣在讀取資料後即可得到是哪個位置編號的溫度值。看了看手冊發現內部的高低溫報警閾值是儲存在EEPROM正好用來儲存位置編號。

首先了解下通訊過程,ROM指令,RAM指令以及暫存器內容:





位置編號儲存在 高溫限值(TH)和低溫限值(TL)中 寫入編號程式如下: DS18B20_Start ();                    // ds1820 start convert
DS18B20_Rst();
DS18B20_Check(); 
//rom指令
DS18B20_Write_Byte(0xcc);// skip rom
//ram指令
DS18B20_Write_Byte(0x4e);// 寫暫存器  
//寫報警值
DS18B20_Write_Byte(addrH);// 寫入高位    
DS18B20_Write_Byte(addrL);// 寫入低位    


寫入以後需要儲存到EEPROM中,程式如下: DS18B20_Start ();                    // ds1820 start convert
DS18B20_Rst();
DS18B20_Check(); 
//rom指令
DS18B20_Write_Byte(0xcc);// skip rom
//ram指令
DS18B20_Write_Byte(0x48);// 複製暫存器 


讀取編號程式如下: DS18B20_Start ();                    // ds1820 start convert
DS18B20_Rst();
DS18B20_Check();
DS18B20_Write_Byte(0xcc);// skip rom
DS18B20_Write_Byte(0xbe);// 讀暫存器
 
TL  = DS18B20_Read_Byte(); // 溫度低位0
TH = DS18B20_Read_Byte(); // 溫度高位1
ADDRH = DS18B20_Read_Byte(); // 地址高位2
ADDRL = DS18B20_Read_Byte(); // 地址低位  3