请用过18B20的帮忙看看,究竟怎么了???为什么读出来的数据始终是16??
//----***** 以下是 1820 的控制操作*****
//延时
void delay(int useconds)
{
int s;
for(s=0;s <useconds;s++) ;
}
//复位
unsigned char ow_reset(void)
{
unsigned char presence;
//do {
DQ = 0; //pull DQ line low
delay(29); // leave it low for 480us
DQ = 1; // allow line to return high
delay(3); // wait for presence
presence = DQ; // get presence signal
delay(25); // wait for end of timeslot
if(presence==0) JDQ= 1;
//while(presence==0);
return(presence); // presence signal returned
} // 0=presence, 1 = no part
//从 1-wire 总线上读取一个
unsigned char read_bit(void)
{
unsigned char i;
DQ = 0; // pull DQ low to start timeslot
DQ = 1; // then return high
for (i=0; i <3; i++);
return(DQ);
}
//向 1-WIRE 总线上写一个
void write_bit(char bitval)
{
DQ = 0; // pull DQ low to start timeslot
if(bitval==1) DQ = 1;
delay(5); // hold value for remainder of timeslot
DQ = 1;
}
//从 1-wire 总线上读取一个
unsigned char read_byte(void)
{
unsigned char i;
unsigned char value = 0;
for(i=0;i <8;i++)
{
if(read_bit()) value|=0x01 < <i; //reads byte in,one byte at a time and then shift it left
delay(6); //wait for rest of timeslot
}
return(value);
}
//向 1-WIRE 总线上写一个
void write_byte(char val)
{
unsigned char i;
unsigned char temp;
for(i=0;i <8;i++) //writes byte,one bit at a time
{
temp = val> > i; //shift val right 'i'spaces
temp &=0x01; //copy that bit to temp
write_bit(temp); //write bit temp into
}
delay(5);
}
//读取温度
void Read_Temperature(void )
{
char temp_lsb,temp_msb;
//char k;
//char get[10];
//ow_reset();
if(!ow_reset()){
write_byte(0xCC); // Skip ROM
write_byte(0x4e); // 写方式
write_byte(0x64);
write_byte(0x00);
write_byte(0x1f); // 设置9位转换
write_byte(0x44); // Start Conversion
delay(6);
write_byte(0xCC); //Skip ROM
write_byte(0xBE); // Read Scratch Pad
temp_lsb=read_byte();
temp_msb=read_byte();
ow_reset();
write_byte(0xCC); //Skip ROM
write_byte(0x44); // Start Conversion
//取出转换结果,保留整数
temp=((temp_msb < <4)|(temp_lsb> > 4))&0x7f;
//将转换结果写入显存
led[2]=temp/100;
led[1]=(temp%100)/10;
led[0]=temp%10; //始终是:16
}
// return(temper);
}
发表时间:2003年8月18日11:15:01