📄 18b20_1.h
字号:
#include<reg51.h>
#include<intrins.h>
#define _18B20_1_h
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P3^7;
void delay10us(uchar t)
{
uchar i;
for(;t>0;t--)
for(i=5;i>0;i--);
}
/**********************18B20处理函数*************************
************************************************************/
void b20_ini() //18b20的初始化
{
uchar r_ack;
DQ=0;
delay10us(45); // 480us延时
DQ=1;
delay10us(5); // 15-60s的等待时间
r_ack=DQ; // 低脉冲表示器件存在
delay10us(10); // 60-240us延时
}
void b20_w_byte(uchar dat) // 向18b20写一字节数据
{
uchar i;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01 ;
dat>>=1;
delay10us(5); // 写1在拉低15us后采样,写0要持续60us
DQ=1;
}
}
uchar b20_r_byte() // 从18b20读一字节数据
{
uchar i,temp=0;
for(i=8;i>0;i--)
{
DQ=0;
temp>>=1;
DQ=1;
_nop_(); // 读0时要在拉低后的15us内读取
if(DQ) temp|=0x80;
delay10us(5); // 每个时间片必须大于60us
DQ=1 ;
}
return temp;
}
int b20_temperate() // 读取温度寄存器
{
uchar b20_l=0,b20_h=0;
int tem_i=0;
b20_ini(); // 18b20复位
b20_w_byte(0xCC); // 跳过rom操作
b20_w_byte(0x44); // 开始温度转换
b20_ini();
b20_w_byte(0xCC);
b20_w_byte(0xBE); // 读ram数据
b20_l=b20_r_byte(); // 读温度低位寄存器
b20_h=b20_r_byte(); // 读温度高位寄存器
tem_i=(((b20_h&0x07)<<4)|((b20_l&0xf0)>>4)); //取整数部分温度
return (tem_i);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -