导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→请用过18B20的帮忙看看,究竟怎么了???为什么读出来的数

* 40293: 请用过18B20的帮忙看看,究竟怎么了???为什么读出来的数据始终是16??

   deltta 
deltta发表的帖子 

 请用过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

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:大家帮我看看我用一个470uf/36v大电容+一个104小电容对外部+5v滤波稳压,现在由于470u
[下一篇帖子]:谢谢!!input_szb@21cn.net