找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2142|回复: 7
收起左侧

单片机读取DS18B20序列号程序问题

[复制链接]
ID:70069 发表于 2020-3-31 16:22 | 显示全部楼层 |阅读模式
  1. u32 serial[8];
  2. DS18B20_Write_Byte(0X33); //读取序列号
  3.   for(i=0;i<6;i++)
  4.      serial[i] = DS18B20_Read_Byte();
  5.         printf("%d\r\n",serial );


  6. u32 number=0;  
  7. DS18B20_Write_Byte(0x33);  
  8.     for(i=0;i<6;i++)  
  9.     {  
  10.         data = DS18B20_Read_Byte();  
  11.         number |= data;  
  12.         number = number<<8;  
  13.     }  
  14.       printf("%d\r\n",number);  
复制代码

这两个哪个是对的,读取的内容不一样
上面读出来是536872200[ i]下面读出来是33686016

回复

使用道具 举报

ID:584814 发表于 2020-3-31 19:10 | 显示全部楼层
从程序上看下面的靠谱点  
回复

使用道具 举报

ID:267719 发表于 2020-3-31 21:26 | 显示全部楼层
上面的代码:u32 serial[8];后面printf("%d\r\n",serial );
输出的是指针的值,也就是serial的内存地址。536872200=0x20000508 这是serial在内存中的地址,并不是这个地址存的东西。

下面的代码:读到一个字节,把他拼成一个4字节的。比如是5个0x10,中间值就是0x10101000(u32只有4字节,左移移出了2个字节,因为代码里你是先或再左移,所以最后始终是左移过的.第一次循环完毕就是0x00001000),结果就是0x10101000=‭‭269488128‬‬。所以不一样。

根据你第二种的结果:你得到33686016=0x02020200,可以知道序列号最后3个字节是0x02 0x02 0x02,前面的被移出了。无从知道。
回复

使用道具 举报

ID:70069 发表于 2020-4-1 08:04 | 显示全部楼层
man1234567 发表于 2020-3-31 19:10
从程序上看下面的靠谱点

谢谢帮助
回复

使用道具 举报

ID:70069 发表于 2020-4-1 08:05 | 显示全部楼层
carpcarey 发表于 2020-3-31 21:26
上面的代码:u32 serial[8];后面printf("%d\r\n",serial );
输出的是指针的值,也就是serial的内存地址。 ...

明白了,谢谢您的帮助
回复

使用道具 举报

ID:481163 发表于 2020-5-11 16:10 | 显示全部楼层
楼主可以请教一下这个问题吗,想学习一下
回复

使用道具 举报

ID:70069 发表于 2020-5-12 08:04 | 显示全部楼层
本帖最后由 benclee 于 2020-5-13 08:01 编辑
风光好 发表于 2020-5-11 16:10
楼主可以请教一下这个问题吗,想学习一下

也是初学。可以共师兄习
回复

使用道具 举报

ID:70069 发表于 2020-5-13 09:34 | 显示全部楼层
风光好 发表于 2020-5-11 16:10
楼主可以请教一下这个问题吗,想学习一下

也是初学,可以共师兄习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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