BXAK 发表于 2011-8-31 20:07:29

请教 读取DS18B20温度 的时候是否必须关中断

用动态扫描数码管显示 时 经常读不准数据,



是不是 读取DS18B20温度 的时候必须关中断?

liucw99 发表于 2011-8-31 20:17:31

没有啊?读数据的过程很快的。

utopiaprince 发表于 2011-8-31 20:40:55

读的一整个操作是原子操作,不能被打断的

BXAK 发表于 2011-8-31 20:50:34

回复【1楼】liucw99
-----------------------------------------------------------------------

我用数码管动态扫描,
所以红外解码必须用查询方式了,
所以定时器至少400us中断一次……

SNOOKER 发表于 2011-8-31 21:54:44

如果按你现在的思路来做是必须关中断的。时序不允许被打乱。

换个思路可以用SPI,UART来做,这种方法可以全程不关中断。
DQ脚使用上拉电阻拉高,DQ与CPU TX脚间串一二极管,RX直接接DQ。
一个读写的单元时长约60US,以SPI为例,60us/8bits = 133.333Kbps
因18B20规定相邻两个位读写单元间至少间隔1US,因此可以把SPI的最后一位设置为恒1来当这个间隔。
因此写1只需往SPI发0b0111 1111,写0发0b0000 0001

UART也是使用类似方法来实现的

BXAK 发表于 2011-8-31 22:13:37

回复【4楼】SNOOKER 山寨王
-----------------------------------------------------------------------

看来思路还不够广泛啊,经你一说才知道有这方法,有参考的程序吗,能否传一个?


400us频繁中断读写DS1302很稳定,就这DS18B20挑剔!!!

44670 发表于 2011-8-31 22:16:59

ds1302是有时钟线的,读写被打断还没有太大的问题。
ds18b20就不一样了,如果是软件延时,读写的时候肯定不能打断

yihui184 发表于 2012-8-30 12:37:41

学习一下,我还没碰到这种问题呢。

SNOOKER :
如果按你现在的思路来做是必须关中断的。时序不允许被打乱。

换个思路可以用SPI,UART来做,这种方法可以全程不关中断。
DQ脚使用上拉电阻拉高,DQ与CPU TX脚间串一二极管,RX直接接DQ。
一个读写的单元时长约60US,以SPI为例,60us/8bits = 133.333Kbps
因18B20规定相邻两个位读写单元间至少间隔1US,因此可以把SPI的最后一位设置为恒1来当这个间隔。
因此写1只需往SPI发0b0111 1111,写0发0b0000 0001

UART也是使用类似方法来实现的

zhyong319 发表于 2012-8-30 13:00:17


手册上不上是有讲到读温度时,脉冲周期才几十个uS,看你中断的时间,如何很短很短,没有必要,,

司马朝阳007 发表于 2012-8-30 14:18:37

没有啊?读数据的过程很快的
页: [1]
查看完整版本: 请教 读取DS18B20温度 的时候是否必须关中断