完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
小弟51单片机初学者,最近写了个DS18B20的测温程序,结果在向感温管发送指令时发现了个奇怪的问题,请各位大神瞧瞧咋回事。代码如下:
void Ds18b20WriteByte(uchar dat) //向DS18B20写字节函数 { uchar i; //无符号字符型 for(i=0;i<8;i++) { DS18B20_DQ=0; //感温管数据线拉低电平 _nop_(); _nop_(); // DS18B20_DQ=(dat>>i) & (0x01); //代码A:用这句来向感温器传递数据,程序下载到单片后无法正常工作 DS18B20_DQ=dat & 0x01; //代码B:把代码A替换为这一句,并加上下面的 “dat>>1”;就可以正常工作 delay9us(5); //此处再延时61us DS18B20_DQ=1; dat>>=1; //代码B:这一句加上上面的 “DS18B20_DQ=dat & 0x01”,可正常工作; _nop_();_nop_(); } } 在debug对代码A、B分别进行跟踪调试,发现两种代码发送给DS18B20_DQ的内容是一样的,但代码A下载后就只显示个-000.05,无法正常工作,代码B就正常显示实际温度。鼓捣了半天了也没搞明白。 |
|
相关推荐
4个回答
|
|
记得以后问题贴要选“问答”类别哦
|
|
|
|
不知道,可以学习,学习
|
|
|
|
DS18B20读逻辑0/1的步骤如下:
1.在读取的时候单片机拉低电平大约1us 2.单片机释放总线,然后读取总线电平。 3.这时候DS18B20会拉低/高电平。 4.读取电平过后,延迟大约40~45微妙 其中第4步,讲到延时大约40~45微妙,楼主延时了61us,可以试下是否有问题(网上搜的,没有用过);还有就是,楼主要先确定后面的解码处理没问题哦,希望能帮到你 |
|
|
|
不知道,可以学习,学习
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
854 浏览 2 评论
【youyeetoo X1 windows 开发板体验】+ 影音处理和AI模型移植
716 浏览 5 评论
I.MX6ULL-飞凌 ElfBoard ELF1板卡- 移植zbar的方法
879 浏览 0 评论
1553 浏览 3 评论
由于 Windows 无法加载这个设备所需的驱动程序,导致这个设备工作异常?
2444 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
3726 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-3-29 07:07 , Processed in 0.498752 second(s), Total 73, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 深圳华秋电子有限公司
电子发烧友 (电路图) 粤公网安备 44030402000349 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号