一直用18B20测温都好好的,某日不知为何18B20发烫厉害,程序跑飞复位后卡在18B20初始化上,以前没有特别注意这个环节,认为18B20初始化后就可以执行下面的代码了,现在遇到问题确实忽视了这点。查了datasheet,18B20复位正常后由于有10K电阻的上拉,空闲时间端口输出为高电平,那是否可以通过软件检测输出端口持续高电平的时间来判断18B20复位是否正常?不知其他朋友是如何判断检测的?
//---- DS18B20复位 ----
void DS18B20_reset()
{
OUTPUT(DDRB,DQ); //DQ设为输出
CLR(PORTB,DQ); //DQ拉低电平
delay_us(680); //延迟500us
SET(PORTB,DQ); //DQ置高电平
delay_us(50); //延迟40us
INPUT(DDRB,DQ); //DQ设为输入
while(PINB&BIT(DQ)); //在这里加入检测长时间的高电平?
while(!(PINB&BIT(DQ)));
}
|