下载此文档

一种实现ds18b20读写时序的方法.docx


文档分类:高等教育 | 页数:约11页 举报非法文档有奖
1/11
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/11 下载此文档
文档列表 文档介绍
该【一种实现ds18b20读写时序的方法 】是由【开心果】上传分享,文档一共【11】页,该文档可以免费在线阅读,需要了解更多关于【一种实现ds18b20读写时序的方法 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。一种实现ds18b20读写时序的方法专利名称:一种实现ds18b20读写时序的方法技术领域:本发明涉及电子技术应用领域,尤其涉及用单片机驱动DS18B20时,一种实现DS18B20读写时序的方法。背景技术:DS18B20是MAXM公司生产的一种分辨率可编程的单总线(l_Wire)数字温度计。DS18B20在工农业生产、日常生活等需要测量温度的场合有着广泛的应用。I-Wire总线系统主控制器控制一个或多个从器件。DS18B20在单总线系统中总是从器件,主控制器一般为单片机。一般情况下,访问DS18B20的操作顺序为首先进行初始化;然后是ROM操作命令;接着是DS18B20功能命令。在初始化、ROM命令、功能命令中涉及的主要时序有主控制器发出的复位脉冲、DS18B20发出的存在脉冲,如图I所示。主控制器写“O”时序、主控制器写“I”时序、主控制器读“I”时序、主控制器读“O”时序,如图2所/Jnο另外,DS18B20在9位、10位、11位、、、375毫秒、750毫秒。如果采用外部电源供电,当主控制器发出温度转换指令44H后,跟着发出读时序,如果DS18B20处在转换中,则在总线上返回0,如果温度转换结束,在总线上返回I。可是,如果采用寄生供电模式,就不能通过主控制器发出读时序来确定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毫秒左右,作为系统外设上电延时时间;设置四个变量并初始化为O值,一个作为时间片计数器、一个作为一个时间片或几个时间片循环次数计数器、一个作为命令字计数器、一个作为中断次数计数器。进一步的,本发明的主要特点在于,在定时中断服务程序中,调整时间片计数器的值,把对DS18B20的操作所涉及的所有时序中大于15微秒的时间片序列化,并与时间片计数器的值对应。进一步的,本发明的主要特点在于,在定时中断服务程序中,把对DS18B20的操作所涉及的所有时序中要求大于I微秒而小于无限长的时间片,直接在中断程序里用I微秒至2微秒左右的指令延时实现。并对指令延时的前、后相应的设置I-Wire的高或低电平。进一步的,本发明的主要特点在于,在定时中断服务程序中,根据时间片计数器的值,重新对计数器设置不同的计数初值,该计数初值满足再次进入定时中断服务程序时,跨过的时间间隔等于该时间片计数器值所对应的DS18B20所要求的时间片时间。并根据时间片计数器的值,相应的设置I-Wire的高或低电平。进一步的,本发明的主要特点在于,在定时中断服务程序中,根据时间片计数器的值,调整循环次数计数器的值,以便在发送命令或接收数据中,满足相应的发送或接收时序,完整并正确的发送8位命令或接收8位数据。进一步的,本发明的主要特点在于,在定时中断服务程序中,根据时间片计数器的值和循环计数器的值,调整命令字计数器的值,以便根据程序要求将相应的ROM命令或功能命令发送出去以及将温度转换结果的高8位或低8位接收进来。进一步的,本发明的主要特点在于,在定时中断服务程序中,根据时间片计数器的值和命令字计数器的值,设置定时器计数初值、判断并调整中断次数计数器的值,使其达到较长时间的延时,如750毫秒,用以确保DS18B20温度转换完成。本发明所述方法,仅需要通过调整定时器初值,就能精确满足对DS18B20的操作时序要求,降低了对DS18B20的调试难度,使DS18B20的使用变得简单、容易。更为关键的是这种方法便于更合理的安排系统程序结构,不必考虑系统程序结构对DS18B20操作时序的影响,大大的提高了程序的工作效率。图I是DS18B20初始化时序图2是DS18B20读/写时序图;图3是主控制器单片机的定时中断服务程序流程图4是图3主控制器单片机的定时中断服务程序流程图的续图。具体实施例方式下面给出本发明的一个实施例,并结合附图对本发明进行详细介绍。在本发明的一个实施例中,采用STC12C5A60S2单片机作为主控制器件,外部只接一个DS18B20数字温度计。,上拉电阻为1K,采用寄生电源供电,即把DS18B20的VDD和GND连在一起接到单片机STC12C5A60S2的GND端。采用4位数码管通过定时中断I进行动态扫描方式显示转换温度值。实现DS18B20读与时序的呆作在定时中断O中完成。在单片机初始化程序中,初始化相关的变量,开放所使用的各种中断源。在主程序循环中,根据定时中断O中DS18B20温度转换结束标志,将温度转换结果进行处理,然后送显示缓冲区,再在定时中断I中进行动态显示。上电复位后,第一次进入定时中断O时,时间片计数器、命令字计数器、循环次数计数器、中断次数计数器都为O值。定时中断O的流程图见图3和图4。每次进入定时中断O所执行的程序及操作步骤如下。I、当时间片计数器为O时,(即DS18B20的DQ,下同)为0,设置定时时间常数,使之下次进入该中断的时间为480微秒,对时间片计数器加1,定时中断O返回。2、480微秒后第二次进入定时中断O时,时间片计数器值为1,,准备接受DS18B20返回的存在脉冲,此时,DS18B20时序要求等待15微秒至60微秒后,DS18B20如果存在,,拉低时间为60微秒至240微秒,如图I所示。所以,这里重新设置时间常数,使之下次进入该中断的时间为60微秒,并对时间片计数器加1,定时中断O返回。3、60微秒后,再次进入定时中断0,此时,时间片计数器值为2,,为O则DS18B20存在,否则,不存在或损坏。再次重置时间常数为480微秒后进入中断,时间片计数器加I,定时中断O返回。4、再次进入定时中断O时,时间片计数器值为3,判断命令字计数器的值,此时,应为0,,即跳过ROM命令,重置时间常数2微秒后进入中断,时间片计数器置4,中断返回。5、再次进入定时中断O时,时间片计数器值为4,,写时序开始,通过指令延时I微秒,送出I位数据,重置时间常数60微秒后进入中断,循环计数器加1,判断循环计数器是否为7,即是否写完8位一个字节,是,则循环计数器清0,命令字计数器加1,数据片计数器赋3,中断返回;否,时间片计数器赋值6,,其他变量不做调整,中断返回。6、再次进入定时中断O时,时间片计数器值为6,,重置时间常数2微秒后进入中断,时间片计数器赋值4,中断返回。7、再次进入定时中断O时,时间片计数器值为4,重复上面5、6这两个步骤,直到循环计数器为7,写完8位一个字节的指令,循环计数器清0,命令字计数器加I,数据片计数器赋值3,中断返回。8、再次进入定时中断O时,时间片计数器值为3,判断命令字计数器的值,此时,应为1,则给准备写出命令的变量W_DATA赋值0x44,即温度转换命令,重置时间常数2微秒后进入中断,时间片计数器置4,中断返回。9、接下来的几次进入定时中断0,重复上面5、6、7三个步骤,将温度转换命令送出。10、再次进入定时中断O时,时间片计数器值为3,判断命令字计数器的值,此时,应为2,,给寄生供电的DS18B20提高上拉,并保持此高电平直到温度转换结束。故,第一次进入该步骤时,给中断次数计数器赋值150,重置时间常数为5毫秒,中断返回。由于时间片计数器和命令字计数器均没有调整,下次进入中断时,还是进入该步骤,此时,每进入一次,中断次数计数器减1,判断中断次数计数器。不为0,则重置时间常数为5毫秒,中断返回;为0,时间片计数器赋值0,命令字计数器加1,中断返回。这样,在该步骤一共中断150次,时间过去750毫秒,DS18B20完成了温度转换。11、再次进入定时中断O时,时间片计数器值为3,判断命令字计数器的值,此时,应为3,,即跳过ROM命令,重置时间常数2微秒后进入中断,时间片计数器置4,中断返回。12、重复5、6、7三个步骤,将跳过ROM命令送出。13、再次进入定时中断O时,时间片计数器值为3,判断命令字计数器的值,此时,应为4,给准备写出命令的变量W_DATA赋值OxBE,即读暂存器命令,重置时间常数2微秒后进入中断,时间片计数器置4,中断返回。14、重复5、6、7三个步骤,将读暂存器命令送出。15、再次进入定时中断O时,时间片计数器值为3,判断命令字计数器的值,此时,应为5,准备读取温度转换值的低8位,保存数据的变量R_DATA先清0,重置时间常数2微秒后进入中断,时间片计数器置5,中断返回。16、再次进入定时中断O时,时间片计数器值为5,,指令延时I微秒,,读出I位数据,重置时间常数为60微秒后进入中断,循环次数计数器加I。判断循环次数计数器的值,不为7,中断返回;为7,说明已经接收完8位数据,则循环计数器赋值O,命令字计数器加1,时间片计数器赋值3,中断返回。17、再次进入定时中断O时,时间片计数器值为3,判断命令字计数器的值,此时,应为6,将上步读出的数据送温度转换值变量TPL,准备读取温度转换值的高8位,再将保存数据的变量R_DATA先清0,重置时间常数2微秒后进入中断,时间片计数器置5,中断返回。18、重复步骤16,直到温度转换值高8位接收完毕。19、再次进入定时中断O时,时间片计数器值为3,判断命令字计数器的值,此时,应为7,将上步读出的数据送温度转换值变量TPH,设置转换结束标志为1,将时间片计数器、命令字计数器、循环次数计数器、中断次数计数器等全部清0,中断返回。定时中断O服务程序,就在上述19个步骤里周而复始的执行,完成了包括温度转换期间提供上拉及等待温度转换结束时间750毫秒在内的所有读写DS18B20的时序。本发明所述方法,同样适用于单片机跨接多个DS18B20的多点温度转换的场合。,通过主控制器定时中断服务程序,实现发送DS18B20的复位脉冲,接收DS18B20的存在脉冲,实现对DS18B20的写I时序、写O时序、读I时序、读O时序,实现DS18B20寄生供电的上拉操作及DS18B20温度转换结束的时间等待。,其特征在于,发送DS18B20的复位脉冲的时序是在主控制器的定时中断服务程序中实现的。,其特征在于,接收DS18B20的存在脉冲的时序是在主控制器的定时中断服务程序中实现的。,其特征在于,对DS18B20的写I时序是在主控制器的定时中断服务程序中实现的。,其特征在于,对DS18B20的写O时序是在主控制器的定时中断服务程序中实现的。,其特征在于,对DS18B20的读I时序是在主控制器的定时中断服务程序中实现的。,其特征在于,对DS18B20的读O时序是在主控制器的定时中断服务程序中实现的。,其特征在于,对DS18B20寄生供电模式下的上拉操作是在主控制器的定时中断服务程序中实现的。,其特征在于,对DS18B20处于温度转换期间的等待操作是在主控制器的定时中断服务程序中实现的。全文摘要本发明涉及电子技术应用领域,尤其涉及用单片机驱动DS18B20时,公开一种采用定时中断实现DS18B20读写时序的方法。将DS18B20读写时序所要求的时间片,及DS18B20

一种实现ds18b20读写时序的方法 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数11
  • 收藏数0 收藏
  • 顶次数0
  • 上传人开心果
  • 文件大小21 KB
  • 时间2024-04-17