CN102929717B - 一种实现ds18b20读写时序的方法 - Google Patents

一种实现ds18b20读写时序的方法 Download PDF

Info

Publication number
CN102929717B
CN102929717B CN201210449997.XA CN201210449997A CN102929717B CN 102929717 B CN102929717 B CN 102929717B CN 201210449997 A CN201210449997 A CN 201210449997A CN 102929717 B CN102929717 B CN 102929717B
Authority
CN
China
Prior art keywords
ds18b20
counter
value
interruption
timeslice
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201210449997.XA
Other languages
English (en)
Other versions
CN102929717A (zh
Inventor
刘宝成
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Individual
Original Assignee
Individual
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Individual filed Critical Individual
Priority to CN201210449997.XA priority Critical patent/CN102929717B/zh
Publication of CN102929717A publication Critical patent/CN102929717A/zh
Application granted granted Critical
Publication of CN102929717B publication Critical patent/CN102929717B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Microcomputers (AREA)

Abstract

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

Description

一种实现DS18B20读写时序的方法
技术领域
本发明涉及电子技术应用领域,尤其涉及用单片机驱动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的多点温度转换的场合。

Claims (1)

1.一种实现DS18B20读写时序的方法,在主控制器的程序中,有四个初始化为0值的变量,分别是时间片计数器、循环次数计数器、命令字计数器和中断次数计数器,通过主控制器定时中断服务程序,调整时间片计数器、循环次数计数器、命令字计数器及中断次数计数器的值,实现发送DS18B20的复位脉冲、接收DS18B20的存在脉冲、对DS18B20的写1时序、写0时序、读1时序、读0时序、DS18B20寄生供电的上拉操作及DS18B20温度转换结束的时间等待,其特征在于:实现DS18B20读写时序的定时中断的优先级为高优先级;在定时中断服务程序中,把对DS18B20的操作所涉及的所有时序中要求大于1微秒而小于无限长的时间片,直接在中断程序里用1微秒至2微秒左右的指令延时实现,对DS18B20的操作所涉及的所有时序中大于15微秒的时间片序列化而且与时间片计数器的值一一对应;在定时中断服务程序中,调整时间片计数器的值,根据时间片计数器的值,重新对定时器设置不同的计数初值,该计数初值满足再次进入定时中断服务程序时,跨过的时间间隔等于该时间片计数器值所对应的DS18B20所要求的时间片时间;在定时中断服务程序中,接收DS18B20发送的存在脉冲,判断DS18B20是否存在或损坏;在定时中断服务程序中,根据时间片计数器的值,调整循环次数计数器的值,以便在发送命令或接收数据中,满足相应的发送或接收时序,完整并正确的发送8位命令或接收8位数据;在定时中断服务程序中,根据时间片计数器的值和循环计数器的值,调整命令字计数器的值,以便根据程序要求将相应的ROM命令或功能命令发送出去以及将温度转换结果的高8位或低8位接收进来;在定时中断服务程序中,根据时间片计数器的值和命令字计数器的值,设置定时器计数初值、判断并调整中断次数计数器的值,使其达到较长时间的延时,用以确保DS18B20温度转换完成并实现DS18B20寄生供电模式下的上拉操作。
CN201210449997.XA 2012-11-12 2012-11-12 一种实现ds18b20读写时序的方法 Expired - Fee Related CN102929717B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210449997.XA CN102929717B (zh) 2012-11-12 2012-11-12 一种实现ds18b20读写时序的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210449997.XA CN102929717B (zh) 2012-11-12 2012-11-12 一种实现ds18b20读写时序的方法

Publications (2)

Publication Number Publication Date
CN102929717A CN102929717A (zh) 2013-02-13
CN102929717B true CN102929717B (zh) 2015-05-13

Family

ID=47644524

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210449997.XA Expired - Fee Related CN102929717B (zh) 2012-11-12 2012-11-12 一种实现ds18b20读写时序的方法

Country Status (1)

Country Link
CN (1) CN102929717B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107894706B (zh) * 2017-12-05 2021-04-06 山东航天电子技术研究所 一种基于fpga和cpu综合控制的星上时间管理系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
"DS18B20在实时控制系统中的应用";阮海蓉;《制造业自动化》;20120331;第34卷(第3期);第120-124页 *
"DS18B20数据温度传感器接口程序的时序";黄文力等;《仪器仪表用户》;20111231;第18卷(第6期);第99-101页 *

Also Published As

Publication number Publication date
CN102929717A (zh) 2013-02-13

Similar Documents

Publication Publication Date Title
CN103823776A (zh) 面向主从设备通信的单总线及通信方法
US10936524B2 (en) Bus system with slave devices
CN100480923C (zh) I2c总线从控制器软实现方法
EP2645262A1 (en) Usb device and detection method therefor
CN101719110A (zh) 光通信器件中多路i2c器件的实时监控方法
CN101581964B (zh) 计算机系统及外围设备驱动方法
CN101089838A (zh) 一种实现i2c读写时序的方法
CN203720837U (zh) 面向主从设备通信的单总线
CN112904751B (zh) 一种热敏打印头的加热逻辑控制方法
CN200990088Y (zh) 一种新型的8位risc微控制器构架
CN103901814A (zh) 一种多轴运动数控系统
CN102929717B (zh) 一种实现ds18b20读写时序的方法
US20170168980A1 (en) SPI Interface With Automatic Slave Select Generation
Corcoran Two wires and 30 years: A tribute and introductory tutorial to the I2C two-wire bus
CN101025720A (zh) 一种外部存储器控制器时序配置的装置及方法
CN208366386U (zh) 一种多路数据采集系统
CN109887259B (zh) 一种单线传输装置及方法
CN101329648B (zh) 可调试atr的接触式智能卡仿真器
CN103218334A (zh) 基于usb总线和rs485总线的计算机外设级联装置
CN202042048U (zh) 红外遥控吊扇调速器
CN202533818U (zh) 一种基于at89s51单片机的室内温度控制器
CN202600693U (zh) I2c总线启动与停止电路结构
CN201444302U (zh) 一种可配置管脚的soc芯片
CN112714105A (zh) 一种嵌入式opc ua协议转换系统
CN204143173U (zh) 一种数码管电子时钟

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20150513

Termination date: 20181112

CF01 Termination of patent right due to non-payment of annual fee