100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > sht20中写用户寄存器_SHT20最新数字温湿度传感器芯片 程序

sht20中写用户寄存器_SHT20最新数字温湿度传感器芯片 程序

时间:2023-05-19 01:47:22

相关推荐

sht20中写用户寄存器_SHT20最新数字温湿度传感器芯片 程序

/*

STC15L系列单片机

11.0592M晶振、3.3V

0612mos

*/

#include

#include

#define add_w 0x80 //传感器地址 + 写操作

#define add_r 0x81 //传感器地址 + 读操作

#define T_code 0xe3//温度 测量指令

#define RH_code 0xe5//湿度 测量指令

#define user_code_w 0xe6//用户寄存器 写指令

#define user_code_r 0xe7//用户寄存器 读指令,可读电池电压是否小于2.25V。(测量后才可查看)

#define RST_code 0xfe//软复位,寄存器服务。

#define uchar unsigned char

#define uint unsigned int

sbit sda=P1^3;//数据线

sbit scl=P1^4;//时钟线

/***********延时程序***********/

//11.0592MHz 1T 时钟周期0.09042us 机器周期0.09042us,根据当前配置计算延时程序。

//测量分辨率 RH 12 BIT、T 14 BIT,测量时间RH29ms、T85ms

//测量分辨率 RH 8 BIT、T 12 BIT,测量时间RH4 ms、T22ms

//SCL时钟,延时2us

void delay85ms(void) //误差 -0.000000000011us

{

unsigned char a,b,c;

for(c=97;c>0;c--)

for(b=56;b>0;b--)

for(a=85;a>0;a--);

_nop_(); //if Keil,require use intrins.h

_nop_(); //if Keil,require use intrins.h

}

void delay29ms(void) //误差 -0.072337962967us

{

unsigned char a,b,c;

for(c=161;c>0;c--)

for(b=221;b>0;b--)

for(a=3;a>0;a--);

_nop_(); //if Keil,require use intrins.h

}

void delay15ms(void) //误差 -0.000000000002us

{

unsigned char a,b;

for(b=220;b>0;b--)

for(a=187;a>0;a--);

_nop_(); //if Keil,require use intrins.h

_nop_(); //if Keil,require use intrins.h

}

/*void delay4ms(void) //误差 -0.072337962963us

{

unsigned char a,b;

for(b=89;b>0;b--)

for(a=247;a>0;a--);

}

void delay22ms(void) //误差 -0.036168981484us

{

unsigned char a,b,c;

for(c=9;c>0;c--)

for(b=170;b>0;b--)

for(a=78;a>0;a--);

_nop_(); //if Keil,require use intrins.h

_nop_(); //if Keil,require use intrins.h

} */

void delay2us(void) //误差 -0.010*********us

{

unsigned char a,b;

for(b=1;b>0;b--)

for(a=8;a>0;a--);

}

/***********时序程序***********/

//传感器 基本时序程序。

//1 启动

//2停止

//3应答&非应答

//4接收应答

//5发送 一字节

//6接收 一字节

//1 启动

void start(void)

{

sda=1;

delay2us();

scl=1;

delay2us();

sda=0;

delay2us();

scl=0;

delay2us();

}

//2停止

void stop(void)

{

sda=0;

delay2us();

scl=1;

delay2us();

sda=1;

delay2us();

scl=0;

delay2us();

}

//3应答&非应答

void ACK (void)

{

sda=0;

delay2us();

scl=1;

delay2us();

scl=0;

delay2us();

}

void noACK (void)

{

scl=1;

delay2us();

sda=0;

scl=0;

delay2us();

}

//4接收应答

bit getACK(void)

{

bit ack1=0;

sda=1;

delay2us();

scl=1;

delay2us();

ack1=sda;

scl=0;

delay2us();

ret

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。