7001|13

6040

帖子

196

TA的资源

版主

楼主
 

MSP430FR5739+DS18B20示例 [复制链接]

由于室内温度有点冷,所以想测量一下温度有多高,正好手头有DS18B20,就动手写写代码测一下,最终结果是12℃左右,真是受不了啊,看来下个月真要换个地方住了。

电路很简单,DS18B20+4.7K电阻一只+MSP-EXP430FR5739开发套件。DS18B20GND接板子GNDVDD接板子VCCDQ430P1.7引脚。DQVCC之间接4.7K电阻。当然数据线接哪个引脚无所谓,只要稍微改下程序即可。DS18B20的操作程序是我以前在STM32上写的,只是改了一下宏定义就轻松的移植到了430上。

功能说明:

本程序通过430P1.7引脚读取DS18B20的温度数据,通过串口(9600,8N1)发送给PC机显示。时钟:ACLK=VLOSMCLK=DCOMCLK=DCO,使用DCO8M/8=1M)来产生9600波特率,温度结果保留三位小数。

 

上传整个工程

贴部分代码,需下载整个工程才能有效果

#include <stdio.h>
#include <msp430.h>

#define DQ_reset()  ((P1OUT &= ~BIT7), P1DIR |= BIT7)
#define DQ_set()  (P1DIR &= ~BIT7)
#define read_DQ()  (P1IN&BIT7)
#define delayus(n)  __delay_cycles(n)

static unsigned char reset(void)
{
 unsigned char presence=0;
 
 DQ_reset();
 delayus(600);
 DQ_set();
 delayus(70);
 presence = read_DQ();
 delayus(600);
 
 return presence;
}

static unsigned char read_bit(void)
{
 unsigned char rbit=0;
 
 DQ_reset();
 delayus(2);
 DQ_set();
 delayus(12);
 rbit = read_DQ();
 delayus(50);
 
 return rbit;
}

static void write_bit(unsigned char rbit)
{
 DQ_reset();
 delayus(2);
 if (rbit) DQ_set();
 delayus(60);
 DQ_set();
 delayus(5);//wait for DQ line pull high and hold 1 us
}

unsigned char read_byte(void)
{
 unsigned char rbyte = 0;
 int i=0;
 for (i=0; i<8; ++i)
 {
  if (read_bit()) rbyte |= (1<<i);
 }
 return rbyte;
}

void write_byte(unsigned char rbyte)
{
 int i=0;
 for (i=0; i<8; i++)
 {
  write_bit(rbyte&(1<<i));
 }
 delayus(60);
}

unsigned short GetTemperature(void)
{
 int i=0, j=1;
 unsigned short rval;
 do {
 j = reset();
 } while (j!=0);
 write_byte(0xCC);
 write_byte(0x44);
 delayus(1000000);
 reset();
 write_byte(0xCC);
 write_byte(0xBE);
 rval = read_byte();
 rval |= (read_byte()<<8);
 for (i=0; i<7; i++)
 {
  read_byte();
 }
 return rval;
}

int put_char(int ch)
{
 UCA0TXBUF = (unsigned char)ch;
 while (!(UCA0IFG&UCTXIFG));
 return 0;
}

int main( void )
{
 // Stop watchdog timer to prevent time out reset
 WDTCTL = WDTPW + WDTHOLD;
 
 CSCTL0_H = 0xA5;
 CSCTL1 |= DCOFSEL0 + DCOFSEL1;             // Set max. DCO setting
 CSCTL2 = SELA_1 + SELS_3 + SELM_3;        // set ACLK = VLO; MCLK = DCO
 CSCTL3 = DIVA_0 + DIVS_3 + DIVM_3;        // set all dividers
 
 // Configure UART pins
 P2SEL1 |= BIT0 + BIT1;
 P2SEL0 &= ~(BIT0 + BIT1);
 // Configure UART 0
 UCA0CTL1 |= UCSWRST;
 UCA0CTL1 = UCSSEL_3;                      // Set SMCLK = 1M as UCBRCLK
 UCA0BR0 = 104;                              // 9600 baud
 UCA0BR1 = 0;
 UCA0MCTLW |= 0x1100;                      // 1M/9600 - INT(1M/9600)=0.16
 UCA0CTL1 &= ~UCSWRST;                     // release from reset
 
 while(1)
 {
  printf("%.3f\n", GetTemperature()/16.0);
  __no_operation();
 }
 return 0;
}

[ 本帖最后由 lcofjp 于 2011-12-1 20:56 编辑 ]

temperature.rar

37.33 KB, 下载次数: 258

工程文件

最新回复

for (i=0; i<7; i++) { read_byte(); } return rval;请教一下楼主   之前不是把读到的16位数据放在rval中了吗 ?那么重复read_byte()8次; 这句有什么用  详情 回复 发表于 2012-5-25 15:07
 
点赞 关注

回复
举报

5310

帖子

453

TA的资源

五彩晶圆(高级)

沙发
 
楼主好强啊!这么快就出成果了
 
 

回复

6040

帖子

196

TA的资源

版主

板凳
 

回复 沙发 蓝雨夜 的帖子

唉,这算不得成果。
 
 
 

回复

42

帖子

0

TA的资源

一粒金砂(中级)

4
 
羡慕嫉妒恨啊!我连DDS和IAR都没找到来安装。。。
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 楼主 lcofjp 的帖子

强大 很好 果断下载 测试
 
个人签名超越电子工作室:http://e-beyond.taobao.com/
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

6
 
问下楼主,楼主所说的官方例程是指IAR的还是TI自己的?
 
 
 

回复

2056

帖子

0

TA的资源

五彩晶圆(初级)

7
 
TI自己的
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

8
 

DS18B20特价出售

楚望科技是一家专业化的电子元器件供应商,长期现货,特价供应。 主要经营: 1.(单片机)微处理器(TI,ATMEL,SAMSUNG) 2.运算放大器(TI,AD) 3.可编程逻辑器件(ALTERA,XILINX,LATTICE) 4.数码.电源.稳压(TOREX,NS) 5.场效应,齐纳二极管(IR,ON) 6.网络及接口芯片(REALTEK,DAVICOM) 几年以来做原装正品集成电路为主,质量保证,更提倡“信誉第一,顾客至上”为宗旨,赢得了广大用户的一致好评。我们的口号“只做原装,只有原装”! 我公司在香港、深圳备有大量现货,以薄利多销为经营理念,与内地建立众多的生意合作伙伴,并为多家国内的排名企业、高校及研究所提供长期的配套服务,享有一定的声誉。 楚望科技(香港)有限公司 电话:0755-29471231 QQ: 369168274  MSN: chuwang001@hotmail.com
 
 
 

回复

519

帖子

0

TA的资源

纯净的硅(初级)

9
 

呵呵速度够快的哦

 
 
 

回复

41

帖子

0

TA的资源

一粒金砂(中级)

10
 
真快啊   我datasheet还没怎么么看呢
 
 
 

回复

1185

帖子

1

TA的资源

纯净的硅(高级)

11
 
楼主好人哦
 
 
 

回复

1万

帖子

16

TA的资源

版主

12
 

动作,那叫一个快

 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

13
 
for (i=0; i<7; i++)
{
read_byte();
}

return rval;


请教一下楼主   之前不是把读到的16位数据放在rval中了吗 ?那么重复read_byte()8次; 这句有什么用

 
 
 

回复

6040

帖子

196

TA的资源

版主

14
 
原帖由 weijianzh 于 2012-5-25 15:07 发表
for (i=0; i<7; i++)        {                read_byte();        }        return rval;请教一下楼主 
 之前不是把读到的16位数据放在rval中了吗
?那么重复read_byte()8次;
这句有什么用


一共有8个寄存器和一个CRC,其中前两个寄存器是温度值。我把后面那些也读出来了,在计算一下CRC确认一下数据完整性更好一些。
后面那些不读可能也行。

DS18B20.jpg (19.48 KB, 下载次数: 0)

DS18B20.jpg
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表