概述
1、 1-Wire总线-DS18B20
DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小,抗干扰能力强,精度高的特点。
DS18B20具有唯一的序列号,在一根通信线,可以挂很多这样的数字温度计,十分方便。
2、 DS18B20共有三种形态的存储器资源
1、ROM只读存储器,用于存放DS18B20的ID编码,其前8位是单线系列编码(DS18B20的是28H),后面48位是芯片唯一的序列号,最后8位是以上56位的CRC码(冗余校验)。数据在出产时设置不由用户更改。DS18B20共64位ROM。
2、RAM数据暂存器,用于内部计算和数据存取,数据在掉电后丢失,DS18B20共9个字节RAM,每个字节为8位。第1、2个字节是温度转换后的数据值(温度寄存器),第3、4个字节是用户EEPROM(温度报警值TH、TL储存)的镜像。在上电复位时其值将被刷新。第5个字节则是用户第3个EEPROM的镜像(配置寄存器)。第6、7、8个字节为计数寄存器,是为了让用户得到更高的温度分辨率而设计的,同样也是内部温度转换、计算的暂存单元。第9个字节为前8个字节的CRC码。
3、EEPROM非易失性记忆体,用于存放长期需要保存的数据,上下限温度报警值和校验数据,DS18B20共3位EEPROM,并在RAM都存在镜像,以方便用户操作。
3、单片机与DS18B20接口电路
DS18B20的一线工作协议流程是:
初始化>ROM操作指令>存储器操作指令>数据传输。
其工作时序包括:
bit Init_DS18B20(void)
{ bit flag; //检测DS18B20是否存在的标志,flag=0,存在;flag=1,不存在
DQ = 1; //先将数据线拉高
for(time=0;time<2;time++); //略微延时约6微秒
DQ = 0;
for(time=0;time<200;time++) ; //向DS18B20发出一持续480~960us的低电平复位脉冲
DQ = 1; //释放数据线(将数据线拉高)
for(time=0;time<10;time++) ; //延时约30us(释放总线后需等待15~60us让DS18B20
输出存在脉冲)
flag=DQ; //让单片机检测是否输出了存在脉冲(DQ=0表示存在)
for(time=0;time<200;time++) ; //延时足够长时间,等待存在脉冲输出完毕
return (flag); //返回检测成功标志
}
2)写操作程序
Void WriteOneChar(unsigned char dat)
{ unsigned char i=0;
for (i=0; i<8; i++)
{
DQ =1; // 先将数据线拉高
_nop_(); //等待一个机器周期
DQ=0; //将数据线从高拉低时即启动写时序
DQ=dat&0x01; //利用与运算取出要写的某位二进制数据,
//并将其送到数据线上等待DS18B20采样
for(time=0;time<10;time++);
//延时约30us,DS18B20在拉低后的约15~45us期间从数据线上采样
DQ=1; //释放数据线
for(time=0;time<1;time++);
//延时3us,两个写时序间至少需要1us的恢复期
dat>>=1; //将dat中的各二进制位数据右移1位
}
for(time=0;time<4;time++); //稍作延时,给硬件一点反应时间,两个字节之间
}
unsigned char ReadOneChar(void)
{ unsigned char i=0;
unsigned char dat; //储存读出的一个字节数据
for (i=0;i<8;i++)
{ DQ =1; // 先将数据线拉高
_nop_(); //等待一个机器周期
DQ = 0; //单片机从DS18B20读书据时,将数据线从高拉低即启动读时序
_nop_(); //等待一个机器周期
DQ = 1; //将数据线"人为"拉高,为单片机检测DS18B20的输出电平作准备
for(time=0;time<2;time++) ; //延时约6us,使主机在15us内采样
dat>>=1;
if(DQ==1)
dat|=0x80; //如果读到的数据是1,则将1存入dat
else
dat|=0x00; //如果读到的数据是0,则将0存入dat
for(time=0;time<8;time++); //延时3us,两个读时序之间必须有大于1us的恢复期
}
return(dat); //返回读出的十六进制数据
}
最后
以上就是高兴茉莉为你收集整理的1-Wire总线-DS18B20及其驱动程序编写的全部内容,希望文章能够帮你解决1-Wire总线-DS18B20及其驱动程序编写所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复