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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
程序如下:: \4 T1 n. s& A# e
#include "DS18b20.h"
0 b2 E, `# ?7 w #include "delay.h"4 j( k0 k& y; @  B2 V
#include "sys.h"
2 {% H' @2 e: N# | #include "uart.h"$ Q/ _6 h! R& j, f. \! M

4 }2 m: U& c+ D  _# F2 Y. G- |; g# t
* q% _7 q) k( p* P #define DS18B20_OUT PBout(3)
) N( Z( m7 E& H. H #define DS18B20_IN  PBin(3)0 }$ j. d, o- D
' v- m3 `: j1 N" u6 O  ^- d0 c
extern GPIO_InitTypeDef                                  GPIO_InitStructure;
1 Q- `, Z1 J+ @
4 o+ X# H- Z& y1 B //定义变量
! H) B# m( Y% c# x4 uunsigned char flag_temper = 0;4 R! K0 z# p; I) G' g
//定义变量
, ?7 ~4 ^9 U  I4 o' f1 munsigned int Temp_Buffer = 0;0 g: Z: p; O% k$ C2 ?
, F: O) a7 o, }, [6 }; L1 c8 D

- X. m" |3 B1 D- [, y# o //重定义fputc函数2 A2 ^$ @% ]2 k; I9 {
int fputc(int ch, FILE *f)
) Q- F' u1 q8 K0 q7 ] {
0 |. v6 t( {$ Z7 C" @9 r         USART_SendData(USART1,ch);
% K' W5 A  k* a: r. K1 L" z         while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
3 b; q) \% U& }7 Q2 f& J4 i# h# F" ?: }" r4 S( l8 a, {
         return ch;( x+ b+ X' {  H3 l/ T: O
}
0 _1 m4 o" {2 _" e
# I5 T! _+ J. Q- E  G6 y //配置为mcu主设备写,从该设备读
% w7 H* x4 `& Z) C6 Svoid init_ds18b20Out(void)
/ |! M; \4 l) i/ U* r9 J {
4 t( @/ d* i% v6 n, q- i     /* 使能GPIA的硬件时钟 */9 o$ K4 O) k  c2 V: A
         RCC_AHB1PeriphclockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
+ c: G. ?& p4 l2 P6 |/ z
, P0 N2 g8 s2 O+ C# h$ [) Q         /* GPIOA Configuration: PA9(USART1_TX) PA10(USART1_RX) */; r% I' P0 v4 p* P
         GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_3 ;( W2 |4 k  Q1 g8 c% I
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;                         //输出; s. r' j/ W# o: V, m) y
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;     
3 q8 g+ D* a# ?7 c         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;           //推挽" V( G6 O  i; c4 E1 J
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
2 I6 H) X- `  f         GPIO_Init(GPIOB, &GPIO_InitStructure);. n# B. x+ V9 r
}
$ D, V0 B$ L0 \0 X7 b; n9 l' k0 Y- g% ]
//配置为MCU主设备读,从设备写
' t, f( B( o3 |6 |7 u" Nvoid init_ds18b20In(void): Z- L9 X# W1 q0 \, ^" ?0 H
{
. q4 v5 r* h' r. d) Z- _0 C7 _2 l     /* 使能GPIA的硬件时钟 */; ]# |* _! z; ~
         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
1 ]! r! h9 \0 S* ]8 v" H' v; M* e% y1 g: c8 s; i
         GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_3 ;! t' U* Y2 m5 Y7 S* b+ k/ ^, N: S
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;                        //输入! \! w* n) a% @2 f
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;     4 Z: M2 k' {1 M/ d% _
         //GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;' e% I: @: c" H! E1 \5 K5 i5 R" a
         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;) P  S! h9 T& x( J
         GPIO_Init(GPIOB, &GPIO_InitStructure);: ~6 l& t2 {4 \- j# _7 Y
}
% f! M9 R7 l2 a
. P4 B0 `" j6 `! ~1 p //****************************************************
& q! x$ \9 o4 J6 ? //DS18B20写1字节# N2 `6 P  B: I, v
//****************************************************
6 ~2 J. y3 V6 H" I" C# O* j6 ^  @void DS18B20_Write_Byte( unsigned char dat)/ t* M* r3 B7 Y3 U3 O+ S) a
{
: O8 W' B$ F1 r- t# a         unsigned char i,x=0;            //i为循环控制变量
1 |0 q7 `4 L; D  G    ! |0 l* ^, j; Y# K3 y
     init_ds18b20Out();          //改变DQ引脚方向性为输出方式; J, R% f, m4 u; H. k! k
    8 z( B1 k5 ~* U8 C0 v
         for( i = 0 ; i < 8 ; i++ )6 ]0 r2 V/ b7 R; K& g, r
         {              M; C' e/ ~/ s& w# s
         x = dat & 0x01;         //从最低位取值到最高为* Q5 p% p* _4 e; `5 G# V5 s% B, `
        IF(x)                   //写"1"3 V; O; s2 z. R
         {* l# c6 g4 _) t
             DS18B20_OUT = 0;    //DQ单总线拉低
; `7 [7 q6 A9 z0 {            delay_us(15);       //延时大约15us
) T* _- ^% P; V+ d1 l' K# G/ o4 T             DS18B20_OUT = 1;    //DQ单总线写入 "1"% q5 |* [2 J& V. t4 U$ P7 F2 b# `
             delay_us(45);       //延时大约45us
  ~# \  R, T, r7 V! ~% F             DS18B20_OUT ;       //最终保持高电平    + ^$ }/ g& X( Z, p0 J$ n4 V
         }
/ w& I; T2 d6 H* q% z; K         else{2 x& f0 E* ^) f  Z. _
             DS18B20_OUT = 0;    //DQ单总线拉低
2 u" _, y- I" S3 {# E* C! \            delay_us(15);                               0% F/ v- s! ]) k
! r2 K; S$ Q8 e, Y

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-28 11:50 , Processed in 0.062500 second(s), 23 queries , Gzip On.

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

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

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