ONE WIRE
以温度温度传感器为例
由三根线,分别为电源,信号,地线
使用GPIO口对信号线进行读操作
//初始化GPIO PC0端口
void dht11_init()
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GPIOC, &GPIO_InitStruct);
//延迟100ms
delay_ms(100);
}
下面是取设置的数据操作
原理就是搞懂时序是怎么回事,
开始:至少拉低18ms 在拉高 20~40us,然后得到确认码(低电平小于100US) 然后接收数据时序(取35US时返回的数据)
//起始信号 是由主机产生,输出模式
void dht11_start()
{
DHT11_OUT; //输出模式
PCout(0) = 0;
delay_ms(20); //至少拉低18ms
PCout(0) = 1;
delay_us(30); //拉高 20~40us
}
//dht11响应 输入模式
//如果dht11一直为高 或者一直为低
//都表明DHT11没有响应,电路有问题
//返回值
//1 无响应 0 表示有响应
u8 dht11_ack()
{
int ret =0;
DHT11_IN; //输入模式
//循环计算 大致的时间
while(0 == PCin(0))
{
ret++;
delay_us(1);
if(ret == 100) return 1;
}
ret = 0;
while(1 == PCin(0))
{
ret++;
delay_us(1);
if(ret == 100) return 1;
}
//如果能执行到这一行,说明有响应
return 0;
}
//接收数据
//统计高电平的时长, 0 1 低电平都一样
u8 dht11_read_bit()
{
int ret=0; //用于统计高电平的时长
//耗完低电平
while(0==PCin(0));
while(1==PCin(0))
{
ret++;
delay_us(1);
}
if(ret < 50) return 0;
else return 1;
}
//读取0 1 第二种实现方式
u8 dht11_read_bit2()
{
//耗完高电平
while(1==PCin(0));
//耗完低电平
while(0==PCin(0));
delay_us(35); //延时一半的时间
return PCin(0); //直接返回当前值
}
//读取一个字节
u8 dht11_read_byte()
{
u8 i=0;
u8 data = 0;
for(;i<8;i++)
{
data<<=1;
data += dht11_read_bit2();
}
return data;
}
//一次性读取40位
void dht11_read_data(u8 *wendu, u8 *shidu)
{
u8 data[5] = {0};
u8 i =0;
dht11_start();//起始信号
if(dht11_ack()) //反馈信号
{
printf("dht11 err\r\n");
}
for(;i<5;i++)
{
data[i] = dht11_read_byte();
}
/*
data[0] 温度整数部分
data[1] 温度小数部分
data[2] 温度整数部分
data[3] 温度小数部分
data[4] 校验码
*/
//校验和
if(data[0] + data[1] + data[2] + data[3] == data[4])
{
*wendu = data[2];
*shidu = data[0];
} else {
printf("data err\r\n");
}
}
ONE WIRE的更多相关文章
- Reg于Wire的不同点
Reg 比喻为“相机” Reg型,是always中被赋值的信号,往往代表触发器,但不一定是触发器 Wire 比喻为“镜子” Wrie型,assign指定的组合逻辑的信号 好好想想 ,还是能有个大致的概 ...
- wire与reg的区别?转载大神!
本文转自:http://www.cnblogs.com/thymon/archive/2010/06/09/1754541.html //------------------------------- ...
- Android和Java的轻巧Wire协议缓冲器
Wire协议缓冲器 一个人必须有一个代码! -奥马尔小 由于我们的团队和项目增长,数据的种类和数量也随之增加. 成功将您简单的数据模型转换为复杂的! 无论您的应用程序将数据存储到磁盘或网络传送信号,该 ...
- [USACO07NOV]电话线Telephone Wire
[USACO07NOV]电话线Telephone Wire 时间限制: 1 Sec 内存限制: 128 MB 题目描述 电信公司要更换某个城市的网线.新网线架设在原有的 N(2 <= N &l ...
- 【USACO07NOV】电话线Telephone Wire
题目描述 电信公司要更换某个城市的网线.新网线架设在原有的 N(2 <= N <= 100,000)根电线杆上, 第 i 根电线杆的高度为 height_i 米(1 <= heigh ...
- BZOJ_1705_[Usaco2007 Nov]Telephone Wire 架设电话线_DP
BZOJ_1705_[Usaco2007 Nov]Telephone Wire 架设电话线_DP Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是 ...
- reg 和wire 区别
reg相当于存储单元,wire相当于物理连线 Verilog 中变量的物理数据分为线型和寄存器型.这两种类型的变量在定义时要设置位宽,缺省为1位.变量的每一位可以是0,1,X,Z.其中x代表一个未被预 ...
- Verilog中关于wire使用的一些小知识
1.Verilog中如果wire连接到常量,而常量没有说明他的位宽,那么将会默认为32位 如: input [:] x ; wire [:] a; assign a = + x; 上述代码在综合的时候 ...
- 使用google wire解决依赖注入
使用google wire解决依赖注入 google wire是golang的一个依赖注入解决的工具,这个工具能够自动生成类的依赖关系. 当我们写代码的时候,都希望,类都是一个个独立的结构,互不耦合, ...
- wire [7:0] regAddr; 理解
首先要指出的是wire[7,0]a和wire[8,1]a这样的表达在verilog中是错误的,应该写成wire[7:0]a和wire[8:1]a wire[7:0]a表示定义了一个wire型数据,该数 ...
随机推荐
- c语言,递归翻转一个单链表,c实现单链表
目的:主要是练习c里面单链表的实现,递归思想复习; #include <stdlib.h> #include <stdio.h> typedef struct _Node{// ...
- 用友CDM系统,将货位间商品移库单(一步)修改为内调出入库单(一步)方法使用
客户一般只购买CDM供应链系统,但是只买供应链模块不能进行内调等操作,据说插件将近15万(坑爹~~~) 货位间商品移库单和内调差不多,区别是货位间移库默认只能选择登陆账号所属机构的货位. 解决方案:分 ...
- 添加第三方类库造成的Undefined symbols for architecture i386:编译错误
1.原因: 如果是源码编译的话,一般就只某些头文件没有添加到src编译里面.但是对于添加库编译,一般是库的编译路径设置不正确(比如arm的版本.模拟器或者真机的不同版本库引用错误或者重复引用一起编译器 ...
- vs2012中程序集生成无法自动在网站Bin目录下生成Dll文件?(已解决!)
最近,突然发现生成程序集后,网站bin目录下dll没有更新,也没有自动生成dll文件,通过近半个小时的摸索和实验,找到了解决方法: 1.右键网站,不是项目,选择[属性页],在左侧[引用]中如果没有,就 ...
- 解决eclipse项目下出现deployment descriptor和jax-ws web services
当你的web项目下出现这个这些鬼东西的时候,是视图的原因 1.右上角切换视图到java,看看问题解决了没,如果没有,第二步 2.window->perspective->reset per ...
- 哈工大数据库系统 实验:练习并熟练掌握交互式 SQL 语言
实验目的:基于给定的 OrderDB 数据库, 练习并熟练掌握交互式 SQL 语言实验环境:sql sever 2008 附:OrderDB 表结构及表间的关系 /* 1 查询职工工资按高低排序的前2 ...
- CoreCLR文档翻译 - GC的设计
此文档来源于CoreCLR的BOTR(The Book of the Runtime), 点击打开原文 一切著作权归微软公司所有 GC的设计 作者: Maoni Stephens (@maoni0) ...
- [ios2]苹果iOS 5限制应用本地存储问题 【转】
苹果 iOS 5 系统增加了一个新的机制——在设备容量空间不足的情况下自动清除高速缓存文件或临时目录的内容.这意味着,如果你设备的容量快到极限了,应用存储的很多离线内容,包括文章.杂志.图书.漫画以及 ...
- java中的instanceof
instanceof是Java.php的一个二元操作符(运算符),和==,>,<是同一类东西.由于它是由字母组成的,所以也是Java的保留关键字.它的作用是判断其左边对象是否为其右边类的实 ...
- 用备份控制文件做不完全恢复下的完全恢复(数据文件备份<旧>--新建表空间--控制文件备份<次新>--日志归档文件<新>)
为什么会使用备份的控制文件? 实际工作中主要有两种情况:第一种:当前控制文件全部损坏,而数据文件备份,控制文件备份及当前日志处于不同SCN版本,它们之间又增加过表空间(数据文件).第二种:当前控制文件 ...