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