sht75.c
//SHT90读取温湿度数据
//PIN define
//TH_CLK: SHT90 CLK connect to P13
//TH_DAT : SHT90 DATA connect to P12
//入口参数 Mode:select t or h
//出口参数 测量数据TH_Result
//Ver1.0 2006-03-29
//Ver1.1
//=========================================================================
#include <string.h>
#include <stdlib.h>
#include <absacc.h>
#include <intrins.h>
#include <reg52.h>
sfr P4 = 0xc0;
sfr WDT_CONTR = 0xc1;
#define Measure_TEMP 0x03 //温度
#define Measure_HUMI 0x05 //湿度
sbit TH_CLK = P4^1;
sbit TH_DAT = P4^2;
unsigned char TH_Array[3];
bit Error;
//启动条件
//-------------------------------------------------------------------------
void Start(void)
{
EA = 0;
TH_CLK = 1;
TH_DAT = 0;
_nop_();
TH_CLK = 0;
_nop_();_nop_();_nop_();
TH_CLK = 1;
TH_DAT = 1;
_nop_();
TH_CLK = 0;
EA = 1;
}
//-------------------------------------------------------------------------
//写一字节
void Write_Byte(unsigned char Value)
{
unsigned char i;
EA = 0;
for (i = 0x80;i > 0;i /= 2)
{
if (i & Value) TH_DAT = 1;
else TH_DAT = 0;
TH_CLK = 1;
_nop_();_nop_();_nop_();
TH_CLK = 0;
}
TH_DAT = 1;
TH_CLK = 1;
Error = TH_DAT; //读SHT71的应答
TH_CLK = 0; //第九脉冲后上拉数据线
//return Error; //为1就错
EA = 1;
}
//-------------------------------------------------------------------------
//读一字节
unsigned char Read_Byte (bit ack)
{
unsigned char i,val = 0;
EA = 0;
TH_DAT = 1;
for (i = 0x80;i > 0;i /= 2)
{
TH_CLK = 1;
if (TH_DAT) val = (val | i);
TH_CLK = 0;
}
第 1 页