温度传感器DS18B20

学习 时间:2026-04-06 18:38:52 阅读:1822
温度传感器DS18B20用AVR怎么读和写?最好有示例的程序lnlh21 - 试用期 一级 :你说那个网站资料太少,找不到我要的

最佳回答

自由的羊

丰富的方盒

2026-04-06 18:38:52

正好我以前写过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

最新回答共有2条回答

  • 友好的花瓣
    回复
    2026-04-06 18:38:52

    正好我以前写过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

上一篇 火柴燃烧是什么变化

下一篇 推拉门衣柜门拉不严怎么办