资源描述:
《ds18b20接口的c语言程序设计28908new》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、「一朴月忆卿呼黝掣缨竖粤甘一接口的语言程序设计天津大学顾振宇刘鲁源杜振辉,、、。是公司生产的一款数字温度传感器具有精度高全数字化连线少等优摘要点但其时序要求严格,使大多数编程人员不得不用汇编语言编写接口程序。本文介。绍数字温度传感器的接口程序及其编程方法和编程思路关键词数字温度传感器接口引言操作中,用到的较长时间延时有“、、、。林“等因这些延时均为数字温度传感器是美国公司“的整数倍,因此可编写一个函推出的系列数字温度传感器中性能优异的,,一款,具数用该函数进行大约的延时源码如有诸多优点①精度高位二进制转换结果,确保士下,“的精度和的分辨率。功能延时延时时间。,刀输入延时
2、时间龙全数字化直接将数字信号传给传输刀返回无可靠,避免了模拟方式的干扰问题。口连线少。仅有根连线电源、地线即延时参数和根数字总线。如采用寄生电源方式,会从数字总线获取寄生电源,则仅连接线和道,地线即可。飞少一虽然有诸多优点,但使用起来并非易””个叩‘,事。由于采用单总线数据传输方式,的数了据均由同一条线完成,因此,对读写的操作时序要求严格。一般情况下需要用汇编语言编写接口一程序川,而如今单片机编程已广泛采用语言。在分析了所编译生成的程序代码的基础上,依据,该函数编译生成的汇编为的编译特点采用编写了该数字温度传感。,函数少开始器的接口程序该程序采用编译通过’’,一变量’分
3、配到寄存器一在采用晶振的单片机上试运行,完全可以满足单线数据传输的时序要求。、精确个延时问题妇为保证】的严格时序,需要作较精。,确的延时在的操作中延时分两种短,时间延时和较长时间延时。短时间延时指林以下的延时,在汇编语言下采用若干个指令即函数结束可。因提供了若干内部函数,函数为其从上面的源码与生成汇编的对比中不难发中之一,其编译结果就是在对应位置嵌人一个现,程序中的一结构仅生成了汇编指令,因此,短时间延时可利用函数一条指令。这样一条指令用去实现。较长时间延时指“以上的延时。在,加上个,正好“一个循环而牛峪‘入石今性众口皿©1994-2009ChinaAcademicJo
4、urnalElectronicPublishingHouse.Allrightsreserved.http://www.cnki.net函数的循环圈数即为中的参数。这样就得到延时。了一个大约林的延时这里没有将函数的卜刀停止调用、返回及参数传递的时间计算在内,但足以满足使用要求。如果需要,可以作更精细的计算。其中指令所生成的汇编为底层基本操作有了比较精确的延时保证,就可以对《。这样放入中的数据的最后进行底层基本操作了的底层基本操作有一位就转人个。寄存器。利用该操作即可逐位将数据取出,发送出初始化去。初始化是的底层基本操作之一。通过数据读单线总线进行的所有操作都从一个初始化
5、序列开数据读是的底层基本操作之一,温度始。初始化序列包括一个由发出的复位脉冲及值和其它状态信息的传回均由该操作完成。起初打其后由发出的存在脉冲。存在脉冲让算采用与逐位写相同的方式编制逐位读的函数,将知道在总线上且已做好操作准备。有了前数据读入寄存器后再利用位右移操作将数据逐,,。面的延时函数初始化实现起来很简单源码如位送人但实际写出的代码却不能正常工作下经分析所生成的汇编代码位发现位右移操作,,“’,,刀功能初始化读存在脉冲无存在脉冲则置位错所生成的汇编总是先清寄存器再进行右误标志移,这样数据在被送入前就已经被清掉了。为输入无了实现数据的逐位读利用的位寻址功能,在返回无
6、中将的最高位定义为,然后利用它来实现逐位数据读功能,源码如下卜复位脉冲功能读延时输人无恢复返回读出的字节数据延时二读存在脉冲,刀循环变量盯延时司清伪叹卜一厦数据写右移位数据写是的底层基本操作之一,所有起始的指令、数据发送均由该操作完成。的写少延时操作都是逐位进行的,因此,采用中的位右移恢复操作来实现。源码如下延时功能写读第位刀输人待写字节”返回无返回字节数据”刀待写的字节数据上面的函数由于利用的位寻址能力直接毛循环变将数据置人,避开了寄存器,因此成功地将数据读出。叹一基本指令起始延时提供了一系列指令来控制传感器的工将第位待发数据送人作。下面只简单介绍所用到的最基本的几条
7、。卜送出数据。。,©1994-2009ChinaAcademicJournalElectronicPublishingHouse.Allrightsreserved.http://www.cnki.net技术纵横用于条总线上只挂个的情况,温度值低位使跳过多个传感器的识别过程。如果一条温度值高位总线上挂了不止个传感器,总线上就会发生数返回读出的温度值,字节据冲突。在编制温度读取函数时遇到了一个问题如何【』启动一次温度转换过程。温度转换命令被执行将两个单字节数据合并为一个双字节数据在汇编,后,保持等待状态。下这很容易但在下似乎只有先将高字节乘