MSP430 Launchpad MSP430g2452 SHT10 温湿度传感器

发布者:TranquilDreams最新更新时间:2020-04-02 来源: eefocus关键字:MSP430  SHT10  温湿度传感器 手机看文章 扫描二维码
随时随地手机看文章

在MSP430 Launchpad MSP430g2452平台上的SHT10 温湿度传感器


//********************************File Information*******************************

//** File Name:        Sht10.c

//** Platform:         MSP430 LaunchPad MSP430G2452

//** System Function:  Sht10 Sensirion Inc driver code

//** Created by:       ding

//** Created date:     2014-09-15

//** Version:          V1.0

//******************************************************************************

//---------------------------------------

//硬件连线-接口定义:

//SCK: -->P1.5 //定义通讯时钟端口

//SDA: -->P1.6 //定义通讯数据端口

//---------------------------------------

 

#include //Library

#include //__no_operation();

//#include        //Library  

//#include       //printf();

 

//宏定义,延时函数,参数为1时相应延时分别为1us和1ms

#define CPU_F               (double)1000000

#define delay_us(x)         __delay_cycles((long)(CPU_F * (double)x/1000000.0))

#define delay_ms(x)         __delay_cycles((long)(CPU_F * (double)x/1000.0))

 

#define uint unsigned int

#define uchar unsigned char

#define ulong unsigned long

                              //adr command r/w

#define STATUS_REG_W 0x06     //000   0011    0 //写状态寄存器

#define STATUS_REG_R 0x07     //000   0011    1 //读状态寄存器

#define MEASURE_TEMP 0x03     //000   0001    1 //温度测量

#define MEASURE_HUMI 0x05     //000   0010    1 //湿度测量

#define RESET        0x1e     //000   1111    0 //软复位

 

#define bitselect     0x01    //选择温度与湿度的低位读

#define noACK         0       //没有返回ACK

#define ACK           1       //返回ACK

#define HUMIDITY      2

#define TEMPERATURE   1

 

#define SCK           BIT5  //P1.5

#define SDA           BIT6  //P1.6

#define SCK_H         P1OUT|=SCK  //高

#define SCK_L         P1OUT&=~SCK //低

#define SDA_H         P1OUT|=SDA  //高

#define SDA_L         P1OUT&=~SDA //低

 

typedef union  //定义了两个共用体

unsigned int i;

float f;

}value;

 

/**********************************************************************************************************

**Function Name:      S_Init

**Description:        初始化

**Input Parameters:   no

**Output Parameters:  no

**********************************************************************************************************/

void S_Init()

{

  P1SEL&=~(SCK+SDA); 

  P1DIR|=SCK;

  P1DIR&=~SDA; 

 //BCSCTL1=(XT2OFF+RSEL2);    //关闭XT2,1MHz DOC     

 //DCOCTL=DCO2;               //设定DCO频率为1MHz

}

 

/**********************************************************************************************************

**Function Name:      S_Transstart

**Description:        start时序                   

**                    generates a transmission start 

**                          _____         ________

**                    DATA:      |_______|

**                              ___     ___

**                    SCK : ___|   |___|   |______

**********************************************************************************************************/

void S_Transstart()

{

 P1DIR|=SDA;

 SDA_H;SCK_L;

 __no_operation();

 SCK_H;

 __no_operation();

 SDA_L;

 __no_operation();

 SCK_L;

 __no_operation();

 __no_operation();

 __no_operation();

 SCK_H;

 __no_operation();

 SDA_H;

 __no_operation();

 SCK_L;

 P1DIR&=~SDA;

}

 

/**********************************************************************************************************

**Function Name:      S_WriteByte

**Description:        写函数

**********************************************************************************************************/

char S_WriteByte(unsigned char value)

// writes a byte on the Sensibus and checks the acknowledge 

unsigned char i,error=0; 

P1DIR|=SDA;

for(i=0x80;i>0;i/=2)              //shift bit for masking

    if(i&value) SDA_H;            //masking value with i , write to SENSI-BUS

    else SDA_L;                        

      SCK_H;                      //clk for SENSI-BUS

      __no_operation();__no_operation();__no_operation();//pulswith approx. 5 us 

      SCK_L;

}

SDA_H;                            //release DATA-line

P1DIR&=~SDA;                      //Change SDA to be input 0:input 1:ouput

SCK_H;                            //clk #9 for ack

error=P1IN;                       //check ack (DATA will be pulled down by SHT11)

error&=SDA;

P1DIR|=SDA;                       //Change SDA to be output 0:input 1:ouput

SCK_L;

if(error)

    return 1;                     //error=1 in case of no acknowledge

    return 0;

}

 

/**********************************************************************************************************

**Function Name:      S_ReadByte

**Description:        读函数

**Input Parameters:   ack--->reads a byte form the Sensibus and gives an acknowledge in case of "ack=1" 

**********************************************************************************************************/

char S_ReadByte(unsigned char ack)

{

// reads a byte form the Sensibus and gives an acknowledge in case of "ack=1"  

unsigned char i,val=0;

P1DIR|=SDA;                      //Change SDA to be output 0:input 1:ouput

SDA_H;                           //release DATA-line

P1DIR&=~SDA;                     //Change SDA to be input 0:input 1:ouput

for(i=0x80;i>0;i/=2)             //shift bit for masking

    SCK_H;                       //clk for SENSI-BUS

    if(P1IN&SDA)                 

      val=(val|i);               //read bit 

      SCK_L;       

}

P1DIR|=SDA;                      //Change SDA to be output 0:input 1:ouput

if(ack)                          //in case of "ack==1" pull down DATA-Line

    SDA_L;

else

    SDA_H;                         

SCK_H;                           //clk #9 for ack

__no_operation();__no_operation();__no_operation();//pulswith approx. 5 us

SCK_L;          

SDA_H;                           //release DATA-line

P1DIR&=~SDA;                     //Change SDA to be output 0:input 1:ouput

return val;

}

 

/**********************************************************************************************************

**Function Name:      S_Connectionreset

**Description:        连接复位函数

**                    communication reset: DATA-line=1 and at least 9 SCK cycles followed by transstart

**                          _____________________________________________________         ________

**                    DATA:                                                      |_______|

**                             _    _    _    _    _    _    _    _    _        ___     ___

[1] [2] [3]
关键字:MSP430  SHT10  温湿度传感器 引用地址:MSP430 Launchpad MSP430g2452 SHT10 温湿度传感器

上一篇:msp430f149通过蓝牙HC-05与手机通讯
下一篇:Proteus中MSP430与SHT11的IIC通信问题

推荐阅读最新更新时间:2024-11-21 11:09

关于MSP430单片机时钟的注意事项
XT2OFFG 、XT1LFOFFG 、 XT1HFOFFG 、 DCOFFG这四个标志位对应着相应振荡源的运行状态, XT2OFFG 、XT1LFOFFG 、 XT1HFOFFG上电时默认都是1,即上电时晶振1和晶振2都是关闭的,如果相应接口上确实接上了晶振,则需要在程序开始时运行一下语句: do { UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); // Clear XT2,XT1,DCO fault flags SFRIFG1 &= ~OFIFG; // Clear fault flags for(unsigned int i = 0; i 10000; i
[单片机]
MSP430单片机各种寄存器总结(7)——USCI_A in UART mode
第七章 USCI 7.1 UCA1CTL1 【注意】配置USCI先将UCSWRST置位 7.2 UCA1BR0 & UCA1BR1 BRCLK预分频器 预分频系数=UCA1BR0 + UCA1BR1*256 7.3 UCA1MCTL 注意复习波特率的计算!! 7.4 UCA1RXBUF 接收数据的寄存器 7.5 UCA1TXBUF 发送数据的寄存器,写入后自动发送 7.6 UCA1IE & UCA1IFG 中断使能和中断标志位,其中TX是发送,RX是接受 UCTXIFG置位表明UCAxTXBUF为空,可向其写入待发送字符,若UCTXIE 和GIE也置位,将产生发送中断请求。写UCAxTXB
[单片机]
<font color='red'>MSP430</font>单片机各种寄存器总结(7)——USCI_A in UART mode
MSP430主系统时钟以及430的低功耗设置
如何将系统时钟设置到外部高频晶体振荡器,430的MCLK默认的是DCO的,如何安全的从DCO切换到外部晶体振荡器,这是一个很重要的步骤,因为经过此步骤,可以极大地提高430的处理能力,DCO在内部,可以为cpu提供强劲稳定的时钟 #include msp430x14x.h void main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; volatile unsigned int i; P5DIR |=BIT4;//设置P5.4为输出 P5SEL |=BIT4;//设置片内主系统时钟的输
[单片机]
<font color='red'>MSP430</font>主系统时钟以及430的低功耗设置
MSP430F5438的时钟及uart配置
对MSP430F5438的时钟及uart配置 在使用的过程中,一直认为比较简单,也一直没有深究,忽然这几天卡壳了,出现问题是操作UART发送出的数据给232显示,并不是想得到的数据。这里涉及了两个地方,一是时钟配置,二是对UART的配置。 时钟配置 需求:考虑到功耗及使用场景,MCLK=2M,SMCLK=1M,ACLK=32768 P7SEL |= BIT0 + BIT1; //开XT1 __bis_SR_register( SCG0 ); // Disable the FLL control loop UCSCTL0 = 0x0000; // Set low
[单片机]
MSP430与I2C总线接口技术的研究
引言 MSP430单片机自从2000年问世以来,就以其功能完善、超低功耗、开发简便的特点得到了许多设计人员的青睐。MSP430与传统的51单片机在结构上有很大的区别。其中之一就是:在MSP430的外围接口电路中,没有提供像51那样控制外设读、写、地址锁存信号的硬件电路。与这种接口电路相适应,MSP430更倾向使用I2C总线以及ISP等基于串行接口的外围器件。另一方面,随着I2C技术的发展和成熟,其硬件结构简单、高速传输、器件丰富等特点使该类器件的应用越来越广泛。因此研究新型单片机MSP430与I2C总线接口技术有着重要的意义。本文针对这一问题进行研究,分析研究了MSP430与I2C总线接口的原理和方法,提出了高效的接
[应用]
使用STM32F103采集Si7021温湿度传感器数据
一、传感器电路连接 Si7021的外围电路非常简单,如图1所示: 图1 Si7021传感器外围电路 Si7021采用的是IIC接口,最高支持400KHz的通信速率,0~100%RH的湿度量程和最大-40℃~+125℃的温度量程,150μA低功耗,超小体积。可提供精确,低功耗,工厂校准的数字解决方案,适用于测量湿度,露点和温度,适用于从HVAC / R和资产跟踪到工业和消费者平台的各种应用。 二、时序和协议分析 首先看看Si7021的IIC通信时序,图2展示了Si7021的IIC时序图和各个时序时间的参数表。 图2 传感器IIC通信时序 其实这个IIC时序我个人认为没啥特别的,感觉就是一个比较常
[单片机]
使用STM32F103采集Si7021<font color='red'>温湿度</font><font color='red'>传感器</font>数据
【实时时钟RTC】MSP430系统实时时钟RTC学习日志(完善中)
读取实时时钟: 1、RTCRDY 为0时,不能取读取实时时钟 RT0PS源于ACLK,为了实时时钟日历的正确的运行,ACLK必须是32768Hz。(易出错) 定时: 一、每小时闹一次:每一小时的15分钟闹一次: 1、将RTCAMIN设置成15;2、设置RTCAMIN的AE位和清除闹钟寄存器的其它所有AE位 3、AF会在:00:14:59到00:15:00、01:14:59到01:15:00、02:14:59到02:15:00等等时刻被置位。 二、在每天04:00:00时刻闹: 1、RTCAHOUR位置位成4;2、设置RTCHOUR的AE位和复位闹钟寄存器的所有其它AE位 3、AF就会在03:59
[单片机]
低轼耗数据采集系统的USB接口设计
引言 实现系统运行的最小功耗是现代电子系统的普通取向,也是绿色电子的基本要求。采有最小功耗设计方法既能减少电子设备的使用功耗,又能减少备用状态下的功率消耗。在节省能源的同时还有利于减少电磁污染,有利于电子系统向便携式方向发展,有助于提高系统的可靠性。 现代工业生产和科学研究对数据采集的要求日益提高。在许多场合要求数据采集系统向便携化方向发展,要求系统具有体积小、功耗低、传输速率快、使用方便灵活等特点。在数据采集系统中,如何节省电能以使系统工作时间更长,如何通信才能使系统数据传输速度更快,已经成为系统开发过程中必须加以考虑的主要内容。 微控制器MSP430的超低功耗技术在众多单片机中独树一帜,同时它具有集成高度等特点,因
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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