娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年03月12日(星期三)

正在發生

2020年03月12日 | 在msp430上使用SHT70

發布者:幸福的人生 來源: eefocus關鍵字:msp430  SHT70  傳輸數據 手機看文章 掃描二維碼
隨時隨地手機看文章

屬于msp430串行接口傳輸數據的應用。SHTxx的串行接口與IIC不兼容,但其軟件實現與IIC類似。


使用器件型號:msp430F169/msp430F149,SHT70@SENSIRION AG

典型應用電路


代碼


#include

#include "intrinsics.h"

#include      


typedef unsigned int  uint;

typedef unsigned char uchar;



char write_byte(uchar value);

char read_byte(uchar ack);

void transstart(void);

void connectionreset(void);

char softreset(void);

char read_statusreg(uchar *p_value, uchar *p_checksum);

char write_statusreg(uchar *p_value);

char measure(unsigned short int*p_value, uchar *p_checksum, uchar mode);

void calc_sth(unsigned short int t, unsigned short int rh, float *p_temperature, float *p_humidity);

float calc_dewpoint(float h,float t);

void sht10_init(void);

void CLK_Init();



   float humi_val_real=0.0;   

   float temp_val_real=0.0;

   float dew_point=0.0;



#define noACK 0

#define ACK   1


#define DATA_OUT  P5DIR |= BIT3

#define DATA_IN   P5DIR &=~BIT3

#define DATA_RIN  (P5IN & BIT3)



#define DATA_H P5OUT |= BIT3 //DATA <---> P5.1

#define DATA_L P5OUT &=~ BIT3 

#define SCK_H  P5OUT |= BIT4  //SCK  <---> P5.2

#define SCK_L  P5OUT &=~ BIT4


#define REG_W 0x06  // 0000 0110

#define REG_R 0x07  // 0000 0111

#define TEMP  0x03  // 0000 0011

#define HUMI  0x05  // 0000 0101

#define RESET 0x1e  // 0001 1111



#define CPU_F ((double)8000000) 

#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))

void delay();


char write_byte(uchar value)

//write a byte on the sensibus and checks the ackonwledge


{

  uchar i,error = 0;

  DATA_OUT;

  for(i=0x80;i>0;i/=2)

  {

    if(i&value)

    {DATA_OUT;DATA_H;}

    else

    {DATA_OUT; DATA_L;}

    

delay();

    SCK_H;

delay();//5ms

    SCK_L;

delay();

  }

   DATA_IN; 

  SCK_H;

     //delay_ms(800);


  error = DATA_RIN;

  SCK_L;

  return error;

}


char read_byte(uchar ack)

// read a byte from sensibus and gives an ackowledge in case of 'ack =1'

{

  uchar i,val=0;

                       

  DATA_IN;

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

  { 

delay();

    SCK_H;                          //clk for SENSI-BUS

delay();

    if (DATA_RIN) 

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

    SCK_L;   

  }

  DATA_OUT;

  if(ack) 

    DATA_L;

  else

    DATA_H;

    

  delay();

  SCK_H;                            //clk #9 for ack

  delay();          //pulswith approx. 5 us 

  SCK_L;     

  delay();                        

  return val;


}


void transstart(void)

{

  DATA_OUT;

  DATA_H;SCK_L;

delay();

  SCK_H;

delay();

  DATA_L;

delay();

  SCK_L;

delay();

  SCK_H;

delay();

  DATA_H;

delay();

  SCK_L;

}


void connectionreset(void)

{

  uchar i;

  DATA_OUT;

  DATA_H;

  SCK_L;

  for(i=0;i<9;i++)

  {

    SCK_H;

    

  delay();

    SCK_L;

  delay();

  }

  transstart();

}


char softreset(void)

{

  uchar error = 0;

  connectionreset();

  error += write_byte(RESET);

  return error;

}


char read_statusreg(uchar *p_value, uchar *p_checksum)

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

// reads the status register with checksum (8-bit)

  uchar error=0;

  transstart();                   //transmission start

  error=write_byte(REG_R); //send command to sensor

  *p_value=read_byte(ACK);        //read status register (8-bit)

  *p_checksum=read_byte(noACK);   //read checksum (8-bit)  

  return error;                     //error=1 in case of no response form the sensor

}


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

char write_statusreg(uchar *p_value)

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

// writes the status register with checksum (8-bit)

  uchar error=0;

  transstart();                   //transmission start

  error+=write_byte(REG_W);//send command to sensor

  error+=write_byte(*p_value);    //send value of status register

  return error;                     //error>=1 in case of no response form the sensor

}


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

char measure(unsigned short int*p_value, uchar *p_checksum, uchar mode)

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

// makes a measurement (humidity/temperature) with checksum

  uchar error=0;

  unsigned short int i;

  uchar value_H = 0,value_L = 0;

  transstart();                   //transmission start

  switch(mode){                     //send command to sensor

  case TEMP:

      error+=write_byte(TEMP); 

      break;

  case HUMI:

      error+=write_byte(HUMI);

      break;

  default:

      break;  

  }

  DATA_IN;

  for (i=0;i<250;i++)

  {  

delay();

delay();

delay();

delay();



    if(DATA_RIN == 0) 

      break;

  } //wait until sensor has finished the measurement

  if(DATA_RIN == 1) error+=1;                // or timeout (~2 sec.) is reached

  value_H=read_byte(ACK);    //read the first byte (MSB)

  value_L =read_byte(ACK);    //read the second byte (LSB)

  

  *p_checksum =read_byte(noACK);  //read checksum

  *p_value = (value_H << 8) | value_L;

  return error;

}

void calc_sth(unsigned short int t, unsigned short int rh, float *p_temperature, float *p_humidity)

{

const float d1 = -39.61;         //@3.3V

const float d2 = +0.01;          //for 14 bit

//for 12 bit

const float C1 = -2.0468;        

const float C2 = +0.0367;

const float C3 = -0.0000015955;

//for 12 bit

const float T1 = +0.01;

const float T2 = +0.00008;


float RH_Lin; 

float RH_Ture;

float temp_C;


temp_C = d1 + d2 * t;                             

RH_Lin = C1 + C2 * rh + C3 * rh * rh;            

RH_Ture = (temp_C -25) * (T1 + T2 * rh) + RH_Lin; 


if(RH_Ture > 100)  

RH_Ture = 100;

if(RH_Ture < 0.1f)

RH_Ture = 0.1;  


*p_humidity = RH_Ture;

*p_temperature = temp_C;

}


float calc_dewpoint(float t,float h)

float dew_point;

float m=17.62,Tn=243.12; //default

if(-40<=t && t<0)

{

m  = 22.46;

Tn = 272.62;

}

dew_point = Tn*(log10(h)+m*t/(Tn+t))/(m-log10(h)-+m*t/(Tn+t));

return dew_point;

}

void sht10_init(void)

{

  P5SEL = 0x00;

 // P5SEL |=BIT2;

 // P5SEL &=~ BIT1;

 // P5DIR &=~BIT1;

  //P5DIR |= BIT2;

  //DATA_OUT;

  P5DIR |= BIT3+BIT4;


}


void CLK_Init()

{

unsigned int iq0;

   //BCSCTL1&=~0X00;                      //打開XT2振蕩器

   BCSCTL1 &= ~XT2OFF;         //打開XT振蕩器

   do

   {

      IFG1 &= ~OFIFG;                   // 清除振蕩器失效標志

      for (iq0 = 0xFF; iq0 > 0; iq0--); // 延時,等待XT2起振

    }

    while ((IFG1 & OFIFG) != 0);        // 判斷XT2是否起振

    //BCSCTL2 =SELM_2+SELS;               //選擇MCLK、SMCLK為XT2

    BCSCTL2 |= SELM1+SELS;      //MCLK為8MHZ,SMCLK為8MHZ

}


int main(void)

  unsigned short int humi_val=0,temp_val=0;

  

  uchar error=0,checksum=0;


  WDTCTL=WDTPW+WDTHOLD;

  //int i;

   CLK_Init();

  sht10_init();


  connectionreset();

  while(1)

  { 

    error=0;

    error+=measure(&temp_val,&checksum,TEMP);  //measure temperature

    error+=measure(&humi_val,&checksum,HUMI);  //measure humidity

    

    if(error!=0) 

      connectionreset();                 

    else

    {                   

       calc_sth(temp_val,humi_val,&temp_val_real, &humi_val_real);            //calculate humidity, temperature

       dew_point = calc_dewpoint(temp_val_real, humi_val_real); 

      //printf("%2.1f℃  %2.1f%% %2.1f℃rn", temp_val_real, humi_val_real, dew_point);

    }

    //----------wait approx. 0.8s to avoid heating up SHTxx------------------------------      

    delay();

    delay();

    delay();

[1] [2]
關鍵字:msp430  SHT70  傳輸數據 引用地址:在msp430上使用SHT70

上一篇:msp430如何設置IO口上拉還是下拉?
下一篇:在msp430上使用BMP085

推薦閱讀

今日(3月10日)記者從知情人事處獲悉,前牛電科技創始人、CEO李一男已于近日加盟梅花天使創投并擔任合伙人職務,負責旗下成長基金投資業務且其已經辭掉牛電科技創始人、CEO等職務,但仍保留股份。  消息人士稱,自去年12月初李一男出獄后,因牛電科技欲在2018年籌備上市,李一男身份難以符合其需求,才選擇辭去牛電科技職務,而全身心加入梅花天使創投...
據彭博社報道,特斯拉將在全球范圍內將汽車價格平均上調大約3%,但售價3.5萬美元的Model 3價格將不會上調。 特斯拉在一篇博客中寫道,之所以決定提高售價,是因為公司決定顯著增加維持運營的門店數量,目前正在繼續進行為期數月的評估,而全球所有銷售仍將在線完成。 “換句話說,我們關閉的門店數量只會是之前宣布的一半左右,但節省的成本也將只有一...
在物聯網、AI、大數據等創新技術的推動下,越來越多的智能穿戴產品不斷涌現,為生活帶來更多改變。吸引的不僅是年輕人,很多中老年人也成為智能穿戴的忠實粉絲,但是他們對顯示屏幕提出了更高的要求。 隨著顯示技術不斷升級,在小屏幕上也能實現更高的像素密度。近日,全球半導體顯示行業龍頭企業BOE(京東方)推出Micro OLED顯示屏,讓用戶能夠在小尺寸...
近年來,世界上許多國家和地區都出臺了“碳中和”的政策目標。聯合國秘書長古特雷斯甚至希望能在2050年之前,全球都實現“碳中和”。“碳中和”指的是每年的二氧化碳排放量與減排量互相抵消,為零排放。 為了實現“碳中和”目標,目前大部分國家的共識是希望通過大多數交通運輸系統的電氣化,來減少碳排放。因此,現在電動汽車(EV)大行其道,多數國家都...

史海拾趣

問答坊 | AI 解惑

關于電容三點式震蕩電路的問題

我的這個電路圖怎么不起振呢?…

查看全部問答∨

RS糾錯碼

TS流中 有188字節的包 有204的包 ,那多出來的16字節的糾錯碼 主要有哪些用處  在線等…

查看全部問答∨

花了二年時間和近5W RMB學javaEE,現在想轉學嵌入式,請過來的前輩給點意見!

     小弟馬上要大學畢業,時間不多,所以想前輩高人指點,希望給出合理學習嵌入式的方向,以及應先后學些什么,用什么樣的書,小弟先在此拜謝了!寫得有點長,請耐心看完。先自我介紹一下:      男,23 ...…

查看全部問答∨

ARM板做聲控小車

我是在校學生,學的東西還不多,想用ARM板做聲控小車,語音識別用DSP? 學長們給點點撥…

查看全部問答∨

請問allegro中元件重疊造成的DRC如何解決啊

本信息來自合作QQ群:電子工程師技術交流(12425841) 群主在壇子ID:Kata   請問allegro中元件重疊造成的DRC如何解決啊 …

查看全部問答∨

寬帶功率放大電路

現有一個電阻1歐姆,電感0.23微亨器件,需要用頻率為0.2-20MHz、電流為100-200mA的正弦信號去驅動它,不知道有沒有高手做過啊?給點撥一下…

查看全部問答∨

有關TI芯片的選擇問題

請問有誰能說一下 MSP430、C2000 或 Cortex-M(Stellaris) 這幾款芯片那款更適合做圖像處理方面的運算,正在做一個通過實時數據的傳輸動態畫圖的東西,由于剛開始學習,不太了解,希望大家能給點意見!…

查看全部問答∨

關于430仿真器的問題。

我的430仿真器是利爾達公司的FET430UIF的USB的JTAG型仿真器。但是不知什么時候竟然連到電腦上之后狀態燈和電源燈都不亮了,但是顯示的端口是連接了設備。不能夠下載程序了,這是為什么呢?…

查看全部問答∨

請教NRF905

nRF905有一個時鐘輸出引腳uPCLH,請問一下它的作用是什么,它輸出頻率的大小說明什么?…

查看全部問答∨

基于 MINI STM32 板 的RS485通訊

PC機通過485總線發控制指令,控制MINI STM32 板 上的3個LED燈的亮與滅,同時把控制指令傳回到PC機。以下是工程文件,有興趣的朋友可以實驗一下。 …

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 岑溪市| 措勤县| 柯坪县| 台山市| 汝南县| 南华县| 达州市| 阳城县| 商水县| 永新县| 蒙城县| 商丘市| 沂源县| 肇州县| 威宁| 阿图什市| 同心县| 偏关县| 略阳县| 达州市| 潍坊市| 甘谷县| 黄梅县| 铁力市| 大姚县| 黑龙江省| 石林| 平邑县| 兴安盟| 威信县| 昌乐县| 巨鹿县| 江口县| 三门县| 大荔县| 建德市| 玉树县| 石狮市| 白河县| 陆川县| 富蕴县|