完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#ifndef __DS18B20_H__
#define __DS18B20_H__ #include "msp430x14x.h" #include "delay.h" #define uchar unsigned char #define uint unsigned int #define DQ_OUT P1DIR|=BIT6 #define DQ_IN P1DIR&=~BIT6 #define DQ_H P1OUT|=BIT6 #define DQ_L P1OUT&=~BIT6 //20us延时程序 void delayus(unsigned int z) { unsigned int i,j; for(i = 0;i<20;i++) for(j=0;j } //初始化函数 void init_ds18b20() { DQ_OUT; _NOP(); DQ_H; //DQ复位 delayus(2); //稍做延时40us DQ_L; //将DQ拉低 delayus(25); //精确延时 大于 500us DQ_H; //拉高总线 delayus(3);//延时60us DQ_IN; _NOP(); // if(P1IN&BIT6) // error=1; // else error=0; DQ_OUT; DQ_H; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 delayus(10);//延时200us } //读一个字节 uchar readonechar(void) { uchar i=0; uchar dat=0; DQ_OUT; for(i=8;i>0;i--) { DQ_L; // 给脉冲信号 dat>>=1; _NOP(); DQ_H; // 给脉冲信号 _NOP(); DQ_IN; if(P1IN&BIT6) dat|=0x80; delayus(2); DQ_OUT; DQ_H; delayus(1); } return(dat); } //写一个字节 void writeonechar(uchar dat) { uchar i=0; DQ_OUT; for (i=8; i>0; i--) { DQ_L; if(dat&0x01) DQ_H; else DQ_L; delayus(2); DQ_H; dat>>=1; } } //读取温度 uint readtemperature(void) { uchar a=0; uchar b=0; uint t=0; float tt=0; init_ds18b20(); writeonechar(0xCC); // 跳过读序号列号的操作 writeonechar(0x44); // 启动温度转换 init_ds18b20(); writeonechar(0xCC); //跳过读序号列号的操作 writeonechar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度 a=readonechar();//低四位 b=readonechar();//高四位 t=b; t<<=8; t=t|a; tt=t*0.0625; //精确到0.0625 t= tt*100; //放大100倍输出 return(t); } #endif |
|
相关推荐
7 个讨论
|
|
只有小组成员才能发言,加入小组>>
3027个成员聚集在这个小组
加入小组2913 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3567 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2335 浏览 1 评论
4794 浏览 1 评论
2571 浏览 1 评论
1313浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3569浏览 2评论
2914浏览 1评论
1492浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 11:57 , Processed in 1.601372 second(s), Total 59, Slave 51 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号