DS18B20温度传感器读出数据的转化问题??

全部回答4
默认 最新
  • 数据存储和传输是16进制的 *256是将高8位的16进制数据转化为10进制数据.返回t>>2是左移2位相当除以4
    0 点赞
  • 用手机打字难,我就间单的说说.因为ds发出来的数据是bcd编码的.要转成正常的二进制!所以有了那个乘以二五六的公式,有时候我们不需要负温度所以用移位的方式省略掉了.其实也不一定要用别人的方法.你自己设计自己的算法才是真!
    0 点赞
  • 正好我以前写过ds18b20的程序,现在共享给你。 我的单片机频率是8m,如果你的频率不同,请自己计算后把延时参数修改一下就可以了。 ds1820温度传感器单线总线读时间片 read: push r24 in r24,sreg push r24 ldi r22,$ff clr r23 out portb,r22 ;升高单线总线 out ddrb,r22 ;b口为输出口 out portb,r23 ;拉低单线总线 ldi r24,$05 read1: dec r24 brne read1 ;延迟10个时钟周期(大约1.25微秒) out ddrb,r23 ;b口为输入口 ldi r24,$30 read2: dec r24 brne read2 ;延迟96个时钟周期(大约12微秒) in r21,pinb ;读单线总线 ldi r24,$c8 read3: dec r24 brne read3 ;延迟400个时钟周期(大约50微秒) pop r24 out sreg,r24 pop r24 ret ds1820温度传感器单线总线写0时间片 write0: push r24 in r24,sreg push r24 ldi r22,$ff clr r23 out portb,r22 ;升高单线总线 out ddrb,r22 ;b口为输出口 out portb,r23 ;拉低单线总线 clr r24 wr0j1: dec r24 dec r24 nop nop brne wr0j1 ;延迟640个时钟周期(大约80微秒) out portb,r22 ;升高单线总线 ldi r24,$07 wr0j2: dec r24 brne wr0j2 ;延迟14个时钟周期(大约1.75微秒) out ddrb,r23 ;b口为输入口 pop r24 out sreg,r24 pop r24 ret ds1820温度传感器单线总线写1时间片 write1: push r24 in r24,sreg push r24 ldi r22,$ff clr r23 out portb,r22 ;升高单线总线 out ddrb,r22 ;b口为输出口 out portb,r23 ;拉低单线总线 ldi r24,$07 wr1j1: dec r24 brne wr1j1 ;延迟14个时钟周期(大约1.75微秒) out portb,r22 ;升高单线总线 clr r24 wr1j2: dec r24 dec r24 nop nop brne wr1j2 ;延迟640个时钟周期(大约80微秒) out ddrb,r23 ;b口为输入口 pop r24 out sreg,r24 pop r24 ret
    0 点赞
  • 乘以256是为了将读过来的数据转换成十进制数,再乘以25,然后在返回值里又左移了2,相当于(b*256+a)*0.0625*100!这段程序应该没有判断正负的语句!你多看看DS18B20的手册就会明白了!那里面说的很明白的!
    0 点赞

没有更多内容了

返回顶部
产品求购 求购