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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
程序如下:3 O) \' c1 s9 l/ d* V4 O
#include "DS18b20.h"
; C8 L$ J, A3 @6 Y2 @4 R #include "delay.h"! C1 A' ^& m7 O: z6 s% o  S4 f1 t
#include "sys.h", V8 Q- a4 N* L- Z  F4 ^
#include "uart.h"
& F& f) C6 K, [
3 n3 }5 c. E7 T, J% }4 w( I+ u/ S& ?$ \- {. o
#define DS18B20_OUT PBout(3)8 ^' W, F$ K) a2 J
#define DS18B20_IN  PBin(3)/ [& ^: _2 B) E1 k  P

1 M' f" }" f+ z! B" H; s% j6 X extern GPIO_InitTypeDef                                  GPIO_InitStructure;
0 P* R- T' C- r* s
; L7 W, Z. H9 T" G1 a //定义变量3 W* o# |0 {1 ^# C1 g2 P+ o" P
unsigned char flag_temper = 0;" z. o6 f1 h. y
//定义变量- ^9 T( O- z6 o9 k. q
unsigned int Temp_Buffer = 0;( _2 u0 ?. G$ `) r+ l
& n2 z* {% k4 h( _) H) l% J
# z* F: K3 i( Z8 _0 [- d
//重定义fputc函数
& q& M" j0 {) O# xint fputc(int ch, FILE *f)* c! s* Z/ R) z' _
{
9 q2 }7 i  c; {0 X& b; n1 a- v- r' q         USART_SendData(USART1,ch);) Y0 k7 q% y: r
         while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
* `- B( ]1 |& D% ?
" G. `$ H. b3 v) N$ D" j         return ch;( Y# O$ Q0 @% ^/ a! Q! x" Z
}
: \( E# g/ l0 i- U) N: f" J. X  ?/ q+ G) `
//配置为mcu主设备写,从该设备读) j% \7 e! D/ f2 Z9 K  F8 w
void init_ds18b20Out(void)
' ]9 p$ ^9 b, F5 \8 P9 K {
& f0 G6 u( {- q+ q6 a8 ^# C     /* 使能GPIA的硬件时钟 */+ |* i8 P# X+ a8 H
         RCC_AHB1PeriphclockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
  U! a$ h! L9 q
, x* o2 s* e" Z0 e3 R. |, h& V         /* GPIOA Configuration: PA9(USART1_TX) PA10(USART1_RX) */! b! Z8 C3 |7 n3 u3 E( `; |
         GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_3 ;) X  ^0 z$ s" Z- u3 n( \0 v
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;                         //输出/ h! L5 V' N, r
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;     . Z( f. A9 a5 p
         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;           //推挽* k. X0 X6 |, i, w+ q! g
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;1 S" J7 F; R3 K8 M. q
         GPIO_Init(GPIOB, &GPIO_InitStructure);' X0 _# M: O2 D2 W2 W/ E5 S: H" E6 [
}
2 D  u& Y9 z' z5 ^' c7 @( e$ ?  Y6 E7 y1 Q$ d
//配置为MCU主设备读,从设备写2 ]' S7 ~  \" R& v6 d& }* [
void init_ds18b20In(void)/ K7 }( Q! H% [% Z/ f
{$ ]1 ~9 n) M* m$ j2 m1 G
     /* 使能GPIA的硬件时钟 */
0 q! j. d0 `& X0 h         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
8 G# O* F9 G$ ^2 F, I
! m1 j# v- M9 d+ Q2 j  ^         GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_3 ;3 E& x+ H' u4 b+ q
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;                        //输入
1 \0 Z) l' o8 K" F: v$ D        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;     
9 w4 z$ S: [" f9 A8 V         //GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
( h( q' o' F& I/ k  o. J+ D         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
! D2 B" F! m# s2 g! y4 Q         GPIO_Init(GPIOB, &GPIO_InitStructure);/ v% I+ z& @3 F
}
3 f4 y) r- A" ^. ]( r1 b& A! c, u
* [4 [" A- u5 `6 a& v5 ` //****************************************************& e" _; n0 I' J% X
//DS18B20写1字节
9 U9 {9 k. m- ~//****************************************************4 @# j7 Z5 f7 ^  k; Q" z( a. T
void DS18B20_Write_Byte( unsigned char dat)
- K5 g! a- z9 b  @6 j {3 T5 M, z% g: k& S. O7 p9 F
         unsigned char i,x=0;            //i为循环控制变量5 o& N+ T* |; }# t0 v9 a% c1 @
    % [9 \; A7 c4 S% i+ ^
     init_ds18b20Out();          //改变DQ引脚方向性为输出方式
! V: q. |: Q, @* m: H    ; `4 ]: U9 o- T/ k6 k$ G
         for( i = 0 ; i < 8 ; i++ )
  S' o& L) b1 r; E         {            # r, k/ O* G) ]+ `) ^8 M. M
         x = dat & 0x01;         //从最低位取值到最高为* C! _8 K6 X3 a; V- K8 ^1 w
        IF(x)                   //写"1"- j: S( J; l, B$ X
         {0 s5 I/ Z  C5 B9 }5 f
             DS18B20_OUT = 0;    //DQ单总线拉低# }6 D) M8 ?# ^. f7 C: L- t5 Q2 g: e
            delay_us(15);       //延时大约15us
- |- j" X8 p8 {8 R- I6 D             DS18B20_OUT = 1;    //DQ单总线写入 "1"
7 M2 b0 I1 p2 L6 a2 g, B7 a4 Y             delay_us(45);       //延时大约45us. z2 U. C1 k7 t8 G7 l# F0 Q
             DS18B20_OUT ;       //最终保持高电平    " i! f3 P  R0 b: \2 f- C
         }
4 C& ~& c( j- m4 a/ D7 E! x         else{
# s4 P. T* T& ^  q             DS18B20_OUT = 0;    //DQ单总线拉低/ o7 q; Q6 u: V( g+ T# A
            delay_us(15);                               0
8 _7 W. j- n. y. `4 i- ^2 }7 |$ d, E& a/ G( i3 N# s. T/ r

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-26 08:31 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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