历史上的今天
今天是:2025年04月02日(星期三)
2020年04月02日 | MSP430 Launchpad MSP430g2452 SHT10 温湿度传感器
2020-04-02 来源:eefocus
在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 #include //#include //#include //宏定义,延时函数,参数为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: |_______| ** _ _ _ _ _ _ _ _ _ ___ ___
史海拾趣
|
马上本科毕业,专业方向是信息化工程管理,但是论文题目抽到的是 编写全自动洗衣机控制电路的VHDL语言程序,没有学习过,在图书馆借书看了后感觉很复杂,由于要实习很难有时间研究. 希望论坛有 高人 能给予帮助 ,说明白我想找个人代写, 花钱是肯定的 ...… 查看全部问答> |
|
请问为什么我用JLINK配uVision4 使用debug都失败呢? 刻录没问题!debug选在JTAG 我按RUN 让程序执行会当机他会说SWO can be used with target interface SWD模式,则我选了SW模式 在装置那里就看不见我的装置了!由于我的ev board是使用STM32F10X-128 ...… 查看全部问答> |
|
做DirectShow的哥们请进:WINCE自带的MediaPlayer窗体大小改变同时如何做到也改变了视频窗口? 做WINCE的朋友都知道DirectShow多媒体编程早已被广泛应用。。。 WINCE自带的播放器MediaPLayer也是基于DirectShow架构的播放器。当我们在WINCE平台使用鼠标,拖动MediaPlayer窗体改变大小时,发现视频图像的显示区域也在随之改变;当我们选择“Ful ...… 查看全部问答> |
|
我现在碰到这样一个问题, 我的系统上面没有扩展外部的ram,所以在做调试的时候,我想将中断向量表先烧写到2407内部的flash中去,然后将要调试的程序放置到内部的saram中去,便于修改和调试,但是我试了很多种方法都没有成功,如果我直接将程序分 ...… 查看全部问答> |
|
文/龙跃MCU 1、转行 没接触阿里巴巴之前,一直从事行政工作,待遇不错,工作轻松!有大把时间跟同事们开开玩笑,不痛不痒的混着日子! 朋友A是电子商务的业务,某天Q聊就跟我说:“换份有挑战性的工作吧,青春是行政这份工作的代价!” ...… 查看全部问答> |




