历史上的今天
返回首页

历史上的今天

今天是:2025年01月30日(星期四)

2018年01月30日 | msp430单片机18B20温度计

2018-01-30 来源:eefocus

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; 


推荐阅读

史海拾趣

Hirschmann公司的发展小趣事
在自动化控制系统中,定时电路常用于实现各种定时控制功能,如延时启动、定时关闭、周期性操作等。这种可编程定时电路可以根据实际需求灵活设置延时时间和输出特性,满足复杂的控制要求。
DAESAN公司的发展小趣事

随着全球化进程的加速,DAESAN公司开始将目光投向国际市场。他们制定了详细的国际化战略,积极拓展海外市场。通过与国外企业的合作和交流,DAESAN公司逐渐建立起全球化的生产和销售网络。他们的产品不仅畅销亚洲市场,还成功打入欧美等发达国家市场。国际化战略的实施,使DAESAN公司的品牌知名度和影响力得到了显著提升。

得力(deli)公司的发展小趣事

得力公司在文具和打印机领域取得成功后,并未满足于此,而是继续寻求新的增长点。2016年,得力集团与余姚得力工具有限公司合资成立宁波得力工具有限公司,正式进入电动工具领域。得力凭借其在技术研发和品质控制方面的优势,迅速在电动工具市场占据一席之地。特别是其自主研发的“红芯”系列电动工具,凭借其高品质、高性价比的特点,赢得了用户的广泛好评。

Cal Crystal Lab Inc / Comclok Inc公司的发展小趣事

Comclok Inc创立之初,便专注于高精度时钟芯片的研发与生产。在电子设备的智能化和精准化趋势日益明显的背景下,高精度时钟芯片成为了市场的热门需求。Comclok Inc凭借出色的技术实力和敏锐的市场洞察力,成功开发出一系列性能卓越的时钟芯片,并迅速占领市场份额。公司不仅在国内市场取得了成功,还积极拓展海外市场,与多家国际知名企业建立了长期合作关系。

Ericsson公司的发展小趣事

Ericsson公司在早期就非常注重市场拓展和全球布局。通过与各国电信运营商建立合作关系,Ericsson成功将其产品和服务推广到了全球各地。特别是在中国市场,Ericsson早在19世纪90年代就与中国签订了供货合同,成为中国通信网络建设的重要参与者。如今,Ericsson已经在中国扎根130余年,成为了唯一一家从1G到5G全程参与中国通信网络建设的企业。

ECS公司的发展小趣事

面对云计算技术的不断发展和市场竞争的加剧,ECS公司制定了面向未来的战略布局。他们将继续加大在研发方面的投入,推动ECS服务的不断升级和创新;同时,他们还将积极探索新的业务领域和市场机会,为客户提供更加全面、丰富的服务。此外,ECS公司还注重可持续发展和社会责任。他们致力于降低能耗和排放、推动绿色计算等方面的工作;同时,他们还积极参与社会公益事业和慈善活动,回馈社会。这些举措使得ECS公司不仅成为了一家领先的云服务提供商,还成为了一家具有社会责任感的企业。

问答坊 | AI 解惑

各位做嵌入式开发的兄弟,都在哪个城市?

不知做嵌入式开发,哪里的兄弟多些?所在地的情况如何?…

查看全部问答>

单片机8051缓存显示

功能:把键盘输入的数据存入显示缓存区 displaybuf ,然后显示缓存区的内容, 调试的结果不对,显示很乱~ 不知道什么原因? #include #define uchar unsigned char #define uint unsigned int sbit ledk=P2^5;  //锁存口 sbit d ...…

查看全部问答>

WinCE系统下如何识别以太网,U盘,USB电缆的状态

WinCE系统下如何识别  以太网网口的状态---即有没有与其他电脑相连接 WinCE系统下如何识别  U盘的状态----是否有U盘插到usb host口上 WinCE系统下如何识别  USB电缆的状态----是否有USB电缆连接到USB device上…

查看全部问答>

求readline交叉编译方法

我要用readline做个命令行,但是在移植readline的时候,make以后编译不通,出现下面的情况 make[1]: Leaving directory `/work/readline/readline-5.2/shlib\' 不知道是啥原因! 帮忙给点意见!^_^ 过程如下: # tar zxf readline-5.2.tar.gz ...…

查看全部问答>

针对丝印器件 反查;本人曾经查找了一些资料,希望用得上

针对丝印器件 反查;本人曾经查找了一些资料,希望用得上 更偏僻的或者新出的产品就得花MONEY买专业材料了 价格不菲   这是其中一款反查界面;…

查看全部问答>

变频器接地对干扰的影响

1     单点 接地,为许多在一起的电路提供公共电位参考点,由于只有一点接地,所以构成不了地回路的问题,因此就几乎不存在干扰的问   题,在通信速率低于1000KHZ时,选用一点接地效果比较好。 2    ...…

查看全部问答>

IAR单步调试怎么老运行到注释上面,急

                                 用IAR5.40以前没问题,今天在写程序的时候突然停电,后来再用IAR调试,以前调试过的程序竟然出问题了,再单步运行 ...…

查看全部问答>

香版主,STM8S208和STM8A5189在CAN部分有啥区别啊

                                 我5189上CAN能正常接受发送数据,208上完全没有反应,是怎么回事啊…

查看全部问答>

选型请教:

请问版主,我只要以下功能和特性,选哪个芯片好: 1.STM32, 2.带CAN2.0B 3.带USB全速从机接口. 4.带JTAG接口, 5.LQFP封装. 6.引脚越少越好 7.价格最便宜 8.很好买到 谢谢!…

查看全部问答>

STM8S晶振抗干扰问题解决了没有

                                 本来从PIC转向STM8S,如果解决不了晶振问题,又要转回去了…

查看全部问答>