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