- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实训四 温湿度传感器实验
实训 温湿度传感器实验
实验环境
硬件:,PC机IAR Embedded Workbench for MCS-51
实验内容
阅读UP-CUP IOT-6410系统ZIGBEE模块硬件部分文档,熟悉ZIGBEE模块相关硬件接口。
阅读SHTX0温湿度传感器芯片文档,熟悉该传感器的使用及时序操作。
使用IAR开发环境设计程序,利用CC2431的IO中断来监测温湿度传感器的状态。
实验原理
硬件接口原理
ZIGBEE(CC2431)模块LED硬件接口
图4.6.1 LED硬件接口
ZIGBEE(CC2431)模块硬件上设计有2个LED灯,用来编程调试使用。分别连接CC2431的P1_0、P、1_1两个IO引脚。从原理图上可以看出,2个LED灯共阳极,当P1_0、P1_1引脚为低电平时候,LED灯点亮。
温湿度传感器模块硬件接口
图4.6.2 温湿度传感器硬件接口
图4.6.3 ZIGBEE模块主板J5接口
系统配套的温湿度传感器,与ZIGBEE模块的J5排线相连,这样我们可以知道,温湿度传感器模块的时钟线与ZIGBEE模块的P0_0 IO引脚相连,温湿度传感器的数据线与P0_1 IO引脚相连。因此我们需要在代码中将相应引脚进行输入输出控制模拟该传感器时序,来监测温湿度传感器状态。
CC2431 相关寄存器
表4.6.1 P0DIR寄存器
表4.6.2 P0INP寄存器
表4.6.3 P2INP寄存器
表4.6.4 P1寄存器
表4.6.5 P1DIR寄存器
以上图表列出了关于CC2431处理器的P0和P1 IO端口相关寄存器,其中P0DIR、P1DIR为IO方向寄存器,P0INP为P0端口输入配置寄存器,P2INP用来控制P0端口的上拉下拉电阻设置寄存器。
表4.6.6 CLKCON寄存器
表4.6.7 SLEEP寄存器
表4.6.8 PERCFG寄存器
表4.6.9 U0CSR寄存器
表4.6.10 U0GCR寄存器
表4.6.11 U0BUF和U0BAUD寄存器
以上图表列举了和CC2431处理器串口相关寄存器,用来初始化串口0配置的。详情见软件代码部分。
软件设计
关键源码分析:
设置CC2430 IO 状态,模拟温湿度传感器时序,其中将数据线上拉电阻功能打开:
#define Sensor_DATA_IN() do{P0DIR = ~(0X020);P0INP = ~0X02;P2INP = ~(0x015);}while(0);
#define Sensor_CLK_IN() do{P0DIR = ~(0X010);}while(0);
#define Sensor_DATA_OUT() do{P0DIR |= (0X020);P0INP = ~0X02;P2INP = ~(0x015);}while(0);
#define Sensor_CLK_OUT() do{P0DIR |= (0X010);}while(0);
#define set_DATA_1() (P0_1 = 1)
#define set_DATA_0() (P0_1 = 0)
#define set_CLK_1() (P0_0 = 1)
#define set_CLK_0() (P0_0 = 0)
#define IS_DATA_1() ( P0_1 )
#define IS_CLK_1() ( P0_0 )
温湿度采集模拟时序代码参见工程代码sht11.c文件,其中大部分采用官方提供DEMO代码完成,稍加时序控制即可使用。
函数定于如下:
void uDelay(uint n);
void _nop_(void);
void s_connectionreset(void);
char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode);
void calc_sth11(float *p_humidity ,float *p_temperature);
float calc_dewpoint(float h,float t);
char s_read_byte(unsigned char ack);
char s_write_byte(unsigned char value);
主函数如下:
/****
文档评论(0)