提问者:ZL6VwMU2013-12-15 00:00
/*********写一个字节子函数(写0 写1)***********************/ void writebyte(unsigned char dat) { unsigned char a,b; for(a=0;a<8;a++) { dat2=dat&0x01; dat=dat>>1; if(dat2)//写1 { DQ=0;b++;b++; DQ=1;delay(8); } else//写0 { DQ=0;de
首先,DS18B20输出的一位(1 bit)信号是不能被单片机变为多位的,一位就是一位,单片机需要连续多次读取DS18B20输出的一位信号,来合成它需要的信息。比如DS18B20的温度输出是16位数据,那么单片机就要读16次1 bit数据。读取温度伪代码(temperature为保存温度数值的整型变量): for ( i=1; i<=16; i++) { onebit=读取1位数据的函数(); temperature=temperature|onebit; if(i!=16) temperature=temperature<<1; }然后0628单片机是如何读取DS18B20输出的某1bit信息的呢?在具体回答前先明确一点,这一过程必须在单片机拉低数据线,发起读数据过程之后的15微秒(us)内完成284否则读不到正确数据(注意:发起通信时总是由单片机将数据总线先拉低uycg没有通信时数据总线保持高电平状态)4下面说说具体过程: 1、单片机将数据总线拉低; 2、延时2us;(这一时间必须大于1us,否则DS18B20无法识别拉低信号;也不能过大,超过15us无法正确读数6) 3、将单片机与DS18B20相连的IO口输入输出方向设为输入;(这一步也有可能是单片机直接将数据线拉高,因芯片的不同而不同) 4、延时2us;(给DS18B20一定的时间输出信号) 5、读取数据总线上的电平值; 6、拉高数据总线,延时一段时间后进入下1bit的读取。 注意:这里能否正确读取的关键是延时的量是否足够精确,因此在用C语言写DS18B20程序之前,需要先根据单片机型号和晶振频率找出一个自己对延时的精度有足够把握的延时函数,随便在网上DOWN别人的程序很有可能因为延时不对跑不起来。参考资料:DS18B20数据手册
回答者:lock94r74302016-12-15 00:00
显示85就是说明你延时有问题,根据你的晶振在网上找几个比较精确的延时,你这样估计是不行的
提问者:ahusj2013-04-19
1.首先确认连接正确: 2.打开storage manager,右键管理站名,选择自动搜索 3.对话框下方会有自动搜索进度条,搜索结束会发现连接的DS3400 4.重命名ds3400: 5
提问者:zyxb53102013-06-18
先把U盘制作为启动盘,选择移动存储启动,重新启动就可以了。
提问者:ftbnb04432013-06-15
时序不对 DS18B20 的时序要求很严格,稍有不慎就会读不出 void delay(uchar k) { while(--k); } void delay1(uint k) { uint i,j
提问者:HOUXIOA56784072014-04-24
朋友您好,BYD S6外形很好,非常像凌志的SUV。比亚迪S6这车相比同款同价位的车配置要丰富一些。这车作为国产的SUV车是比较宽大的,舒适性方面的配置丰富是比亚迪S6最大的特点。新车全系标配Keyless无钥匙启动系统
提问者:萌狐sara2015-09-27
先锋的 DS6119电热油汀自动控温,过热保护功能,三档温度自由调节1600w【一个小时1.6度工作一天费电是肯定的】它达到温度时会自动断电然后温度下降再自动开启【这个是对的】
提问者:2013-11-10