找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机+DS18B20写入一个字节数据程序的疑问

查看数: 2135 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-3-2 12:51

正文摘要:

DS18B20 的位读写时序,如图: 当要给 DS18B20 写入 0 的时候,单片机直接将引脚拉低,持续时间大于 60us 小于 120us 就可以了。图上显示的意思是,单片机先拉低 15us 之后,DS18B20 会在从 15us 到 6 ...

回复

ID:673647 发表于 2023-3-3 09:30
wulin 发表于 2023-3-3 07:21
简单的讲,写0就是一段持续60us~ 120us的低电平,写1就是一个至少1us的低电平,随后紧接着60us~ 120us的 ...

谢谢解答,有点理解了!
ID:213173 发表于 2023-3-3 07:21
cwb2038 发表于 2023-3-2 15:05
这两句话怎么理解?程序好像并没有反应出来啊?
       1、当要给 DS18B20 写入 0 的时候,单片机直接将 ...

简单的讲,写0就是一段持续60us~ 120us的低电平,写1就是一个至少1us的低电平,随后紧接着60us~ 120us的高电平。程序好像并没有反应出来1us的低电平延时是因为CPU执行两条语句的时间至少1us,不必单独写1us的低电平延时,如果加了一条_nop_();也无所谓。如果使用的高速单片机就要酌情加延时语句。
ID:161164 发表于 2023-3-2 21:06
本帖最后由 lkc8210 于 2023-3-3 09:27 编辑
cwb2038 发表于 2023-3-2 15:05
这两句话怎么理解?程序好像并没有反应出来啊?
       1、当要给 DS18B20 写入 0 的时候,单片机直接将 ...
  1. void Write18B20(unsigned char dat)
  2. {
  3. unsigned char mask;

  4. EA = 0; //禁止总中断
  5. for (mask=0x01; mask!=0; mask<<=1) //低位在先,依次移出 8 个 bit
  6. {
  7. IO_18B20 = 0; //产生 2us 低电平脉冲
  8. _nop_();
  9. _nop_();
  10. if ((mask&dat) == 0) //输出该 bit 值
  11. IO_18B20 = 0;//<<<<<<<<<<<1
  12. else
  13. IO_18B20 = 1;//<<<<<<<<<<<2
  14. DelayX10us(6); //延时 60us
  15. IO_18B20 = 1; //拉高通信引脚
  16. }
  17. EA = 1; //重新使能总中断
  18. }
复制代码
ID:673647 发表于 2023-3-2 15:05

谢谢解答,有点理解了!

本帖最后由 cwb2038 于 2023-3-3 09:29 编辑
qsssuv 发表于 2023-3-2 14:51
没看代码,直接看你的疑问。你表述DS18B20会在某时间读取一位,又表述程序没有反映出15us后读0,这明显自相 ...

这两句话怎么理解?程序好像并没有反应出来啊?
       1、当要给 DS18B20 写入 0 的时候,单片机直接将引脚拉低,持续时间大于 60us 小于 120us
就可以了。
       2、 当要给 DS18B20 写入 1 的时候,单片机先将这个引脚拉低,拉低时间大于 1us,然后马
上释放总线,即拉高引脚,并且持续时间也要大于 60us。
   
ID:353115 发表于 2023-3-2 14:51
没看代码,直接看你的疑问。你表述DS18B20会在某时间读取一位,又表述程序没有反映出15us后读0,这明显自相矛盾。DS18B20在什么时间读MCU在线上发出的电平状态,为何需要在程序上反映呢?DS18B20读线上电平关MCU在线上发电平状态什么事儿?MCU只需要干自己的事就好了

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表