zoukankan      html  css  js  c++  java
  • MSP430F5438+DTH11示例代码

     1 unsigned char dth_read(unsigned char array[])//默认16Mhz主频,获取成功返回1,失败返回0,
     2 /*array为5字节数组,带回数据格式为: 一字节湿度(整数),一字节湿度(小数,此芯片无效,但占据8位),一字节温度(整数),一字节温度(小数,无效,占位),一字节和校验 */
     3 {
     4 int index = 40;
     5 unsigned char temp[40] = {0}; //获取40位元数据零时数组
     6 P6DIR |= 0x010; // P6.4 output,dth11元器件的data数据线接到P6.4口
     7 P6OUT &= 0XEF ; //主机拉低data线,之后须保持18ms时间。
     8 __delay_cycles(320000); //至少保持18ms
     9 P6OUT |=0X10; //手动拉高
    10 P6DIR &=0XEF; //IO口切换成输入模式 
    11 while(P6IN&0x10); //至少保持20-40us
    12 if(!(P6IN&0x10)) //电平被拉低,dth响应
    13 {
    14 while(!(P6IN&0x10)); //等待电平拉高
    15 while(P6IN&0x10); //等待电平再次拉低,从次开始数据读取
    16 
    17 while(index>0) //读取40位bit数据
    18 {
    19 while(P6IN&0x10); //此处当在传送位是1时高电平会保持70us,所以此处是消除读取高电平后剩余的高电平保持时间
    20 while(!(P6IN&0x10)); //低电平保持50us,无论传送0或1,都首先保持50us低电平
    21 
    22 __delay_cycles(500); //保持30us,之后读取data线,若是低电平,则总线已经启动下个bit位的传送,说明当前传送位是0,否则为1
    23 
    24 if(P6IN & 0X10) //保存数据1
    25 {
    26 temp[40-index] = 1;
    27 
    28 }
    29 else //保存数据0
    30 {
    31 temp[40-index] = 0;
    32 }
    33 index--; //计数器减一
    34 }
    35 }
    36 for(int z = 0 ; z < 5 ;z ++) //将40位数据转换成5个字节
    37 {
    38 for(int h = 0 ; h < 8 ;h++)
    39 {
    40 array[z]<<=1;
    41 array[z] += temp[z*8+h];
    42 
    43 }
    44 }
    45 if(array[0]+array[2] == array[4]) //校验和
    46 return 1; //通过,数据读取有效,且正确
    47 else
    48 return 0; //未通过。失败
    49 }
  • 相关阅读:
    【Cocos2d-x for WP8 学习整理】(1)创建一个新项目
    与本机其他应用交互的简单介绍
    Windows Phone GB2312
    Windows Phone 横竖屏切换动画
    Linq To VisualTree
    Epub基础知识介绍
    【使用Unity开发Windows Phone上的2D游戏】(2)初识工具
    操作系统Unix、Windows、Mac OS、Linux的故事
    PHP开发环境搭建
    linux和mac
  • 原文地址:https://www.cnblogs.com/wslblog/p/4133190.html
Copyright © 2011-2022 走看看