ds18b20温度传感器程序 求解释!!! 延时时间怎么计算的?

ds18b20温度传感器程序 求解释!!! 延时时间怎么计算的?,第1张

比如

while(t--)

{

_nop_()

}

t在delayus(10)中已经赋值,即t=10,_nop_()是一个空 *** 作NOP(汇编语言中),即一个机器周期,主频12Mhz中就是1um.

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11375766.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存