一种基于单片机定时器读取DS18B20温度的方法技术

技术编号:35857970 阅读:21 留言:0更新日期:2022-12-07 10:46
本发明专利技术公开了一种基于单片机定时器读取DS18B20温度的方法,所述方法通过单片机的定时器来控制各时序的延时,将初始化时序、写时序和读时序分解成3种、3种和4种的状态,在定时器的中断里根据不同的状态进行处理后读出2字节,继而根据读出的2字节计算温度值,采用这种方法消除了读取DS18B20温度的阻塞问题,并且能精准的控制时序,大大提高了多任务系统的稳定性。定性。定性。

【技术实现步骤摘要】
一种基于单片机定时器读取DS18B20温度的方法


[0001]本专利技术涉及单片机
,具体涉及一种基于单片机定时器读取DS18B20温度的方法。

技术介绍

[0002]DS18B20是一款常用的单总线数字温度测量芯片,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。但由于DS18B20是单总线接口,即接收和发送都是这个通信脚进行的。
[0003]其接收数据时为高电阻输入,其发送数据时是开漏输出,本身不具有输出高电平的能力,即输出0时通过MOS下拉为低电平,而输出1时,则为高阻,需要外接上拉电阻将其拉为高电平,故而对时序的要求比较严格,需在一定时间内精确延时,常用的方法为根据单片机的频率采用软件延时,容易出现的问题有:1、用软件做延时会导致单片机阻塞;2、延时期间一般要关中断,防止别的任务进来导致延时不准,这会导致多任务系统运行不稳定。

技术实现思路

[0004]为解决上述问题,提出了一种基于单片机定时器读取DS18B20温度的方法;
[0005]一种基于单片机定时器读取DS18B20温度的方法,具体步骤为:1)、Status==0等待状态;2)、初始化时序;3)、写时序、4)、读时序;5)、Status==12计算温度值;方法通过单片机的定时器来控制各时序的延时,将初始化时序、写时序和读时序分解成3种、3种和4种的状态,在定时器的中断里根据不同的状态进行处理后读出2字节,继而根据读出的2字节计算温度值。
[0006]优选的,初始化时序分解为:Status==1,开始初始化时序,拉低总线500us;Status==2,已经拉低总线500us,释放总线60us,等待器件的响应;Status==3,等待了60us,判断是否存在器件,延时500us。
[0007]优选的,写时序分解为:Status==4,开始写时序,拉低总线5us;Status==5,写bit至总线,延时60us;Status==6,写完1bit,释放总线5us。
[0008]优选的,读时序分解为:Status==8,开始读时序,拉低总线5us;Status==9,释放总线,延时10us;Status==10,单片机采样,延时50us;Status==11,读完1bit了,释放总线5us。
[0009]优选的,写时序和读时序之间还设有Status==7,即中间状态,在写时序命令完成后判断下一步的步骤,如果要读数据转到Status==8,要重新初始化转到Status==1。
[0010]优选的,写时序分解的Status==6,在写完1bit,释放总线5us的步骤完成后,判断一个字节是否写完,没写完状态转回Status==4,完成了转到Status==7。
[0011]优选的,Status==11,读完1bit,释放总线5us完成后,继而判断两个字节是否读完,没读完状态转回到Status==8,完成了转到Status==12,即根据读出的2字节计算温度值。
[0012]优选的,Status==12在根据读出的2字节计算温度值后,状态转为Status==0,即初始状态。
[0013]本专利技术通过本方法提出采用单片机定时器中断来实现延时,将读取DS18B20温度的时序分成不同的状态,每次进入定时器中断根据不同的状态来进行不同的操作。采用这种方法消除了读取DS18B20温度的阻塞问题,并且能精准的控制时序,大大提高了多任务系统的稳定性。
【附图说明】
[0014]图1为本专利技术的初始化时序分解示意图;
[0015]图2为本专利技术的写时序分解示意图;
[0016]图3为本专利技术的读时序分解示意图;
[0017]图4为本专利技术的流程图。
【具体实施方式】
[0018]为了使本专利技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本专利技术进行进一步详细说明。应当理解,此处描述的具体实施例仅用于解释本专利技术,并不用于限定本专利技术。
[0019]一种基于单片机定时器读取DS18B20温度的方法,如图1至3所示,通过单片机的定时器来控制各时序的延时,将初始化时序、写时序和读时序分解成3种、3种和4种的状态;
[0020]即初始化时序分解为:Status==1,开始初始化时序,拉低总线500us;Status==2,已经拉低总线500us,释放总线60us,等待器件的响应;Status==3,等待了60us,判断是否存在器件,延时500us。
[0021]优选的,写时序分解为:Status==4,开始写时序,拉低总线5us;Status==5,写bit至总线,延时60us;Status==6,写完1bit,释放总线5us。
[0022]优选的,读时序分解为:Status==8,开始读时序,拉低总线5us;Status==9,释放总线,延时10us;Status==10,单片机采样,延时50us;Status==11,读完1bit了,释放总线5us。
[0023]如图4所示,具体步骤为:1)、Status==0等待状态;
[0024]2)、初始化时序;Status==1,开始初始化时序,拉低总线500us,即:Start();WriteTime(500);Status++。
[0025]Status==2,已经拉低总线500us,释放总线60us,等待器件的响应,即Wait();WriteTime(60);Status++。
[0026]Status==3,等待了60us,判断是否存在器件,延时500us;即:
[0027]if(Read()==0)Status++;//如果器件存在进行下一步
[0028]else Status=0;//器件不存在状态归0
[0029]WriteTime(500)。
[0030]3)、写时序;Status==4,开始写时序,拉低总线5us;即:Start();WriteTime(5);Status++。
[0031]Status==5,写bit至总线,延时60us;即:If(写1)Wait();Else Start();
WriteTime(60);Status++;
[0032]Status==6,写完1bit,释放总线5us,继而判断一个字节是否写完,没写完状态转回Status==4,完成了转到Status==7;即:Wait();WriteTime(5);If(写完1字节)Status++;Else Status

=2。
[0033]4)、中间状态,Status==7,在写时序命令完成后判断下一步的步骤,如果要读数据转到Status==8,要重新初始化转到Status==1;
[0034]5)、读时序;Status==8,开始读时序,拉低总线5us,即:Start();WriteTime(5);Status++;
[0035]Status==9,释放总线本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于单片机定时器读取DS18B20温度的方法,具体步骤为:1)、Status==0等待状态;2)、初始化时序;3)、写时序、4)、读时序;5)、Status==12计算温度值;其特征在于:所述方法通过单片机的定时器来控制各时序的延时,将初始化时序、写时序和读时序分解成3种、3种和4种的状态,在定时器的中断里根据不同的状态进行处理后读出2字节,继而根据读出的2字节计算温度值。2.根据权利要求1所述的一种基于单片机定时器读取DS18B20温度的方法,其特征在于:所述初始化时序分解为:Status==1,开始初始化时序,拉低总线500us;Status==2,已经拉低总线500us,释放总线60us,等待器件的响应;Status==3,等待了60us,判断是否存在器件,延时500us。3.根据权利要求2所述的一种基于单片机定时器读取DS18B20温度的方法,其特征在于:所述写时序分解为:Status==4,开始写时序,拉低总线5us;Status==5,写bit至总线,延时60us;Status==6,写完1bit,释放总线5us。4.根据权利要求3所述的一种基于单片机定时器读取DS18B20温度的方法,其特征在于:所述读时序分解为:Status==8,开始读时序,拉低总线5us;Status=...

【专利技术属性】
技术研发人员:郑暾麟翟晓峰
申请(专利权)人:珠海黑石电气自动化科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1