ds18b20温度转换指令_51单片机驱动DS18B20温度传感器程序及心得

关于DS18B20温度传感器,在没有硬件设备的辅助下,写内部程序有些困难,因为看不到实际信号波形。对于单片机,我。。。渐渐的有些心灰意冷。。虽然掌握了1_WIRE总线,却少了很多喜悦,下雨了。。。它是我的爱好,我付出了很多,可是我看不到实际的前景。。以我个人之力,要步入尖端芯片领域,很困难,在这里,采棉花是个普遍性的大问题,大型机械设备缺陷很多,如果以微控制芯片提高精度,我想效益会相当可观,可是技术瓶颈难以逾越。。。硬件研发,失败了,所有投入赴之东流,成功了,回报丰厚。现在,各行各业都处于饱和,没有成熟先进的技术,很难有立足之地,,,,,我开始重新审视我的选择。。。。。。艰难。。

/*

建立时间: 2013年5月2日;

前言: 我用软件仿真,测算延时时间,效果不错,但是根据教程,复位时,先释放总线

(wd高电平),然后主机拉低wd,持续时间为400--960微妙.后主机拉高wd,持续15-

60微妙,后 从机,会拉低电平持续时间是60--240微妙(此时表示复位成功),如果

从机没有将总线拉低,则复位失败.然后,主机拉高电平60--240微妙.复位结束;

可,实验证明,在,从机,拉低总线电平后,持续一定时间,从机还会将总线拉高!这

是教程中的一个重大错误!

temperature sensor reset module finishing time: 23:08:00

( 温度 传感器 复位 模块 完成 时间 )

temperature sensor 操作过程:

1. reset DS18B20;</

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C51单片机DS18B20温度传感器的通信可以使用1-Wire总线协议。以下是使用C语言编写的DS18B20温度转换程序示例: ``` #include <reg51.h> sbit DQ = P1^0; //定义1-wire总线的单个数据线 unsigned char temp; //存放温度值 void delay_us(unsigned int us) //延时函数,单位为微秒 { while(us--); } void init_ds18b20(void) //DS18B20初始化函数 { DQ = 1; delay_us(2); DQ = 0; delay_us(480); DQ = 1; delay_us(60); if(DQ == 0) //DS18B20存在 { delay_us(420); } } void write_byte(unsigned char dat) //写一个字节函数 { unsigned char i; for(i = 0; i < 8; i++) { DQ = 0; DQ = dat & 0x01; delay_us(60); DQ = 1; dat >>= 1; } } unsigned char read_byte(void) //读一个字节函数 { unsigned char i, dat = 0; for(i = 0; i < 8; i++) { dat >>= 1; DQ = 0; delay_us(6); DQ = 1; delay_us(9); if(DQ) { dat |= 0x80; } delay_us(55); } return dat; } void convert_ds18b20(void) //DS18B20温度转换函数 { init_ds18b20(); write_byte(0xcc); //跳过ROM操作 write_byte(0x44); //启动温度转换 } void read_ds18b20(void) //DS18B20读取温度函数 { unsigned char low, high; init_ds18b20(); write_byte(0xcc); //跳过ROM操作 write_byte(0xbe); //读取温度值 low = read_byte(); //读取温度低字节 high = read_byte(); //读取温度高字节 temp = ((high << 8) + low) * 0.0625; //计算温度值 } void main(void) { convert_ds18b20(); //启动温度转换 read_ds18b20(); //读取温度值 } ``` 上述程序中,init_ds18b20()函数用于初始化DS18B20,convert_ds18b20()函数用于启动温度转换,read_ds18b20()函数用于读取温度值。程序中使用了延时函数delay_us(),可以根据实际情况进行修改。在read_ds18b20()函数中,采用了16位计算温度值的方法,最后将结果乘以0.0625得到实际温度值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值