首页> 中国专利> 一种实现DS18B20读写时序的方法

一种实现DS18B20读写时序的方法

摘要

本发明涉及电子技术应用领域,尤其涉及用单片机驱动DS18B20时,公开一种采用定时中断实现DS18B20读写时序的方法。将DS18B20读写时序所要求的时间片,及DS18B20处于温度转换期间的延时等待全部放在定时中断服务程序中,并将中断的优先级设置为高优先级,以严格保证DS18B20的时序要求。这种方法,既避免了在C语言中插入汇编的复杂编程过程,又避免了采用软件延时实现DS18B20时序而带来的占用单片机资源、程序效率低下的事实。另外,在程序中使用其他的中断源,不会对DS18B20的读写造成影响。

著录项

  • 公开/公告号CN102929717A

    专利类型发明专利

  • 公开/公告日2013-02-13

    原文格式PDF

  • 申请/专利权人 刘宝成;

    申请/专利号CN201210449997.X

  • 发明设计人 刘宝成;

    申请日2012-11-12

  • 分类号G06F9/48;

  • 代理机构

  • 代理人

  • 地址 028043 内蒙古自治区通辽市内蒙古民族大学物理与电子信息学院

  • 入库时间 2024-02-19 17:47:45

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-11-05

    未缴年费专利权终止 IPC(主分类):G06F9/48 授权公告日:20150513 终止日期:20181112 申请日:20121112

    专利权的终止

  • 2015-05-13

    授权

    授权

  • 2013-03-20

    实质审查的生效 IPC(主分类):G06F9/48 申请日:20121112

    实质审查的生效

  • 2013-02-13

    公开

    公开

说明书

技术领域

本发明涉及电子技术应用领域,尤其涉及用单片机驱动DS18B20时,一种实现DS18B20读写时序的方法。

背景技术

DS18B20是MAXIM公司生产的一种分辨率可编程的单总线(1-Wire)数字温度计。DS18B20在工农业生产、日常生活等需要测量温度的场合有着广泛的应用。

1-Wire总线系统主控制器控制一个或多个从器件。DS18B20在单总线系统中总是从器件,主控制器一般为单片机。一般情况下,访问DS18B20的操作顺序为:首先进行初始化;然后是ROM操作命令;接着是DS18B20功能命令。在初始化、ROM命令、功能命令中涉及的主要时序有:主控制器发出的复位脉冲、DS18B20发出的存在脉冲,如图1所示。主控制器写“0”时序、主控制器写“1”时序、主控制器读“1”时序、主控制器读“0”时序,如图2所示。

另外,DS18B20在9位、10位、11位、12位分辨率下的最长转换时间分别为93.75毫秒、187.5毫秒、375毫秒、750毫秒。如果采用外部电源供电,当主控制器发出温度转换指令44H后,跟着发出读时序,如果DS18B20处在转换中,则在总线上返回0,如果温度转换结束,在总线上返回1。可是,如果采用寄生供电模式,就不能通过主控制器发出读时序来确定DS18B20对温度转换是否完成,只能通过延时所配置分辨率对应的最长转换时间后,再去读温度转换结果。

综上所述,当采用单片机作为主控制器对DS18B20进行读写操作时,必须要严格按照DS18B20的读写时序进行操作,才能获得正确的温度转换结果。一般的做法是采用软件延时的方法来获得对DS18B20操作的各种时序及读取温度转换结果,由于DS18B20对时序要求比较严格,如初始化操作,主控制器拉低总线至少480微秒后释放总线至高电平,DS18B20检测到上升沿后,等待15微秒~60微秒,然后DS18B20发出60微秒~240微秒低电平信号构成存在脉冲。如果等待时间不够或等待时间过长,都将导致接收不到DS18B20正确的存在脉冲,从而可能使温度转换不能完成,可能也就得不到正确的温度值。所以,在采用软件延时方法进行程序设计时,一般采用汇编语言编写,以其获得较为精确的延时时间。可是,一方面现在绝大多数人都在使用C语言进行单片机编程,在C语言中插入汇编,使得编程变得复杂起来,掌握起来不太容易。另一方面采用软件延时的方法会导致单片机程序效率低下,使单片机经常处于无谓的延时等待中,浪费了单片机宝贵的资源。再有,如果程序中使用了中断,由于中断是随机发生的,经常出现中断发生在对DS18B20操作的时序中,从而破坏了原本正常的操作时序,导致对DS18B20的读写失败。如果在使用中断的程序中,在对DS18B20操作前禁止中断,完成操作后再开放中断,又会导致在此期间中断得不到及时响应,这在某些应用中是不允许的。

发明内容

本发明解决了上述对DS18B20读写时存在的问题,公开一种采用定时中断实现DS18B20读写时序的方法。

为了解决上述对DS18B20读写时存在的问题,将DS18B20读写时序所要求的时间片,及DS18B20处于温度转换期间的延时等待全部放在定时中断服务程序中,并将中断的优先级设置为高优先级,以严格保证DS18B20的时序要求。这种方法,既避免了在C语言中插入汇编的复杂编程过程,又避免了采用软件延时实现DS18B20时序而带来的占用单片机资源、程序效率低下的事实,再有,在程序中使用其他的中断源,不会对DS18B20的读写造成影响。

本发明的主要特点在于,在主控制器单片机的初始化程序中,选择并开放一个定时器中断,定时器初值根据实际控制系统可以设置为5毫秒左右,作为系统外设上电延时时间;设置四个变量并初始化为0值,一个作为时间片计数器、一个作为一个时间片或几个时间片循环次数计数器、一个作为命令字计数器、一个作为中断次数计数器。

进一步的,本发明的主要特点在于,在定时中断服务程序中,调整时间片计数器的值,把对DS18B20的操作所涉及的所有时序中大于15微秒的时间片序列化,并与时间片计数器的值一一对应。

进一步的,本发明的主要特点在于,在定时中断服务程序中,把对DS18B20的操作所涉及的所有时序中要求大于1微秒而小于无限长的时间片,直接在中断程序里用1微秒至2微秒左右的指令延时实现。并对指令延时的前、后相应的设置1-Wire的高或低电平。

进一步的,本发明的主要特点在于,在定时中断服务程序中,根据时间片计数器的值,重新对计数器设置不同的计数初值,该计数初值满足再次进入定时中断服务程序时,跨过的时间间隔等于该时间片计数器值所对应的DS18B20所要求的时间片时间。并根据时间片计数器的值,相应的设置1-Wire的高或低电平。

进一步的,本发明的主要特点在于,在定时中断服务程序中,根据时间片计数器的值,调整循环次数计数器的值,以便在发送命令或接收数据中,满足相应的发送或接收时序,完整并正确的发送8位命令或接收8位数据。

进一步的,本发明的主要特点在于,在定时中断服务程序中,根据时间片计数器的值和循环计数器的值,调整命令字计数器的值,以便根据程序要求将相应的ROM命令或功能命令发送出去以及将温度转换结果的高8位或低8位接收进来。

进一步的,本发明的主要特点在于,在定时中断服务程序中,根据时间片计数器的值和命令字计数器的值,设置定时器计数初值、判断并调整中断次数计数器的值,使其达到较长时间的延时,如750毫秒,用以确保DS18B20温度转换完成。

本发明所述方法,仅需要通过调整定时器初值,就能精确满足对DS18B20的操作时序要求,降低了对DS18B20的调试难度,使DS18B20的使用变得简单、容易。更为关键的是这种方法便于更合理的安排系统程序结构,不必考虑系统程序结构对DS18B20操作时序的影响,大大的提高了程序的工作效率。

附图说明

图1是DS18B20初始化时序图;

图2是DS18B20读/写时序图;

图3是主控制器单片机的定时中断服务程序流程图;

图4是图3主控制器单片机的定时中断服务程序流程图的续图。

具体实施方式

下面给出本发明的一个实施例,并结合附图对本发明进行详细介绍。

在本发明的一个实施例中,采用STC12C5A60S2单片机作为主控制器件,外部只接一个DS18B20数字温度计。DS18B20的DQ脚接在STC12C5A60S2的P1.0脚,上拉电阻为1K,采用寄生电源供电,即把DS18B20的VDD和GND连在一起接到单片机STC12C5A60S2的GND端。采用4位数码管通过定时中断1进行动态扫描方式显示转换温度值。实现DS18B20读写时序的操作在定时中断0中完成。

在单片机初始化程序中,初始化相关的变量,开放所使用的各种中断源。在主程序循环中,根据定时中断0中DS18B20温度转换结束标志,将温度转换结果进行处理,然后送显示缓冲区,再在定时中断1中进行动态显示。

上电复位后,第一次进入定时中断0时,时间片计数器、命令字计数器、循环次数计数器、中断次数计数器都为0值。定时中断0的流程图见图3和图4。每次进入定时中断0所执行的程序及操作步骤如下。

1、当时间片计数器为0时,置P1.0(即DS18B20的DQ,下同)为0,设置定时时间常数,使之下次进入该中断的时间为480微秒,对时间片计数器加1,定时中断0返回。

2、480微秒后第二次进入定时中断0时,时间片计数器值为1,将P1.0置1,准备接受DS18B20返回的存在脉冲,此时,DS18B20时序要求等待15微秒至60微秒后,DS18B20如果存在,则拉低P1.0,拉低时间为60微秒至240微秒,如图1所示。所以,这里重新设置时间常数,使之下次进入该中断的时间为60微秒,并对时间片计数器加1,定时中断0返回。

3、60微秒后,再次进入定时中断0,此时,时间片计数器值为2,读P1.0的状态送入事先定义的标志位,为0则DS18B20存在,否则,不存在或损坏。再次重置时间常数为480微秒后进入中断,时间片计数器加1,定时中断0返回。

4、再次进入定时中断0时,时间片计数器值为3,判断命令字计数器的值,此时,应为0,则给准备写出命令的变量W_DATA赋值0xCC,即跳过ROM命令,重置时间常数2微秒后进入中断,时间片计数器置4,中断返回。

5、再次进入定时中断0时,时间片计数器值为4,置P1.0为0,写时序开始,通过指令延时1微秒,送出1位数据,重置时间常数60微秒后进入中断,循环计数器加1,判断循环计数器是否为7,即是否写完8位一个字节,是,则循环计数器清0,命令字计数器加1,数据片计数器赋3,中断返回;否,时间片计数器赋值6,准备拉高P1.0,其他变量不做调整,中断返回。

6、再次进入定时中断0时,时间片计数器值为6,置P1.0为1,重置时间常数2微秒后进入中断,时间片计数器赋值4,中断返回。

7、再次进入定时中断0时,时间片计数器值为4,重复上面5、6这两个步骤,直到循环计数器为7,写完8位一个字节的指令,循环计数器清0,命令字计数器加1,数据片计数器赋值3,中断返回。

8、再次进入定时中断0时,时间片计数器值为3,判断命令字计数器的值,此时,应为1,则给准备写出命令的变量W_DATA赋值0x44,即温度转换命令,重置时间常数2微秒后进入中断,时间片计数器置4,中断返回。

9、接下来的几次进入定时中断0,重复上面5、6、7三个步骤,将温度转换命令送出。

10、再次进入定时中断0时,时间片计数器值为3,判断命令字计数器的值,此时,应为2,置P1.0为1,给寄生供电的DS18B20提高上拉,并保持此高电平直到温度转换结束。故,第一次进入该步骤时,给中断次数计数器赋值150,重置时间常数为5毫秒,中断返回。由于时间片计数器和命令字计数器均没有调整,下次进入中断时,还是进入该步骤,此时,每进入一次,中断次数计数器减1,判断中断次数计数器。不为0,则重置时间常数为5毫秒,中断返回;为0,时间片计数器赋值0,命令字计数器加1,中断返回。这样,在该步骤一共中断150次,时间过去750毫秒,DS18B20完成了温度转换。

11、再次进入定时中断0时,时间片计数器值为3,判断命令字计数器的值,此时,应为3,给准备写出命令的变量W_DATA赋值0xCC,即跳过ROM命令,重置时间常数2微秒后进入中断,时间片计数器置4,中断返回。

12、重复5、6、7三个步骤,将跳过ROM命令送出。

13、再次进入定时中断0时,时间片计数器值为3,判断命令字计数器的值,此时,应为4,给准备写出命令的变量W_DATA赋值0xBE,即读暂存器命令,重置时间常数2微秒后进入中断,时间片计数器置4,中断返回。

14、重复5、6、7三个步骤,将读暂存器命令送出。

15、再次进入定时中断0时,时间片计数器值为3,判断命令字计数器的值,此时,应为5,准备读取温度转换值的低8位,保存数据的变量R_DATA先清0,重置时间常数2微秒后进入中断,时间片计数器置5,中断返回。

16、再次进入定时中断0时,时间片计数器值为5,置P1.0为0,指令延时1微秒,置P1.0为1,读出1位数据,重置时间常数为60微秒后进入中断,循环次数计数器加1。判断循环次数计数器的值,不为7,中断返回;为7,说明已经接收完8位数据,则循环计数器赋值0,命令字计数器加1,时间片计数器赋值3,中断返回。

17、再次进入定时中断0时,时间片计数器值为3,判断命令字计数器的值,此时,应为6,将上步读出的数据送温度转换值变量TPL,准备读取温度转换值的高8位,再将保存数据的变量R_DATA先清0,重置时间常数2微秒后进入中断,时间片计数器置5,中断返回。

18、重复步骤16,直到温度转换值高8位接收完毕。

19、再次进入定时中断0时,时间片计数器值为3,判断命令字计数器的值,此时,应为7,将上步读出的数据送温度转换值变量TPH,设置转换结束标志为1,将时间片计数器、命令字计数器、循环次数计数器、中断次数计数器等全部清0,中断返回。

定时中断0服务程序,就在上述19个步骤里周而复始的执行,完成了包括温度转换期间提供上拉及等待温度转换结束时间750毫秒在内的所有读写DS18B20的时序。

本发明所述方法,同样适用于单片机跨接多个DS18B20的多点温度转换的场合。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号