标题:
基于CC2530(IAR)SHT10温湿度传感器程序调试
[打印本页]
作者:
行者1253
时间:
2017-6-25 09:15
标题:
基于CC2530(IAR)SHT10温湿度传感器程序调试
便宜环境IAR for 51,单片机 TI CC2530,传感器CC2530!!!
0.png
(47.05 KB, 下载次数: 160)
下载附件
2017-6-25 16:30 上传
单片机源程序如下:
#include <ioCC2530.h>
#include <stdio.h>
#include "hal_mcu.h"
#define uint16 unsigned int
#define uint8 unsigned char
#define STATUS_REG_W 0x06
#define STATUS_REG_R 0x07
#define MEASURE_TEMP 0x03
#define MEASURE_HUMI 0x05
#define RESET 0x1E
#define noACK 0
#define ACK 1
#define SHT10_SCL_PIN P1_7 //SHT10时钟
#define SHT10_SDA_PIN P1_6 //SHT10数据线
#define SHT10_DATA_R() P1DIR &= 0x7F
#define SHT10_DAT_W() P1DIR |= 0x80
#define SHT10_SCL_HIGH() (SHT10_SCL_PIN = 1)
#define SHT10_SCL_LOW() (SHT10_SCL_PIN = 0)
#define SHT10_SDA_HIGH() (SHT10_SDA_PIN = 1)
#define SHT10_SDA_LOW() (SHT10_SDA_PIN = 0)
unsigned char d1,d2,d3;
/**************************************************************************************************
* 函数名称:initIO
*
* 功能描述:SHT10串行通信IO初始化
*
* 参 数:无
*
* 返 回 值:无
**************************************************************************************************/
void initIO(void)
{
P1DIR|= 0xc0;
P1INP &= 0xbf;
SHT10_SDA_HIGH();
SHT10_SCL_LOW();
}
/**************************************************************************************************
* 函数名称:s_write_byte_to_sht10
*
* 功能描述:向SHT10写一个字节
*
* 参 数:value -- 需写入的字节值
*
* 返 回 值:error -- 操作是否成功
**************************************************************************************************/
char write_byte_to_sht10(unsigned char value)
{
uint8 i;
uint8 error=1;
SHT10_DAT_W();
for (i=0x80;i>0;i/=2) //将一个字节的8位逐一输出
{
if (i & value)
{
SHT10_SDA_HIGH();
}
else
{
SHT10_SDA_LOW();
}
SHT10_SCL_HIGH();
halMcuWaitUs(5);
SHT10_SCL_LOW();
halMcuWaitUs(1);
}
SHT10_SDA_HIGH();
SHT10_DATA_R();
SHT10_SCL_HIGH();
halMcuWaitUs(1);
error = SHT10_SDA_PIN;
halMcuWaitUs(3);
SHT10_DAT_W();
SHT10_SDA_HIGH();
SHT10_SCL_LOW();
return error;
}
/**************************************************************************************************
* 函数名称:s_receive_byte_from_sht10
*
* 功能描述:从SHT10读取一个字节
*
* 参 数:ack -- 读取数据后,向SHT10发送ACK
*
* 返 回 值:val -- 读取的字节值
**************************************************************************************************/
char receive_byte_from_sht10(unsigned char ack)
{
uint8 i;
uint8 val = 0;
SHT10_DAT_W();
SHT10_SDA_PIN= 1;
SHT10_DATA_R();
for (i=0x80;i>0;i/=2)
{
SHT10_SCL_HIGH();
if (SHT10_SDA_PIN)
val = (val | i);
else
val = (val | 0x00);
SHT10_SCL_LOW();
halMcuWaitUs(5);
}
SHT10_DAT_W();
SHT10_SDA_PIN = !ack;
SHT10_SCL_HIGH();
halMcuWaitUs(5);
SHT10_SCL_LOW();
SHT10_SDA_HIGH();
return val; //返回读取的值
}
/**************************************************************************************************
* 函数名称:transstart
*
* 功能描述:启动SHT10,开始与SHT10通信
*
* 参 数:无
*
* 返 回 值:无
**************************************************************************************************/
void transstart(void)
{
SHT10_DAT_W();
SHT10_SDA_HIGH();
SHT10_SCL_LOW();
halMcuWaitUs(1);;
SHT10_SCL_HIGH();
halMcuWaitUs(2);
SHT10_SDA_LOW();
halMcuWaitUs(2);
SHT10_SCL_LOW();
halMcuWaitUs(5);
SHT10_SCL_HIGH();
halMcuWaitUs(2);
SHT10_SDA_HIGH();
halMcuWaitUs(2);
SHT10_SCL_LOW();
halMcuWaitUs(2);
}
/**************************************************************************************************
* 函数名称:s_connectionreset
*
* 功能描述:与SHT10通信复位
*
* 参 数:无
*
* 返 回 值:无
**************************************************************************************************/
void connectionreset(void)
{
SHT10_DAT_W();
unsigned char i;
SHT10_SDA_HIGH();
SHT10_SCL_LOW();
for(i=0;i<9;i++)
{
SHT10_SCL_HIGH();
halMcuWaitUs(2);
SHT10_SCL_LOW();
halMcuWaitUs(2);
}
transstart();
}
/**************************************************************************************************
* 函数名称:measure
*
* 功能描述:发送命令、读取SHT10温度或湿度数据
*
* 参 数:*p_checksum -- 校验和
* mode -- 读取数据类型(3为温度,5为湿度)
*
* 返 回 值:er -- 操作结果
**************************************************************************************************/
char measure( unsigned char *p_checksum, unsigned char mode)
{
unsigned er=0;
unsigned int i,j;
transstart();
switch(mode)
{
case 3 :er+=write_byte_to_sht10(MEASURE_TEMP);break;
case 5 :er+=write_byte_to_sht10(MEASURE_HUMI);break;
default :break;
}
SHT10_DATA_R();
for(i=0;i<65535;i++)
{
for(j=0;j<65535;j++)
{
if(SHT10_SDA_PIN == 0)
{
break;
}
}
if(SHT10_SDA_PIN == 0)
{
break;
}
}
if(SHT10_SDA_PIN)
{
er += 1;
}
d1 = receive_byte_from_sht10(ACK);
d2 = receive_byte_from_sht10(ACK);
d3 = receive_byte_from_sht10(noACK);
return er;
}
/**************************************************************************************************
* 函数名称:tempera_humi_read
*
* 功能描述:调用相应函数,读取温度和湿度数据并校验和计算
*
* 参 数:*t -- 温度值
* *h -- 湿度值
*
* 返 回 值:无
**************************************************************************************************/
void tempera_humi_read(float *t,float *h )
{
unsigned char error,checksum;
float humi,temp;
initIO();
connectionreset(); //启动传输
error = 0;
error += measure(&checksum,MEASURE_HUMI); //读取湿度数据并校验
humi = d1*256+d2;
error += measure(&checksum,MEASURE_TEMP); //读取温度数据并校验
temp = d1*256+d2;
if(error != 0)
{
connectionreset(); //读取失败,通信复位
}
else //读取成功,计算数据
{
temp = temp*0.01 - 39.6 ;
humi = (temp - 25) * (0.01 + 0.00008 * humi)
-0.0000028 * humi * humi + 0.0405 * humi-4;
if(humi>100)
{
humi = 100;
}
if(humi<0.1)
{
humi = 0.1;
}
}
*t=temp;
*h=humi*10;
}
/****************************************************************
串口初始化函数
****************************************************************/
void initUARTSEND(void)
{
CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振
while(CLKCONSTA & 0x40); //等待晶振稳定
CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ
PERCFG = 0x00; //位置1 P0口
P0SEL = 0x3c; //P0_2,P0_3,P0_4,P0_5用作串口
P2DIR &= ~0XC0; //P0优先作为UART0
U0CSR |= 0x80; //UART方式
U0GCR |= 9;
U0BAUD |= 59; //波特率设为19200
UTX0IF = 0; //UART0 TX中断标志初始置位0
}
/****************************************************************
串口发送字符串函数
****************************************************************/
void UartTX_Send_String(char *Data,int len)
{
int j;
for(j=0;j<len;j++)
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
SHT10温湿度传感器程序调试.rar
(557.71 KB, 下载次数: 98)
2017-6-25 09:13 上传
点击文件名下载附件
基于CC2530的SHT10传感器调试(编译环境IAR for 51)
下载积分: 黑币 -5
作者:
a1071689010
时间:
2017-12-27 10:51
感谢楼主,谢谢分享,iar for 51和iar for 8051有区别吗
作者:
cferr
时间:
2018-6-8 16:22
赞一个
作者:
610213748
时间:
2018-12-20 21:16
不错,值得参考
作者:
shzn27
时间:
2019-1-8 21:28
为什么我用就用不了呢,各位大佬求救一下。程序用的一模一样。我怀疑是硬件问题。电路是不是需要其他东西啊
作者:
shzn27
时间:
2019-1-8 22:22
楼主,你能说一下你的SHT10电路怎么接的吗?
作者:
ndsccls
时间:
2019-4-23 19:13
赞一个
作者:
君悦
时间:
2020-3-18 14:59
这个有原理图吗
作者:
kz0018
时间:
2023-5-18 10:07
资料很好,谢谢分享!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1