wulin 发表于 2023-3-3 07:21 谢谢解答,有点理解了! |
cwb2038 发表于 2023-3-2 15:05 简单的讲,写0就是一段持续60us~ 120us的低电平,写1就是一个至少1us的低电平,随后紧接着60us~ 120us的高电平。程序好像并没有反应出来1us的低电平延时是因为CPU执行两条语句的时间至少1us,不必单独写1us的低电平延时,如果加了一条_nop_();也无所谓。如果使用的高速单片机就要酌情加延时语句。 |
本帖最后由 lkc8210 于 2023-3-3 09:27 编辑 cwb2038 发表于 2023-3-2 15:05
|
本帖最后由 cwb2038 于 2023-3-3 09:29 编辑 qsssuv 发表于 2023-3-2 14:51 这两句话怎么理解?程序好像并没有反应出来啊? 1、当要给 DS18B20 写入 0 的时候,单片机直接将引脚拉低,持续时间大于 60us 小于 120us 就可以了。 2、 当要给 DS18B20 写入 1 的时候,单片机先将这个引脚拉低,拉低时间大于 1us,然后马 上释放总线,即拉高引脚,并且持续时间也要大于 60us。 |
没看代码,直接看你的疑问。你表述DS18B20会在某时间读取一位,又表述程序没有反映出15us后读0,这明显自相矛盾。DS18B20在什么时间读MCU在线上发出的电平状态,为何需要在程序上反映呢?DS18B20读线上电平关MCU在线上发电平状态什么事儿?MCU只需要干自己的事就好了 |