|
如用Proteus 需更改DS18B20的ROM值多路采集 需單個讀取其ROM值
/*ROM編碼讀取*/
void DS18B20_Read_8Rom(uchar *buffer)
{
uchar i;
init_ds18b20();
Write_DS18B20(0x33);
for(i=0;i<8;i++)
buffer[i]=Read_DS18B20();
}
void send(uchar x)
{
SBUF=x;
while(!TI);
TI=0;
}
void read_DS18B20bm()
{
uchar ww=0;
delay(222);
DS18B20_Read_8Rom(cun);
for(ww=0;ww<8;ww++)
{
send(cun[ww]);
delay(222);
}
}
/*溫度讀取*/
void DS18B20_Write_Rom(uchar *buffer)
{
signed char i;
for(i=0;i<8;i++)
Write_DS18B20(buffer[i]); //寫入8個字節的ROM
}
uchar rd_temperature(uchar *buffer)
{
uchar high,low;
char temp;
init_ds18b20();
Write_DS18B20(0x55);
DS18B20_Write_Rom(buffer);
Write_DS18B20(0x44);
Delay_OneWire(200);
init_ds18b20();
Write_DS18B20(0x55);
DS18B20_Write_Rom(buffer);
Write_DS18B20(0xbe);
Delay_OneWire(200);
low = Read_DS18B20();
high = Read_DS18B20();
temp = high<<4;
temp |= (low>>4);
return temp;
}
附 DS18B20手冊多路采集表
|
|