请教 读取DS18B20温度 的时候是否必须关中断
用动态扫描数码管显示 时 经常读不准数据,是不是 读取DS18B20温度 的时候必须关中断? 没有啊?读数据的过程很快的。 读的一整个操作是原子操作,不能被打断的 回复【1楼】liucw99
-----------------------------------------------------------------------
我用数码管动态扫描,
所以红外解码必须用查询方式了,
所以定时器至少400us中断一次…… 如果按你现在的思路来做是必须关中断的。时序不允许被打乱。
换个思路可以用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也是使用类似方法来实现的 回复【4楼】SNOOKER 山寨王
-----------------------------------------------------------------------
看来思路还不够广泛啊,经你一说才知道有这方法,有参考的程序吗,能否传一个?
400us频繁中断读写DS1302很稳定,就这DS18B20挑剔!!! ds1302是有时钟线的,读写被打断还没有太大的问题。
ds18b20就不一样了,如果是软件延时,读写的时候肯定不能打断 学习一下,我还没碰到这种问题呢。
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也是使用类似方法来实现的
手册上不上是有讲到读温度时,脉冲周期才几十个uS,看你中断的时间,如何很短很短,没有必要,, 没有啊?读数据的过程很快的
页:
[1]