|
小弟做项目时用到DS18B20,随盘资料的例程有一处我总觉得有问题,大家帮我看看是不是。
unsigned char ID[5][8]; //ID[5][8]为检索到的地址
unsigned char TEMP_NUMBER; //温度传感器数量
unsigned int TEMP[5]; //温度值
//-------------------------读温度-----------------------------
void read_temp (void)
{
unsigned char I,J,DATA,CRC;
unsigned char ROM[9];
unsigned char *PA;
res_temp(); //温度传感器复位
if ((TEMP_NUMBER > 0) && (FLAG && FLAG_TEMP_RET)) //TEMP_NUMBER 为传感器数量
{ //温度传感器数量>0并且复位正常
write_temp_byt (0xcc); //写"跳过"命令
write_temp_byt (0x44); //写"读温度"命令
DATA = 0;
I = 0XFF;
while ((DATA != 0XFF) && (I>0))
{ //循环等待温度转换结束
DATA = read_temp_byt(); //读一字节
I--;
}
for (I=0; I<TEMP_NUMBER; I++)
{
PA = ROM;
res_temp();
write_temp_byt (0x55); //写"匹配温度传感器"命令
for (J=0; J<8; J++) //写温度传感器地址
{
write_temp_byt (ID[i][J]); //ID[][]为检索到的地址
}
write_temp_byt (0xbe); //写"读存储器"命令
for (J=0; J<9; J++)
{
ROM[J] = read_temp_byt();
}
CRC = crc_verify(PA,8);
if (CRC == ROM[8])
{
PA =(unsigned char*)&TEMP[i];
*PA = ROM[0];
*(PA+1) = ROM[1];
}
} //I循环结束
}
}
/////////////////////////////////////////////////////////
问题就是这句:{
PA =(unsigned char*)&TEMP[i];
*PA = ROM[0];
*(PA+1) = ROM[1];
}
如果传感器数量是1那是对的,温度值就是TEMP[0],如果传感器数量>1,难道总是读取
ROM[0],ROM[1]的值吗?
|
|