找回密码
 注册
关于网站域名变更的通知
查看: 925|回复: 2
打印 上一主题 下一主题

虚心求教:ds18b20测出来的数据都是0xff ,这是怎么回事呀?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-12-9 10:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
程序如下:
5 V  p) F+ a  c* u- D: A#include "DS18b20.h"
% H6 E, W# }* W% f" _# R! z  M #include "delay.h"
* e) [/ t4 Y. w( q #include "sys.h"
- O& o0 T) n3 u3 t2 d$ q# H #include "uart.h"
. T+ F3 o7 l3 O" Z8 T7 |4 ~3 T0 X+ A+ \4 O% [
/ R  x+ {8 S: I! A0 q5 {  s  h/ i
#define DS18B20_OUT PBout(3)
- w+ Y: b( ?2 t2 a #define DS18B20_IN  PBin(3)4 I5 j& h& A4 Q8 q1 @  o9 w1 B+ P

+ ]. @* O4 m5 v% E. N/ M# i5 l extern GPIO_InitTypeDef                                  GPIO_InitStructure;
8 X. h. Q$ K  x6 W) K. w
" Y6 p# x3 C$ ^1 t# R' }/ n //定义变量
1 n- A  M% I, {( x0 Munsigned char flag_temper = 0;
6 z, W- G( w0 g9 S) u/ R //定义变量+ ~# P: Z2 R: C4 `
unsigned int Temp_Buffer = 0;# {* s5 Z7 m. f& _

* h; t0 a& v0 y# A) \& [* {9 Q# Z
//重定义fputc函数
/ k. ?5 A# ~" k9 dint fputc(int ch, FILE *f)
7 J9 f7 U, q5 W( M  u {/ R9 ~, _( ^0 E
         USART_SendData(USART1,ch);9 D! C  h- F8 {- P
         while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
0 U) V# u( t8 M. ]3 a9 ~& C% K1 A
5 T8 A8 j$ \! H4 o% a+ m$ n0 S         return ch;
# l6 K) F& c# d# _  s' } }
; Z6 k) ^' Y6 H; x, j9 y' ?) e3 I. Y0 H
+ m& w& r3 ]) y! ^ //配置为mcu主设备写,从该设备读4 h# B- ^% ]" k- x
void init_ds18b20Out(void)
8 a9 ]1 ~; e: C" }; \ {8 j' e- H( ?( o/ T. \2 w2 |
     /* 使能GPIA的硬件时钟 */8 G3 e. _: ?1 ]0 }2 ]* p) p
         RCC_AHB1PeriphclockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
! t" v& Z  K! L4 k3 _5 @+ f
' T/ O6 U5 G; D$ ~( \         /* GPIOA Configuration: PA9(USART1_TX) PA10(USART1_RX) */
6 D/ `  @/ {, \/ a& I         GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_3 ;& R# F" e/ S' G
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;                         //输出
. O, z3 `3 }9 q3 q. L8 R- `8 [        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;     ! b5 B1 [$ x8 R1 d( l' G+ y
         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;           //推挽$ R7 i# h  b# C. s) B
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
; u. v) ?+ s+ ^         GPIO_Init(GPIOB, &GPIO_InitStructure);- l, g& E! `1 h- [% O$ m* R, O
}" ?" w3 c, U( w* Z% |

" D1 k. r- J) A  |0 m //配置为MCU主设备读,从设备写
2 W' ~/ v  l4 _" K! {5 avoid init_ds18b20In(void)3 n5 ]: }. Z4 k
{
) k- h/ [, J# C7 Z2 d+ \$ F     /* 使能GPIA的硬件时钟 */
" P, F; b8 U$ n  n         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
( H  q% F8 V- R2 o0 X: S0 L1 K- ?1 n5 `) P+ F
         GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_3 ;  s+ Z5 a9 `% O! q( [( r
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;                        //输入2 Y/ [4 M2 W5 t$ x7 R1 [4 D1 z, t
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;     
) v  t- S9 a2 ]& z' K( ]5 ^+ F         //GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;5 P5 W1 @1 z0 a0 K; U3 X
         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;, \6 Z& p. u" P) k8 j1 e
         GPIO_Init(GPIOB, &GPIO_InitStructure);9 M6 E7 Q4 y+ c0 ]  x: _, _
}& h- Y; W$ |. j/ O9 h
* N; a$ E: ~3 S$ I
//****************************************************2 U* F0 t2 N4 b' E- c
//DS18B20写1字节0 b5 u. O) |4 D9 S0 d* b1 B, N7 \
//****************************************************
. I+ r. t4 O9 s. ?/ m8 ovoid DS18B20_Write_Byte( unsigned char dat)
% n/ b4 u9 k/ ~' f. w$ [$ Y {( a  G4 u5 s; m" k5 \+ o6 v
         unsigned char i,x=0;            //i为循环控制变量
- ?* ?: d! J% l9 l. L; M   
: k" i+ j" D0 U6 g0 a     init_ds18b20Out();          //改变DQ引脚方向性为输出方式; s8 g' |! I( C" Y$ s
    ! @) S1 E6 x  y; _
         for( i = 0 ; i < 8 ; i++ ): Q7 U0 @6 t* H4 n0 R" v8 f/ ^
         {            ' y5 Y. C0 F- g9 q4 A7 y7 M
         x = dat & 0x01;         //从最低位取值到最高为- g1 C- G$ N9 k& l$ \9 O, m1 F
        IF(x)                   //写"1"
2 n8 {* C( e4 C* I) G2 e         {
3 P$ F& h% E" q% i4 ]" Z* U4 ^* o             DS18B20_OUT = 0;    //DQ单总线拉低6 M6 a  H' [" Y( P% l
            delay_us(15);       //延时大约15us/ ~1 k7 j8 _7 \) K7 u( v
             DS18B20_OUT = 1;    //DQ单总线写入 "1"* j9 s/ {* m- r" M
             delay_us(45);       //延时大约45us
, }/ k% S6 k4 w+ z8 l" z, |             DS18B20_OUT ;       //最终保持高电平    " ]0 C$ X5 ^- q# X! H* U0 J- j4 I
         }$ L0 F) s( ?: H# ^; q2 G+ s( a2 N% d
         else{
0 j8 v6 q9 [0 y: e             DS18B20_OUT = 0;    //DQ单总线拉低
  N3 m8 y) k9 Q7 B2 F/ y) j6 S            delay_us(15);                               0
' F, h, Q6 d! O* N3 h$ a9 r5 q/ ~) K' S

该用户从未签到

2#
发表于 2019-12-9 18:04 | 只看该作者
跑出的程序吗?

该用户从未签到

3#
发表于 2019-12-9 19:34 | 只看该作者
用示波器看看波形
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-18 06:27 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表