• 大小: 1.18MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-29
  • 语言: 其他
  • 标签: 430  单片机  

资源简介

已通过测试,单片机能正确读取sht30温湿度数据,程序实现sht30周期模式下读取数据,逻辑清晰,方便移植。已运用到项目中。

资源截图

代码片段和文件信息



/*
编译版本:IAR FOR MSP430 V5.10
MCU:MSP430F5438
注:模拟IIC,单片机可正常读取sht30温湿度数据;程序仅仅测试了周期模式下读取数据;
其他模式请参见sht30数据手册时序图,自行修改。
*/


#include 
#include 
#include 

/*宏定义,延时函数,参数为1时相应延时分别为1us和1ms*/
#define CPU_F               ((double)16000000)
#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))

typedef unsigned char   uchar;          
typedef unsigned int    uint;           
typedef unsigned short  ushort;         
typedef unsigned long   ulong;          
typedef uchar         u8;            
typedef uint         u16;
typedef ulong         u32;

void IIC_Init(void);
void IIC_Start(void);
void IIC_Stop(void);
void IIC_Ack(void);
void IIC_NAck(void);
void IIC_Send_Byte(u8 data);
u8 IIC_Wait_Ack(void );

#define   SHT30W    0x88          //SHT30器件地址+写操作使能
#define   SHT30R    0x89          //SHT30器件地址+读操作使能

#define   SDA_OUT         (P4DIR |= BIT1)   //p4.1---SDA
#define   SDA_IN          (P4DIR &=~BIT1)
#define   SDA_1           (P4OUT |= BIT1)
#define   SDA_0           (P4OUT &=~BIT1)
#define   SDA_INPUT       P4IN
#define   SDA             BIT1

#define   SCL_1           (P4OUT |= BIT2)   //p4.2---SCL
#define   SCL_0           (P4OUT &=~BIT2)
#define   SCL_IN          (P4DIR &=~BIT2)
#define   SCL_OUT         (P4DIR |= BIT2)

u8 BUFt[6]={0};
u16 temp=0humi=0;
float tem=0.0;
float hum=0.0;

//时钟初始化
void Sysclk_Init(void)
{
    //1、时钟初始化,这里你开发板使用的8mhz晶振
    P5SEL     |= BIT2+BIT3;                                     //XT2端口选择 0000 1100
    UCSCTL6   &= ~XT2OFF;                                       //使能XT2=8MHZ
    UCSCTL3   |= SELREF_2;                                      //FLL模块的参考时钟源选择REFO
    UCSCTL4   |= SELA_5;                                        //ACLK = XT2 = 8MHZ
    //测试晶振是否产生故障失效,并清除故障失效标志
    do
    {
        UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG); //清除XT2、XT1、DCO故障失效标志位                                                         
        SFRIFG1 &= ~OFIFG;                                      //清除晶振故障失效中断标志位 
    }while(SFRIFG1&OFIFG);                                      //测试晶振故障失效中断标志位 
    UCSCTL6   &= ~XT2DRIVE0;                                    //减少XT2驱动能力,降低功耗 
    UCSCTL4   |= SELS_5 + SELM_5 +SELA_5;                       //SMCLK = MCLK = ACLK = XT2 = 8MHZ
    //ACLK8分频、SMCLK8分频、MCLK不分频
    UCSCTL5 = DIVA__16 + DIVS__16;           //所以初始化完成后系统时钟:ACLK=SMCLK=1MHZ;MCLK=8MHZ
}

//端口初始化
void IIC_Init(void)
{
    SCL_OUT;            //SCL管脚为输出
    SDA_OUT;            //SDA管脚为输出
    SCL_1;
    SDA_1;
}

//开始条件
void IIC_Start(void)        //scl为高电平期间sda产生一个下降沿
{   
    SDA_OUT;      //sda线输出
    SDA_1;      
    SCL_1;
    delay_us(20);
    SDA_0;          //START:when CLK is highDATA change form high to low 
    delay_us(20);
    SCL_0;          //钳住I2C总线,准备发送或接收数据
    delay_us(20);
}

//停

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件      924309  2018-08-08 09:18  msp430f5438模拟iic读取sht30\SHT3x_DIS.pdf
     文件      530766  2018-08-01 11:58  msp430f5438模拟iic读取sht30\SHT3x_Sample_Code.pdf
     文件        7169  2018-08-08 16:50  msp430f5438模拟iic读取sht30\test_sht30.c
     目录           0  2018-08-08 16:52  msp430f5438模拟iic读取sht30\

评论

共有 条评论