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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
程序如下:
/ N' C4 |. `$ E#include "DS18b20.h"' N# g4 i' Y' T& F. s2 f$ C0 ~
#include "delay.h"
0 k0 l) P) @  s8 \. T# ^. U% [6 v #include "sys.h"
0 r0 b1 B; x6 C1 D6 g+ i #include "uart.h"
, l4 B& ^- o% y  n6 X% w
( w6 u- s% J( ?/ o8 V2 c6 z. r" `: T2 C, ?* j, K
#define DS18B20_OUT PBout(3)
' J5 Y6 @; W4 ^  ^" r #define DS18B20_IN  PBin(3)+ p9 N- ?2 m, w. R" z

# q3 q! H0 O( P6 U extern GPIO_InitTypeDef                                  GPIO_InitStructure;/ f& Y" l" w/ x+ a& J
4 k: K0 S) n+ |9 \" K
//定义变量
! X" `: L! a4 k" B2 i' r- S7 @unsigned char flag_temper = 0;, J. ^9 W1 E, J
//定义变量* a" t# S4 C" t3 ?( W
unsigned int Temp_Buffer = 0;
7 O0 [. g/ H3 x* N9 {" r3 O6 E0 O- M3 d6 O; F2 n0 q% y% I3 ~

& O$ Z3 w/ R- e3 o3 K" c //重定义fputc函数
, ?# l9 a- r; u# H# Y: N: H% J8 Aint fputc(int ch, FILE *f)- b7 k. u) x2 z3 A6 m; X
{* H- q  z/ y2 ]* h+ O
         USART_SendData(USART1,ch);
  J' ]2 L) Z9 ?; ~9 C         while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
2 ], q' m& ~" u9 I+ i
5 H* X2 b, m% u( a  y         return ch;
, y  ]' d+ l2 U }
+ `6 H; f/ {) l2 h5 p! n6 n( [' @% E$ z! A1 q1 \
//配置为mcu主设备写,从该设备读0 k: ?  h' u2 Y1 A/ ?3 }+ l! n
void init_ds18b20Out(void)
) E' o0 X% F: L2 r {
; O' }. B3 w) H0 @8 c     /* 使能GPIA的硬件时钟 */
( h' D# K6 @7 Y5 z/ X         RCC_AHB1PeriphclockCmd(RCC_AHB1Periph_GPIOB, ENABLE);0 O; {2 ^( K0 O3 I
8 K- K/ {+ c3 F
         /* GPIOA Configuration: PA9(USART1_TX) PA10(USART1_RX) */
0 z# S+ a  @+ ~7 W         GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_3 ;
* z' S: h7 ~& s: H1 C* Z         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;                         //输出
2 G7 h/ L+ L1 {$ o& N: D        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;       Z5 {$ q7 s# n$ u8 g, z1 h, e
         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;           //推挽! \. S0 i7 L1 n  v% ]$ d
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;5 `; x  i. v; X2 s  l! e
         GPIO_Init(GPIOB, &GPIO_InitStructure);
$ l4 @1 v$ c5 S1 ?; d: H }; _8 i: G# ]* a% P+ Q
& }- c( T/ N( ~8 D) q4 N* O) O& `
//配置为MCU主设备读,从设备写
7 n. @# ?" e/ r( o# c+ ]) Dvoid init_ds18b20In(void)) j, J  f  Z2 `1 }. w5 V
{4 l2 D6 L+ e; A$ C. x
     /* 使能GPIA的硬件时钟 */
; P$ F  ~! p. q) w         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
# ~8 s1 D2 z4 c5 q- a
9 ?3 Z% f  u# l# |0 {5 Y; W         GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_3 ;$ g3 p5 V) Q( M+ Y, A- K; H
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;                        //输入
2 e; W, w3 O. x8 S% @3 \$ d        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;     - u) f) p" r( B' Y/ c  T
         //GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
: L: d6 G7 c, _& u7 R$ I  ]. }         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
) B: t: h1 s  B. k         GPIO_Init(GPIOB, &GPIO_InitStructure);
9 W& L1 o9 \4 x  D, d: D* p }! ~. i# @; y6 n! S* L: ]- V

, r2 B# J& J/ C5 i- M! C1 F' Z //****************************************************+ Y. o4 N8 b5 A8 K) J0 W- D9 J
//DS18B20写1字节
0 _' Q, n% @8 i3 X! G//****************************************************& i! o+ s, ^/ Q! }; W; F
void DS18B20_Write_Byte( unsigned char dat)8 F1 `# T5 k& g
{
# ]: p" v6 w* O5 n. X/ \         unsigned char i,x=0;            //i为循环控制变量
, T9 f8 U6 ~: ~2 ?; ?) `( s    % j  ~  z: r$ A+ Z4 m
     init_ds18b20Out();          //改变DQ引脚方向性为输出方式1 T* Z" N  c, |8 j2 u2 j& Y
   
- R! ?. C6 v* c/ c# o         for( i = 0 ; i < 8 ; i++ ); l/ x6 }# }& y% P  g: q# b
         {            
2 G: e, b. N: w2 f/ g) x3 R         x = dat & 0x01;         //从最低位取值到最高为
+ M5 J9 P% A, ]! C- a) Z6 }6 w        IF(x)                   //写"1"
0 V% B2 B" \0 K  R! c$ Q         {% |, |' ?( V$ a6 ]+ I$ U
             DS18B20_OUT = 0;    //DQ单总线拉低" ^: _9 j- \+ F$ \. J
            delay_us(15);       //延时大约15us
6 ~+ t; x; Q8 K+ |             DS18B20_OUT = 1;    //DQ单总线写入 "1"! u1 e. c) H! a# x' q
             delay_us(45);       //延时大约45us
, [" V; ]" Y' Y  m+ ~& X             DS18B20_OUT ;       //最终保持高电平   
- z, D5 w: u5 r+ h         }8 J9 O, y) J$ F- E+ r
         else{+ b1 y8 L2 b7 `& H" h' }7 f
             DS18B20_OUT = 0;    //DQ单总线拉低& u8 [6 z. `  g
            delay_us(15);                               0
0 R1 ^1 h. R, T4 X( b% d2 m" ^* {: Z4 {0 `! [: B( E

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-11 07:18 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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