当前位置: 代码迷 >> 单片机 >> 18b20初始化有关问题
  详细解决方案

18b20初始化有关问题

热度:19   发布时间:2016-04-28 16:04:46.0
18b20初始化问题
void delay(unsigned int x) //1.5us左右  
{  
  while(x)  
  {  
  x--;  
  }  
}  
void init_1820(void)  
{  
  DS18B20_SET;  
  DS18B20_CRL;  
  delay(400); //480us以上  
DDRC|=(1<<PC0); 
  DS18B20_SET;  
  DDRC&=~(1<<PC0);  
  delay(40); //15~60us  
  while(PINC&(1<<PC0)) //<<<<---------1 
  {  
  ; 
  }  
  DDRC|=(1<<PC0);  
  DS18B20_SET;  
  delay(150); //60~240us  
}  
执行到1的位置过不去了,是不是哪段时序没弄对? 
我用的MEGA128,晶振7.几M

------解决方案--------------------
好象时序有点问题:(初始化脉冲即是存在脉冲)
unsigned char init_1820(void)
{
unsigned char tmp;
//DS18B20_SET;//这行干嘛? 
DDRC|=(1 < <PC0);//输出
DS18B20_CRL;
delay(400); //480us以上
//DDRC|=(1 < <PC0); //这行不要
DS18B20_SET;
//DDRC&=~(1 < <PC0); //这行不对,放后面
delay(40); //15~60us
DDRC&=~(1 < <PC0);
//while(PINC&(1 < <PC0)) // 这里用死循环了,如果没有18B20或者故障了,永远检测不到。
//{
//;
//}
tmp=PINC&(1 < <PC0);//这里只单次检测结果,没有时序,你一直在这while也没用,检测次数放在上一级的调用里
 
delay(150); //60~240us
DDRC|=(1 < <PC0);
DS18B20_SET; 
result=tmp;
}
------解决方案--------------------
sbit DQ = P3^3;
uchar Init_DS18B20()

{
  uchar status;
DQ = 1;
Delay(8);
DQ = 0;
Delay(90);
DQ = 1;
Delay(8);
DQ = 1;
return status;
}


不好意思,我是51写的,没有时间帮你换了



帮忙顶贴
------解决方案--------------------
学习
------解决方案--------------------
看看18b20是不是GND和VCC接反了,这样就烧了