首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

18b20初始化有关问题

2012-03-20 
18b20初始化问题void delay(unsigned int x)//1.5us左右{while(x){x--}}void init_1820(void){DS18B20_SE

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接反了,这样就烧了

热点排行