msp430单片机18B20温度计

发布者:masphia最新更新时间:2018-01-30 来源: eefocus关键字:msp430  单片机  18B20  温度计 手机看文章 扫描二维码
随时随地手机看文章

MSP430 单片机 18B20温度计

#include "msp430x22x4.h" 
typedef unsigned char uchar; 
typedef unsigned int  uint; 

#define DQ1 P2OUT |= BIT4

#define DQ0 P2OUT &= ~BIT4 
#define DQ_in   P2DIR &= ~BIT4 
#define DQ_out  P2DIR |= BIT4 
#define DQ_val  (P2IN & BIT4) 
  double data; 
/******************************************* 
函数名称:DelayNus 
功    能:实现N个微秒的延时 
参    数:n--延时长度 
返回值  :无 
说明    :定时器A的计数时钟是1MHz,CPU主频8MHz 
          所以通过定时器延时能够得到极为精确的 
          us级延时 
********************************************/ 
void DelayNus(uint n) 

    CCR0 = n; 
    TACTL |= MC_1;           //增计数到CCR0 
    while(!(TACTL & BIT0));   //等待 
    TACTL &= ~MC_1;          //停止计数 
    TACTL &= ~BIT0;          //清除中断标志 

/******************************************* 
函数名称:Init_18B20 
功    能:对DS18B20进行复位操作 
参    数:无 
返回值  :初始化状态标志:1--失败,0--成功 
********************************************/ 
uchar Init_18B20(void) 

    uchar Error; 
     
    DQ_out; 
     
    DQ0; 
    DelayNus(500); 
    DQ1; 
    DelayNus(55); 
    DQ_in; 
    _NOP(); 
    if(DQ_val)       
    { 
        Error = 1;          //初始化失败 
    } 
    else 
    { 
        Error = 0;          //初始化成功 
    } 
    DQ_out; 
    DQ1; 

     
    DelayNus(400); 
     
    return Error; 

/******************************************* 
函数名称:Write_18B20 
功    能:向DS18B20写入一个字节的数据 
参    数:wdata--写入的数据 
返回值  :无 
********************************************/ 
void Write_18B20(uchar wdata) 

    uchar i; 
     
    for(i = 0; i < 8;i++) 
    { 
        DQ0; 
        DelayNus(6);            //延时6us 
        if(wdata & 0X01)    DQ1; 
        else                DQ0; 
        wdata >>= 1; 
        DelayNus(50);           //延时50us 
        DQ1; 
        DelayNus(10);           //延时10us 
    } 
  

/******************************************* 
函数名称:Read_18B20 
功    能:从DS18B20读取一个字节的数据 
参    数:无 
返回值  :读出的一个字节数据 
********************************************/ 
uchar Read_18B20(void) 

    uchar i; 
    uchar temp = 0; 
     

    for(i = 0;i < 8;i++) 
    { 
        temp >>= 1; 
        DQ0; 
        DelayNus(6);            //延时6us 
        DQ1; 
        DelayNus(8);            //延时9us 
        DQ_in; 
        _NOP(); 
        if(DQ_val)   temp |= 0x80; 
        DelayNus(45);           //延时45us 
        DQ_out; 
        DQ1; 
        DelayNus(10);           //延时10us 
    } 

     
    return  temp; 


/******************************************* 
函数名称:Skip 
功    能:发送跳过读取产品ID号命令 
参    数:无 
返回值  :无 
********************************************/ 
void Skip(void) 

    Write_18B20(0xcc); 

/******************************************* 
函数名称:Convert 
功    能:发送温度转换命令 
参    数:无 
返回值  :无 
********************************************/ 
void Convert(void) 

    Write_18B20(0x44); 

/******************************************* 
函数名称:Read_SP 
功    能:发送读ScratchPad命令 
参    数:无 
返回值  :无 
********************************************/ 
void Read_SP(void) 

    Write_18B20(0xbe); 

/******************************************* 
函数名称:ReadTemp 
功    能:从DS18B20的ScratchPad读取温度转换结果 
参    数:无 
返回值  :读取的温度数值 
********************************************/ 
uint ReadTemp(void) 

    uchar low; 
    uint  temp; 
     
    low = Read_18B20();      //读低位 
    temp = Read_18B20();     //读高位 
    temp = (temp<<8) | low; 
     
    return  temp; 

/******************************************* 
函数名称:ReadTemp 
功    能:控制DS18B20完成一次温度转换 
参    数:无 
返回值  :测量的温度数值 
********************************************/ 
uint Do1Convert(void) 

    uchar i;  
     
    do 
    { 
        i = Init_18B20(); 
    } 
    while(i); 
    Skip(); 
    Convert(); 
    for(i = 20;i > 0;i--)   
        DelayNus(60000); //延时800ms以上 
    do 
    { 
        i = Init_18B20(); 
    } 
    while(i); 
    Skip(); 
    Read_SP(); 
    return ReadTemp(); 


void main(void) 

  WDTCTL=WDTPW+WDTHOLD;     //关看门狗 
  BCSCTL1 =CALBC1_8MHZ;     //设定DCO为1MHZ 
  DCOCTL =CALBC1_8MHZ;   
   
  TACTL=TASSEL_2+ID_3; 
  P2SEL=0x00; 
data =Do1Convert(); 

data /=16; 


关键字:msp430  单片机  18B20  温度计 引用地址:msp430单片机18B20温度计

上一篇:称重计程序
下一篇:12864显示屏菜单程序

推荐阅读最新更新时间:2024-03-16 15:53

基于AT89C51单片机的自行车仪表系统设计
一.系统概述 系统使用的模块有AT89C51单片机+小灯+按键+ADC0832+DS1302时钟模块。 系统内使用AT89C51单片机作为主控,检测到的自行车速度会通过ADC0832转换后发送到单片机,并且会将速度数据上传到LCD1602上进行显示,通过按键可以设定阈值,当检测到速度超过设定阈值后就会通过小灯报警,使用DS1302时钟模块给系统提供时钟数据,显示屏上会显示日期时间等参数。 二.仿真概述 1.LCD1602显示屏上显示自行车车速和阈值。 2.按下界面切换后显示日期和时间数据。 3.通过ADC0832和电位器模拟自行车车速。 4.通过按键可以设定自行车的车速阈值。 5.当检测到车速超过阈值就会通过小
[单片机]
基于AT89C51<font color='red'>单片机</font>的自行车仪表系统设计
低成本8位单片机控制的光电寻迹智能车
智能车 竞速比赛以及多种智能车的应用场合中,需要智能车沿着某条轨迹快速前进,使用普通红外 传感器 、激光传感器、摄像头识别均可有效提取路面轨道信息而解决这一问题,现在常见使用16位 单片机 作为控制核心。普通红外传感器因为易受干扰、前瞻距离短等缺点已经较少使用,摄像头有丰富的数据信息,但是低成本8位单片机不能很好的处理这些信息。激光传感器成本适中,处理的信号便于8位单片机处理,能够有效的节省硬件成本。针对寻迹智能车进行了软硬件设计,采用3位freescale单片机MC9S08AC16作为控制核心,使用激光传感器提取赛道信息,采用低成本的红外测速方案,算法使用以PID为基础的枚举查表法,做到了处理快速高效。整个设计既满足了竞速小车的
[单片机]
低成本8位<font color='red'>单片机</font>控制的光电寻迹智能车
为国争光,四维图新首颗车规级MCU芯片实现量产
近日,四维图新旗下全资子公司 AutoChips 杰发科技对外发布消息称,国内首款通过AEC-Q100 Grade 1, 工作温度-40℃~125℃的 车规级MCU (车身控制芯片)在客户端量产,并获得首批订单。 四维图新副总裁、AutoChips杰发科技副总经理万铁军指出,“车规级MCU芯片因研发周期长、设计门槛高、资金投入大,使得国内厂商对车规级芯片产品望而却步。AutoChips杰发科技在经过了三年的设计、研发和测试,终于让车规级MCU产品市场看见来自我们中国芯片企业的产品。” 在汽车领域, MCU 的应用范围非常广,从车载信息娱乐产品,到雨刷、车窗、电动座椅等车身控制,每一个车辆功能的实现背后都需要复杂的芯片组
[嵌入式]
为国争光,四维图新首颗车规级<font color='red'>MCU</font>芯片实现量产
利用SST89E564RC单片机的多点温控采暖控制系统的设计
利用SST89E564RC单片机及新型测温器件设计了多点温控采暖控制系统,根据室内各点温度设定实时控制采暖系统,从而提高居室的舒适性以及采暖的经济性。 1 系统设计目标 系统总体设计思想是以SST89E564RC单片机为控制核心,整个系统硬件部分包括温度检测部分、控制执行部分、显示及键盘系统及最小系统基本电路。系统利用单片机获得温度传感器数据并与系统设计值进行比较,根据比较结果分别控制执行系统。温度控制系统控制框图如图1所示。 2 系统硬件设计 根据系统所需完成的功能,设计系统硬件结构如图2所示。 2.1 控制核心 系统采用SST89E564RC单片机作为控制核心,进行温度采集、信息显示及执行机
[工业控制]
利用SST89E564RC<font color='red'>单片机</font>的多点温控采暖控制系统的设计
基于51单片机的万用表proteus仿真
仿真图: 部分源程序: #include reg52.h #include LCD.h #include Delay.h #include AD.h #include measure_define.h #include KEY_FUNCTION_DEFINE.H #include Cap_define.h void ININT_int1(void); extern unsigned char key_number; extern unsigned char disp_value ; void main(void) { unsigned char num=0; s1=0; s2=0; s3=0
[单片机]
基于51<font color='red'>单片机</font>的万用表proteus仿真
液晶显示模块TC1602A与单片机的接口技术
随着科技的发展,液晶显示模块的应用前景更加广阔,目前已广泛应用于电子表、计算器、液晶电视机、便携式电脑、掌上型电子玩具、复印机、传真机等许多方面。   液晶显示(LCD)大体分为笔段型、字符型、点阵图形型等几大类,字符型液晶显示模块是一类专门用于显示字母、数字、符号等的点阵型液晶显示模块,它是由若干个5%26;#215;7或5%26;#215;11等点阵字符组成。每一个点阵字符位都可以显示一个字符,点阵字符位之间的一个点距的间隔起字符间距和行距的作用。目前市面上常用的有16字%26;#215;1行、16字%26;#215;2行、20字%26;#215;2行和40字%26;#215;2行等字符模型,这些LCD虽然显示的字数各不相同,
[电源管理]
AVR单片机(学习ing)-ATMEGA16的USART与PC机串行通信
五、ATMEGA16的USART与PC机串行通信 五 (01)、PC机发送字符给单片机控制发光管亮,同时将其传回PC机,其中单片机的发送和接收都采用查询方式(下一篇中有例程~) 1、USART的主要特点 通用同步和异步串行接收器和转发器(USART) 是一个高度灵活的串行通讯设备。主要特 点为: 全双工操作( 独立的串行接收和发送寄存器) 异步或同步操作 主机或从机提供时钟的同步操作 高精度的波特率发生器 支持5, 6, 7, 8, 或9 个数据位和1 个或2 个停止位 硬件支持的奇偶校验操作 数据过速检测 帧错误检测 噪声滤波,包括错误的起始位检测,以及数字低通滤波器 三个独立的中断:发送结束中断, 发送数
[单片机]
AVR<font color='red'>单片机</font>(学习ing)-ATMEGA16的USART与PC机串行通信
什么是51单片机最小系统
1.什么是51单片机 51 内核单片机是 指兼容Intel 的8051指令系统的单片机统称;从诞生到现在的几十年时间,已成为一款经过市场考验、成熟的芯片产品。目前国内也众多51单片机厂家,且还有众多带51内核,用于各种不同场景的专用类单片机。 51单片机内部框架: 以下以STC89C52单片机为例,其内部总体结构其基本特性如下: 8位CPU、4-8k 字节 ROM、128 字节 RAM、21 个特殊功能寄存器32根I/0线、可寻址的 64 字节外部数据、程序存贮空间、2个 16 位定时器计数器中断结构:具有二个优先级、五个中断源、一个全双工串行口、位寻址(即可对寄存器进行位操作)功能,能按位进行逻辑运算的位处理器。 除 1
[单片机]
什么是51<font color='red'>单片机</font>最小系统
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved