ds18b20温度转换指令_ds18b20温度转换为700ms,可以不可以命令转化以后直接读取温度,因为对温度的实时性不高,...

该博客介绍了如何使用ds18b20温度传感器进行初始化、转换和读取温度的步骤,包括重置、应答、转换命令和读取数据的函数实现。代码示例使用了mega87.3728mhzgcc编译器,通过延迟函数控制传感器的信号交互,以实现非实时温度监测需求。
摘要由CSDN通过智能技术生成

2012-12-22 回答

//mega87.3728mhzgcc编译通过,_delay_us(us)_delay_ms(ms)调用库函数

//初始化把dq设置为输出

#defineds18b20_dqpc5

#defineset_ds18b20_dq_ddr()ddrc|=1<

#defineset_ds18b20_dq()portc|=1<

#defineclr_ds18b20_dq()portc&=~(1<

#defineclr_ds18b20_dq_ddr()ddrc&=~(1<

#definein_ds18b20_dq()pinc&(1<

#defineds18b20_read_rom0x33

#defineds18b20_match_rom0x55

#defineds18b20_skip_rom0xcc

#defineds18b20_search_rom0xf0

#defineds18b20_alarm_search_rom0xec

#defineds18b20_write_ram0x4e

#defineds18b20_read_ram0xbe

#defineds18b20_copy_ram0x48

#defineds18b20_convert_tem0x44

#defineds18b20_eecall_eeprom0xb8

#defineds18b20_read_power_supply0xb4

voidreset_ds18b20(void)

{

clr_ds18b20_dq();

_delay_us(198);//100us

_delay_us(198);//100us

_delay_us(198);//100us

_delay_us(198);//100us

set_ds18b20_dq();

_delay_us(38);//20us

}

voidack_ds18b20(void)

{

while(in_ds18b20_dq());

while(!(in_ds18b20_dq()));

_delay_us(38);//20us

}

ucharread_ds18b20(void)

{

uchardata=0;

uchari=0;

for(i=0;i<8;i++)

{

data>>=1;

clr_ds18b20_dq();

_delay_us(1);//1us

set_ds18b20_dq();

_delay_us(2);//2us

if(in_ds18b20_dq())data|=0x80;

_delay_us(118);//60us

}

return(data);

}

voidwrite_ds18b20(uchardata)

{

uchari=0;

for(i=0;i<8;i++)

{

if(data&0x01){

clr_ds18b20_dq();

_delay_us(14);//8us

set_ds18b20_dq();

_delay_us(108);//55us

}

else

{

clr_ds18b20_dq();

_delay_us(108);//55us

set_ds18b20_dq();

_delay_us(14);//8us

}

data>>=1;

}

}

voidconvert_ds18b20(void)

{

reset_ds18b20();

ack_ds18b20();

_delay_ms(1);

write_ds18b20(ds18b20_skip_rom);

write_ds18b20(ds18b20_convert_tem);

}

voidread_temperature(void)

{

reset_ds18b20();

ack_ds18b20();

_delay_ms(1);

write_ds18b20(ds18b20_skip_rom);

write_ds18b20(ds18b20_read_ram);

temperature_low=read_ds18b20();

temperature_high=read_ds18b20();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值