中国建设银行网站对公业务,做前后端网站教程,兰州网络广告设计方案,做微整的网站单总线#xff1a;只用一根线。 复位信号#xff1a;设置为输出模式#xff0c;低电平20ms#xff0c;然后再拉高30us。然后设置为输入模式#xff0c;dht11会先拉低80us#xff0c;然后拉高80us表示对接成功 数据0#xff1a;开始先拉低50us#xff0c;然后拉高26~28u…单总线只用一根线。 复位信号设置为输出模式低电平20ms然后再拉高30us。然后设置为输入模式dht11会先拉低80us然后拉高80us表示对接成功 数据0开始先拉低50us然后拉高26~28us表示0
数据1开始拉低50us,然后拉高70us表示1
每传输一位的数据都要间隔一个拉低50us 梳理一下时序 应用程序 #include linux/init.h
#include linux/kernel.h
#include linux/fs.h
#include linux/module.h
#include asm/io.h
#include asm/string.h
#include asm/uaccess.h
#include linux/miscdevice.h
#include asm-generic/errno-base.h
#include mach/gpio-nrs.h
#include mach/gpio.h
#include linux/delay.h#define DEV_NAME dht11
#define PIN_DHT11 S3C2410_GPF(6)static void dht11_start(void)
{gpio_request(PIN_DHT11, pin_dht11);gpio_direction_output(PIN_DHT11, 1);msleep(40);gpio_set_value(PIN_DHT11, 0);mdelay(18);gpio_set_value(PIN_DHT11, 1);udelay(30);gpio_direction_input(PIN_DHT11);
}static int dht11_wait_respon(void)
{int time 100;while((time 0) gpio_get_value(PIN_DHT11)){udelay(1);time--;}if(time 0){printk(dht11_wait_respon 1\n);return -1;}time 100;while((time 0) (!gpio_get_value(PIN_DHT11))){udelay(1);time--;}if(time 0){printk(dht11_wait_respon 2\n);return -1;}time 100;while((time 0) gpio_get_value(PIN_DHT11)){udelay(1);time--;}if(time 0){printk(dht11_wait_respon 3\n);return -1;}return 0;
}static int get_bit(void)
{int time 100;while((time 0) (!gpio_get_value(PIN_DHT11))){udelay(1);time--;}if(time 0){printk(get_bit 1\n);return -1;}udelay(30);if(0 gpio_get_value(PIN_DHT11))return 0;time 100;while((time 0) gpio_get_value(PIN_DHT11)){udelay(1);time--;}if(time 0){printk(get_bit 2\n);return -1;}return 1;
}static int dht11_get_data(unsigned char * data)
{int i 0;int j 0;for(j 0; j 5; j){for(i 0; i 8; i){char tmp 0;data[j] 1;tmp get_bit(); if(tmp 0)return -1;data[j] | tmp;}}return 0;
}static int open (struct inode * inode, struct file * file)
{printk(dht11 open ...\n);return 0;
}static ssize_t read (struct file * file, char __user * buf, size_t len, loff_t * offset)
{int ret 0;unsigned char data[5] {0};dht11_start();ret dht11_wait_respon();if(ret 0)return -1;ret dht11_get_data(data);if(ret 0)return -1;copy_to_user(buf, data, sizeof(data));printk(dht11 read ...\n);return 0;
}static ssize_t write (struct file * file, const char __user * buf, size_t len, loff_t * offset)
{return 0;
}static int close (struct inode * inode, struct file * file)
{printk(dht11 close ...\n);return 0;
}static struct file_operations fops
{.owner THIS_MODULE,.open open,.read read,.write write,.release close
};static struct miscdevice misc
{.minor MISC_DYNAMIC_MINOR,.name DEV_NAME,.fops fops
};static int __init dht11_init(void)
{int ret misc_register(misc);if(ret 0)goto err_misc_register;printk(dht11_init ...\n);return ret;err_misc_register:misc_deregister(misc);printk(dht11 misc_register faidht11\n); return ret;
}static void __exit dht11_exit(void)
{misc_deregister(misc);printk(dht11_exit ###############################\n);
}module_init(dht11_init);
module_exit(dht11_exit);
MODULE_LICENSE(GPL);