你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
举报
木易-357428 发表于 2015-2-3 14:15 1 M4 y( D6 n7 ]' n一般都是读时序不对,读的延时要求非常高,时钟频率高了还好说,时钟频率低的话,多运行几句语句,DS18B20 ...
wambob 发表于 2015-2-3 17:55 8 X& n8 K0 ?# t1 r" z测试复位不通过
: A) W- u3 P% }8 D
手头备一块arduino uno,验证模块好坏使用!
当然那18B20坏了只是都出来的温度是某个默认值:)
unsigned char DS18B20_Rst(void) //复位函数
{ 6 G4 C6 y3 s c) D. \8 F
unsigned char retry = 0;
DS18B20_out(); //设置GPIO输出
DS18B20_PIN_H; //置1
DS18B20_PIN_L;
Delay_Us(500); //延时
DS18B20_PIN_H; 3 }/ b6 n# |" k9 T: e
Delay_Us(30); . x* d* F3 U4 F/ x
DS18B20_in(); //设置GPIO输入/ J! g8 W# ~4 c/ w# p
while((DS18B20_IN )&& retry < 300) //如果读到高电平,等待 调试前面都对,到这以下下出问题了,怎么修改程序也读不到18B20发出的低电平
{ ) @) ^2 A: a# N
retry ++;! C" f6 c/ l! K0 O$ k9 o. }
// Delay_Us(1);
}
if(retry >=300) //超时返回12 h8 H. P! s# S$ R
return 1;
retry=0;; ^9 \/ X7 n% S# i
# a, N/ [9 G0 f0 `) @: `0 a
while(!(DS18B20_IN )&& retry < 300) //如果读到低电平,延时60-240US- \- j0 f) B6 D% r% K
{
retry ++;8 H. e0 P. E' d. ?1 u. g$ W( m5 @
// Delay_Us(1);
}! v7 J* Q4 E) X
if(retry >= 300) //如果超时,返回18 i! @+ s' Q6 Y5 V' r
return 1;$ X; }1 c5 H7 C2 i9 k! W# b3 c
, S7 a; L; K# u) t I: C! x6 l1 ~
return 0;1 W$ o6 r! k7 n
}
: m5 H; k5 z2 c7 D# Q
" o3 I& U& R4 K' _
在MAIN() //检测是否复位
{
if(DS18B20_Rst()==0) // 结果总是返回1 .调试进入,发现#define DS18B20_IN GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2) 读输入总是为1,说明18B20 在MASTER 释放总线延时15-60US后没有发出低电平,.不要说18B20是坏的,用51单片机检测过,正常能读出温度并变化4 c: P: f( n6 U1 M5 a, ~
GPIO_SetBits(GPIOA, GPIO_Pin_5);8 [8 g, L! H7 y' ^" G" v+ D
$ X. R2 t( X- p: ?$ t2 ]
}
测试复位不通过
复位时序要求的不严格,但你首先要确定线序对的,芯片是好的。最好用示波器或逻辑分析仪捕捉一下,看看是否有存在脉冲。