温度传感器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
热门文章
- 康达学院专转本五年制
- 高考一个考场分ab卷吗
- not only but also用法
- 某物体做自由落体运动,从释放开始计时,则物体在前2s内的平均速度为______m/s,物体下落2m时的速度大小为______m/s.
- 三角函数公式大全表格
- 地理中考必背知识点2022
- 2013-2014学年小学六年级科学上学期期末考试试卷及答案
- 人教版2014-2015学年小学五年级英语第二学期期中教学质量检测试卷及答案
- 【Linux驱动开发】设备树详解(二)设备树语法详解
- 别跟客户扯细节
- 在别的城市买房子能落户吗
- 卖房前要把装修贷还完吗
- 高中政治教学提高教学效果的方法探究
- “互联网+”背景下的初中英语课堂教学改革与创新策略研究
- 2022年终止合同范本
- 租房合同范本范文
- 如何挑选土豆
- 如何挑选土鸡
