你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
举报
木易-357428 发表于 2015-2-3 14:15 一般都是读时序不对,读的延时要求非常高,时钟频率高了还好说,时钟频率低的话,多运行几句语句,DS18B20 ...
意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器
手头备一块arduino uno,验证模块好坏使用!
当然那18B20坏了只是都出来的温度是某个默认值:)
unsigned char DS18B20_Rst(void) //复位函数
{
unsigned char retry = 0;
DS18B20_out(); //设置GPIO输出
DS18B20_PIN_H; //置1
DS18B20_PIN_L;
Delay_Us(500); //延时
DS18B20_PIN_H;
Delay_Us(30);
DS18B20_in(); //设置GPIO输入
while((DS18B20_IN )&& retry < 300) //如果读到高电平,等待 调试前面都对,到这以下下出问题了,怎么修改程序也读不到18B20发出的低电平
{
retry ++;
// Delay_Us(1);
}
if(retry >=300) //超时返回1
return 1;
retry=0;
while(!(DS18B20_IN )&& retry < 300) //如果读到低电平,延时60-240US
{
retry ++;
// Delay_Us(1);
}
if(retry >= 300) //如果超时,返回1
return 1;
return 0;
}
在MAIN() //检测是否复位
{
if(DS18B20_Rst()==0) // 结果总是返回1 .调试进入,发现#define DS18B20_IN GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2) 读输入总是为1,说明18B20 在MASTER 释放总线延时15-60US后没有发出低电平,.不要说18B20是坏的,用51单片机检测过,正常能读出温度并变化
GPIO_SetBits(GPIOA, GPIO_Pin_5);
}
测试复位不通过