完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如何使用DS18B20测量一个温度值:
首先包保证对DS18B20读写操作的函数没有问题基本的 //从DS18B20读取一个位 //返回值:1/0 u8 DS18B20_Read_Bit(void) // read one bit { u8 data; DS18B20_IO_OUT();//SETPA0 OUTPUT DS18B20_DQ_OUT=0; delay_us(2); DS18B20_DQ_OUT=1; DS18B20_IO_IN();//SETPA0 INPUT delay_us(12); if(DS18B20_DQ_IN)data=1; else data=0; delay_us(50); return data; } //从DS18B20读取一个字节 //返回值:读到的数据 u8 DS18B20_Read_Byte(void) // read one byte { u8 i,j,dat; dat=0; for(i=1;i<=8;i++) { j=DS18B20_Read_Bit(); dat=(j<<7)|(dat>>1); } return dat; } //写一个字节到DS18B20 //dat:要写入的字节 void DS18B20_Write_Byte(u8 dat) { u8 j; u8 testb; DS18B20_IO_OUT();//SETPA0 OUTPUT; for (j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if (testb) { DS18B20_DQ_OUT=0;// Write 1 delay_us(2); DS18B20_DQ_OUT=1; delay_us(60); } else { DS18B20_DQ_OUT=0;// Write 0 delay_us(60); DS18B20_DQ_OUT=1; delay_us(2); } } } 因为单片机只对一个DS18B20进行操作,就不需要读取ROM编码以及匹配ROM编码了,只要用跳过ROM(0XCC)命令。 再进行温度的读取和转换就可以得到温度值了 多点温度读取 但是有时我们做一个项目可能要测量多个位置的温度,这个时候我们任然可以选用DS18B20来完成这项工作。每一个DS18B20都有自己的48位序列号,我们可以通过这个序列号在同一个IO口上寻找不同的DS18B20。然后接下来的操作就和读取一个DS18B20温度的是一样的。 得到一个DS18B20的光刻ROM是实现多点温度采集的前提,首先初始化DS18B20的状态,在向DS18B20写读ROM(0X33)的指令,再接收数据即可。如下图。 读取出的光刻ROM可以通过下面的函数进行检验是否正确 得到的光刻ROM可以通过串口,打印到上位机上 然后在上位机中可以看到这样的数据(看不清可以放大WORD来看) 要知道64位的光刻ROM中有8位是产品类型标号,每个DS18B20都是一样的,0X28。要注意的问题是在上位机超过9的数字,并不是以a,b,c,d……..的形式显示,而是以10,11,12…….的形式显示。 然后在通过自己的转换就可得到光刻ROM了。 得到了光刻ROM再借助这两个函数就可以进行温度读取了 如果还有什么不懂的,欢迎加QQ:1254411429 |
|
|
|
2162 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1997 浏览 3 评论
4593 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2140 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2659 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 09:15 , Processed in 0.641800 second(s), Total 65, Slave 48 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号