下载

2下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 数字温度传感器DS18B20的原理与应用

数字温度传感器DS18B20的原理与应用.doc

数字温度传感器DS18B20的原理与应用

zhangxiangsong22
2010-09-24 0人阅读 举报 0 0 暂无简介

简介:本文档为《数字温度传感器DS18B20的原理与应用doc》,可适用于高等教育领域

数字温度传感器DSB的原理与应用数字温度传感器DSB的原理与应用、引言       DSB是DALLAS公司生产的一线式数字温度传感器具有引脚TO-小体积封装形式温度测量范围为-℃~+℃,可编程为位~位AD转换精度测温分辨率可达℃被测温度用符号扩展的位数字量方式串行输出其工作电源既可在远端引入也可采用寄生电源方式产生多个DSB可以并联到根或根线上CPU只需一根端口线就能与诸多DSB通信占用微处理器的端口较少可节省大量的引线和逻辑电路。以上特点使DSB非常适用于远距离多点温度检测系统。、​ DSB的内部结构     DSB内部结构如图所示主要由部分组成:位ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DSB的管脚排列如图所示DQ为数字信号输入/输出端GND为电源地VDD为外接供电电源输入端(在寄生电源接线方式时接地见图)。       ROM中的位序列号是出厂前被光刻好的它可以看作是该DSB的地址序列码每个DSB的位序列号均不相同。位ROM的排的循环冗余校验码(CRC=X+X+X+)。ROM的作用是使每一个DSB都各不相同这样就可以实现一根总线上挂接多个DSB的目的。图DSB的内部结构图DSB的管脚排列(a)初始化时序(b)写时序(c)读时序图DSB的工作时序图       DSB中的温度传感器完成对温度的测量用位符号扩展的二进制补码读数形式提供以℃LSB形式表达其中S为符号位。例如+℃的数字输出为DH+℃的数字输出为H-℃的数字输出为FFFH-℃的数字输出为FCH。----温度值低字节MSBLSBSSSSS温度值高字节       高低温报警触发器TH和TL、配置寄存器均由一个字节的EEPROM组成使用一个存储器功能命令可对TH、TL或配置寄存器写入。其中配置寄存器的格式如下:RRMSBLSB       R、R决定温度转换的精度位数:RR=“”位精度最大转换时间为msRR=“”位精度最大转换时间为msRR=“”位精度最大转换时间为msRR=“”位精度最大转换时间为ms未编程时默认为位精度高速暂存器是一个字节的存储器。开始两个字节包含被测温度的数字量信息第、、字节分别是TH、TL、配置寄存器的临时拷贝每一次上电复位时被刷新第、、字节未用表现为全逻辑第字节读出的是前面所有个字节的CRC码可用来保证通信正确。、DSB的工作时序  DSB的一线工作协议流程是:初始化→ROM操作指令→存储器操作指令→数据传输。其工作时序包括初始化时序、写时序和读时序如图(a)(b)(c)所示。、DSB与单片机的典型接口设计   图以MCS-系列单片机为例画出了DSB与微处理器的典型连接。图(a)中DSB采用寄生电源方式其VDD和GND端均接地图(b)中DSB采用外接电源方式其VDD端用V~V电源供电。   假设单片机系统所用的晶振频率为MHz根据DSB的初始化时序、写时序和读时序分别编写了个子程序:INIT为初始化子程序WRITE为写(命令或数据)子程序READ为读数据子程序所有的数据读写均由最低位开始。   (a)寄生电源工作方式(b)外接电源工作方式图DSB与微处理器的典型连接图DATEQUPINIT:CLREAINI:SETBDATMOVR,#INI:CLRDATDJNZR,INI主机发复位脉冲持续μs×=μsSETBDAT主机释放总线口线改为输入MOVR,#IN:DJNZR,INIDSB等待μs×=μsCLRCORLC,DATDSB数据线变低(存在脉冲)吗?JCINIDSB未准备好重新初始化MOVR,#INI:ORLC,DATJCINIDSB数据线变高初始化成功DJNZR,INI数据线低电平可持续μs×=μsSJMPINI初始化失败重来INI:MOVR,#IN:DJNZR,INIDSB应答最少μs×=μsRET------------------------WRITE:CLREAMOVR,#循环次写一个字节WR:SETBDATMOVR,#RRCA写入位从A中移到CYCLRDATWR:DJNZR,WR等待μsMOVDAT,C命令字按位依次送给DSBMOVR,#WR:DJNZR,WR保证写过程持续μsDJNZR,WR未送完一个字节继续SETBDATRET------------------------READ:CLREAMOVR,#循环次读一个字节RD:CLRDATMOVR,#NOP低电平持续μsSETBDAT口线设为输入RD:DJNZR,RD等待μsMOVC,DAT主机按位依次读入DSB的数据RRCA读取的数据移入AMOVR,#RD:DJNZR,RD保证读过程持续μsDJNZR,RD读完一个字节的数据存入A中SETBDATRET------------------------主机控制DSB完成温度转换必须经过三个步骤:初始化、ROM操作指令、存储器操作指令。必须先启动DSB开始转换再读出温度转换值。假设一线仅挂接一个芯片使用默认的位转换精度外接供电电源可写出完成一次转换并读取温度值子程序GETWD。   GETWD:LCALLINIT   MOVA,#CCH   LCALLWRITE发跳过ROM命令   MOVA,#H  LCALLWRITE发启动转换命令   LCALLINIT   MOVA,#CCH发跳过ROM命令   LCALLWRITE   MOVA,#BEH发读存储器命令   LCALLWRITE   LCALLREAD   MOVWDLSB,A温度值低位字节送WDLSB   LCALLREAD   MOVWDMSB,A温度值高位字节送WDMSB   RET子程序GETWD读取的温度值高位字节送WDMSB单元低位字节送WDLSB单元再按照温度值字节的表示格式及其符号位经过简单的变换即可得到实际温度值。如果一线上挂接多个DSB、采用寄生电源连接方式、需要进行转换精度配置、高低限报警等则子程序GETWD的编写就要复杂一些限于篇幅这一部分不再详述请参阅相关内容。       我们已成功地将DSB应用于所开发的“家用采暖洗浴器”控制系统中其转换速度快转换精度高与微处理器的接口简单给硬件设计工作带来了极大的方便能有效地降低成本缩短开发周期SB的汇编程序NS试验板适用晶振:MTEMPERLEQUHTEMPERHEQUHTEMPERNUMEQUHFLAGBITHDQBITP AAA:MOVSP,#HLCALLGETTEMPERLCALLTEMPERCOVLJMPAAANOP读出转换后的温度值GETTEMPER:SETBDQ定时入口BCD:LCALLINITJBFLAG,SLJMPBCD若DSB不存在则返回S:LCALLDELAYMOVA,#CCH跳过ROM匹配CCLCALLWRITEMOVA,#H发出温度转换命令LCALLWRITENOPLCALLDELAYLCALLDELAYCBA:LCALLINITJBFLAG,ABCLJMPCBAABC:LCALLDELAYMOVA,#CCH跳过ROM匹配LCALLWRITEMOVA,#BEH发出读温度命令LCALLWRITELCALLREADREADRET读DSB的程序,从DSB中读出一个字节的数据READ:MOVR,#RE:CLRCSETBDQNOPNOPCLRDQNOPNOPNOPSETBDQMOVR,#DJNZR,$MOVC,DQMOVR,#DJNZR,$RRCADJNZR,RERET写DSB的程序WRITE:MOVR,#CLRCWR:CLRDQMOVR,#DJNZR,$RRCAMOVDQ,CMOVR,#DJNZR,$SETBDQNOPDJNZR,WRSETBDQRET读DSB的程序,从DSB中读出两个字节的温度数据READ:MOVR,#将温度高位和低位从DSB中读出MOVR,#H低位存入H(TEMPERL),高位存入H(TEMPERH)RE:MOVR,#RE:CLRCSETBDQNOPNOPCLRDQNOPNOPNOPSETBDQMOVR,#DJNZR,$MOVC,DQMOVR,#DJNZR,$RRCADJNZR,REMOVR,ADECRDJNZR,RERET将从DSB中读出的温度数据进行转换TEMPERCOV:MOVA,#FHANLA,TEMPERL舍去温度低位中小数点后的四位温度数值SWAPAMOVTEMPERNUM,AMOVA,TEMPERLJNBACC,TEMPERCOV四舍五入去温度值INCTEMPERNUMTEMPERCOV:MOVA,TEMPERHANLA,#HSWAPAORLA,TEMPERNUMMOVTEMPERNUM,A保存变换后的温度数据LCALLBINBCDRET将进制的温度数据转换成压缩BCD码BINBCD:MOVDPTR,#TEMPTABMOVA,TEMPERNUMMOVCA,ADPTRMOVTEMPERNUM,ARETTEMPTAB:DBH,H,H,H,H,H,H,HDBH,H,H,H,H,H,H,HDBH,H,H,H,H,H,H,HDBH,H,H,H,H,H,H,HDBH,H,H,H,H,H,H,HDBH,H,H,H,H,H,H,HDBH,H,H,H,H,H,H,HDBH,H,H,H,H,H,H,HDBH,H,H,H,H,H,H,HDBH,H,H,H,H,H,H,HDBH,H,H,H,H,H,H,HDBH,H,H,H,H,H,H,HDBH,H,H,HDSB初始化程序INIT:SETBDQNOPCLRDQMOVR,#HTSR:DJNZR,TSR延时SETBDQMOVR,#HUSHTSR:DJNZR,TSRJNBDQ,TSRLJMPTSR延时TSR:SETBFLAG置标志位,表示DS存在LJMPTSRTSR:CLRFLAG清标志位,表示DS不存在LJMPTSRTSR:MOVR,#BHUSTSR:DJNZR,TSR延时TSR:SETBDQRET重新写DSB暂存存储器设定值RECONFIG:JBFLAG,RECONFIG若DSB存在,转RECONFIGRETRECONFIG:MOVA,#CCH发SKIPROM命令LCALLWRITEMOVA,#EH发写暂存存储器命令LCALLWRITEMOVA,#HTH(报警上限)中写入HLCALLWRITEMOVA,#HTL(报警下限)中写入HLCALLWRITEMOVA,#FH选择位温度分辨率LCALLWRITERET延时子程序DELAY:MOVR,#HMIN:DJNZR,YSRETYS:LCALLYSUSLJMPMINYSUS:MOVR,#HDJNZR,$RETDELAY:MOVR,#HDJNZR,$RET怡情阁电子工作室任风逍遥NS新试验板*LED点阵显示“国”R4行驱动r0列驱动R6每个字个码ORGHajmplooporghmovr,#hLOOP:MOVR,#fehb扫描指针为MOVA,#FFH开机初始化清除画面MOVP,Ap口置高movp,aP口置高MOVH,#H取码指针的初值L:MOVR,#h每个字个码MOVR,#hfehb扫描指针为MOVR,H取码指针存入RL:MOVA,R行扫描取码指针存入AMOVDPTR,#TABLE取数据表代码MOVCA,ADPTRcplalcalldisplay调用行扫描程序INCR行扫描取码指针加取下一个码incamovr,a列扫描指针左移扫描下一个MOVR,#扫描毫秒DELAY:MOVR,#DJNZR,$DJNZR,DELAYDJNZR,L一个字个码是否完成?JMPLOOP返回retdisplay:clrpDA清clrpCLR清clrp时钟清nopmovr,#hmainb:rrcamovp,c串行发送数据nopsetbp时钟置高接收串行数据关毕并口nopclrp时钟清输出并行数据nopdjnzr,mainb串行发送位数据nopmova,ffhmovp,asetbpCLR置高nopclrpCLR清MOVA,R列扫描指针存入AMOVP,A列扫描输出clrpDA清clrpclk时钟清nopnopret*******************************table:dbffh,bdh,h,bdh,dh,fdh,h,ffh国end智能温度传感器DSB的原理与应用赵海兰,赵祥伟DSB是DALLAS公司生产的单线数字温度传感器他具有独特的单线总线接口方式。文章详细的介绍了单线数字温度传感器DSB的测量原理、特性以及在温度测量中的硬件和软件设计具有接口简单、精度高、抗干扰能力强、工作稳定可靠等特点。   关键词:DSB单线制温度传感器单片机   DSB是美国DALLAS半导体公司继DS之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比他能够直接读出被测温度并且可根据实际要求通过简单的编程实现~位的数字值读数方式。可以分别在ms和ms内完成位和位的数字量并且从DSB读出的信息或写入DSB的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线总线本身也可以向所挂接的DSB供电而无需额外电源。因而使用DSB可使系统结构更趋简单可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面较DS有了很大的改进给用户带来了更方便的使用和更令人满意的效果。、DSB简介   ()独特的单线接口方式:DSB与微处理器连接时仅需要一条口线即可实现微处理器与DSB的双向通讯。   ()在使用中不需要任何外围元件。   ()可用数据线供电电压范围:~V。   ()测温范围:~℃。固有测温分辨率为℃。   ()通过编程可实现~位的数字读数方式。   ()用户可自设定非易失性的报警上下限值。   ()支持多点组网功能多个DSB可以并联在惟一的三线上实现多点测温。   ()负压特性电源极性接反时温度计不会因发热而烧毁但不能正常工作。、DSB的内部结构   DSB采用脚PR封装或脚SOIC封装其内部结构框图如图所示。   ()b闪速ROM的结构如下:开始位是产品类型的编号接着是每个器件的惟一的序号共有位最后位是前位的CRC校验码这也是多个DSB可以采用一线进行通信的原因。()非易市失性温度报警触发器TH和TL可通过软件写入用户报警上下限。()高速暂存存储器   DSB温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的ERAM。后者用于存储THTL值。数据先写入RAM经校验后再传给ERAM。而配置寄存器为高速暂存器中的第个字节他的内容用于确定温度值的数字转换分辨率DSB工作时按此寄存器中的分辨率将温度转换为相应精度的数值。该字节各位的定义如下:   低位一直都是TM是测试模式位用于设置DSB在工作模式还是在测试模式。在DSB出厂时该位被设置为用户不要去改动R和R决定温度转换的精度位数即是来设置分辨率如表所示(DSB出厂时被设置为位)。由表可见设定的分辨率越高所需要的温度数据转换时间就越长。因此在实际应用中要在分辨率和转换时间权衡考虑。高速暂存存储器除了配置寄存器外还有其他个字节组成其分配如下所示。其中温度信息(第字节)、TH和TL值第字节、第~字节未用表现为全逻辑第字节读出的是前面所有个字节的CRC码可用来保证通信正确。   当DSB接收到温度转换命令后开始启动转换。转换完成后的温度值就以位带符号扩展的二进制补码形式存储在高速暂存存储器的第字节。单片机可通过单线接口读到该数据读取时低位在前高位在后数据格式以℃LSB形式表示。温度值格式如下:   对应的温度计算:当符号位S=时直接将二进制位转换为十进制当S=时先将补码变换为原码再计算十进制值。表是对应的一部分温度值。DSB完成温度转换后就把测得的温度值与THTL作比较若T>TH或T<TL,则将该器件内的告警标志置位并对主机发出的告警搜索命令作出响应。因此可用多只DSB同时测量温度并进行告警搜索。()CRC的产生 在bROM的最高有效字节中存储有循环冗余校验码(CRC)。主机根据ROM的前位来计算CRC值并和存入DSB中的CRC值做比较以判断主机收到的ROM数据是否正确。、DSB的测温原理DSB的测温原理如图所示图中低温度系数晶振的振荡频率受温度的影响很小[]用于产生固定频率的脉冲信号送给减法计数器高温度系数晶振随温度变化其震荡频率明显改变所产生的信号作为减法计数器的脉冲输入图中还隐含着计数门当计数门打开时DSB就对低温度系数振荡器产生的时钟脉冲后进行计数进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定每次测量前首先将℃所对应的基数分别置入减法计数器和温度寄存器中减法计数器和温度寄存器被预置在℃所对应的一个基数值。减法计数器对低温度系数晶振产生的脉冲信号进行减法计数当减法计数器的预置值减到时温度寄存器的值将加减法计数器的预置将重新被装入减法计数器重新开始对低温度系数晶振产生的脉冲信号进行计数如此循环直到减法计数器计数到时停止温度寄存器值的累加此时温度寄存器中的数值即为所测温度。图中的斜率累加器用于补偿和修正测温过程中的非线性其输出用于修正减法计数器的预置值只要计数门仍未关闭就重复上述过程直至温度寄存器值达到被测温度值这就是DSB的测温原理。另外由于DSB单线通信功能是分时完成的他有严格的时隙概念因此读写时序很重要。系统对DSB的各种操作必须按协议进行。操作协议为:初始化DSB(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。各种操作的时序图与DS相同可参看文献[]。、DSB与单片机的典型接口设计  以MCS单片机为例图中采用寄生电源供电方式P口接单线总线为保证在有效的DSB时钟周期内提供足够的电流可用一个MOSFET管和C的P来完成对总线的上拉[]。当DSB处于写存储器操作和温度AD变换操作时总线上必须有强的上拉上拉开启时间最大为μs。采用寄生电源供电方式是VDD和GND端均接地。由于单线制只有一根线因此发送接收口必须是三态的。主机控制DSB完成温度转换必须经过个步骤:初始化、ROM操作指令、存储器操作指令。假设单片机系统所用的晶振频率为 MHz根据DSB的初始化时序、写时序和读时序分别编写个子程序:INIT为初始化子程序WRITE为写(命令或数据)子程序READ为读数据子程序所有的数据读写均由最低位开始实际在实验中不用这种方式只要在数据线上加一个上拉电阻kΩ,另外个脚分别接电源和地。、DSB的精确延时问题虽然DSB有诸多优点但使用起来并非易事由于采用单总线数据传输方式DSB的数据IO均由同一条线完成。因此对读写的操作时序要求严格。为保证DSB的严格IO时序需要做较精确的延时。在DSB操作中用到的延时有μsμsμsμs等。因这些延时均为μs的整数倍因此可编写一个DELAY(n)函数源码如下: 只要用该函数进行大约μs×N的延时即可。有了比较精确的延时保证就可以对DSB进行读写操作、温度转换及显示等操作。结语我们已成功地将DSB应用于所开发的“LCD显示气温”的控制系统中其测温系统简单测温精度高连接方便占用口线少转换速度快与微处理器的接口简单给硬件设计工作带来了极大的方便能有效地降低成本缩短开发周期。DSB智能温度控制器JNBP,TSR等待DSB回应DJNZR,TSRLJMPTSR延时TSR:SETBFLAG置标志位,表示DS存在CLRP检查到DSB就点亮PLEDLJMPTSRTSR:CLRFLAG清标志位,表示DS不存在CLRPLJMPTSRTSR:MOVR,#TSR:DJNZR,TSR时序要求延时一段时间TSR:SETBPRET读出转换后的温度值GETTEMPER:SETBPLCALLINIT先复位DSBJBFLAG,TSSCLRPRET判断DS是否存在若DSB不存在则返回TSS:CLRPDSB已经被检测到!!!!!!!!!!!!!!!!!!MOVA,#CCH跳过ROM匹配LCALLWRITEMOVA,#H发出温度转换命令LCALLWRITE这里通过调用显示子程序实现延时一段时间,等待AD转换结束,位的话微秒LCALLDISPLAYLCALLINIT准备读温度前先复位MOVA,#CCH跳过ROM匹配LCALLWRITEMOVA,#BEH发出读温度命令LCALLWRITELCALLREAD将读出的温度数据保存到HHCLRPRET写DSB的子程序(有具体的时序要求)WRITE:MOVR,#一共位数据CLRCWR:CLRPMOVR,#DJNZR,$RRCAMOVP,CMOVR,#DJNZR,$SETBPNOPDJNZR,WRSETBPRET读DSB的程序,从DSB中读出两个字节的温度数据READ:MOVR,#将温度高位和低位从DSB中读出MOVR,#H低位存入H(TEMPERL),高位存入H(TEMPERH)RE:MOVR,#数据一共有位RE:CLRCSETBPNOPNOPCLRPNOPNOPNOPSETBPMOVR,#RE:DJNZR,REMOVC,PMOVR,#RE:DJNZR,RERRCADJNZR,REMOVR,ADECRDJNZR,RERET显示子程序display:mova,H将H中的十六进制数转换成进制movb,#进制=进制divabmovbbit,a十位在amovabit,b个位在bmovdptr,#numtab指定查表启始地址movr,#dpl:movr,#显示次dplop:mova,abit取个位数MOVCA,ADPTR查个位数的段代码movp,a送出个位的段代码clrp开个位显示acalldms显示mssetbpmova,bbit取十位数MOVCA,ADPTR查十位数的段代码movp,a送出十位的段代码clrp开十位显示acalldms显示mssetbpdjnzr,dplop次没完循环djnzr,dpl个次没完循环retMS延时(按MHZ算)DMS:MOVR,#DJNZR,$RET实验板上的段数码管~数字的共阴显示代码numtab:DBCFH,H,DH,BH,H,DAH,DEH,H,DFH,DBHend这是上面程序汇编以后获得的编程器烧写文件:DShex    下载烧写文件的方法:将鼠标移到烧写文件的超级键连处点击鼠标的右键选择“目标另存为(A)”保存文件类型中不要选择“文本文件”应该选择“所有文件”这样就能获得*hex文件了。这是关于DSB的读写程序,数据脚P,晶振mhz温度传感器B汇编程序,采用器件默认的位转化,最大转化时间微秒可以将检测到的温度直接显示到ATC开发实验板的两个数码管上显示温度到度,很准确哦~~无需校正!ORGH单片机内存分配申明!TEMPERLEQUH用于保存读出温度的低位TEMPERHEQUH用于保存读出温度的高位FLAGEQUH是否检测到DSB标志位abitequh数码管个位数存放内存位置bbitequh数码管十位数存放内存位置MAIN:LCALLGETTEMPER调用读温度子程序进行温度显示,这里我们考虑用网站提供的两位数码管来显示温度显示范围到度,显示精度为度因为位转化时每一位的精度为度,我们不要求显示小数所以可以抛弃H的低位将H中的低位移入H中的高位,这样获得一个新字节,这个字节就是实际测量获得的温度这个转化温度的方法可是我想出来的哦~~非常简洁无需乘于系数MOVA,HMOVC,H将H中的最低位移入CRRCAMOVC,HRRCAMOVC,HRRCAMOVC,HRRCAMOVH,ALCALLDISPLAY调用数码管显示子程序CPLPAJMPMAIN这是DSB复位初始化子程序INIT:SETBPNOPCLRP主机发出延时微秒的复位低脉冲MOVR,#TSR:MOVR,#DJNZR,$DJNZR,TSRSETBP然后拉高数据线NOPNOPNOPMOVR,#HTSR:JNBP,TSR等待DSB回应DJNZR,TSRLJMPTSR延时TSR:SETBFLAG置标志位,表示DS存在CLRP检查到DSB就点亮PLEDLJMPTSRTSR:CLRFLAG清标志位,表示DS不存在CLRPLJMPTSRTSR:MOVR,#TSR:DJNZR,TSR时序要求延时一段时间TSR:SETBPRET读出转换后的温度值GETTEMPER:SETBPLCALLINIT先复位DSBJBFLAG,TSSCLRPRET判断DS是否存在若DSB不存在则返回TSS:CLRPDSB已经被检测到!!!!!!!!!!!!!!!!!!MOVA,#CCH跳过ROM匹配LCALLWRITEMOVA,#H发出温度转换命令LCALLWRITE这里通过调用显示子程序实现延时一段时间,等待AD转换结束,位的话微秒LCALLDISPLAYLCALLINIT准备读温度前先复位MOVA,#CCH跳过ROM匹配LCALLWRITEMOVA,#BEH发出读温度命令LCALLWRITELCALLREAD将读出的温度数据保存到HHCLRPRET写DSB的子程序(有具体的时序要求)WRITE:MOVR,#一共位数据CLRCWR:CLRPMOVR,#DJNZR,$RRCAMOVP,CMOVR,#DJNZR,$SETBPNOPDJNZR,WRSETBPRET读DSB的程序,从DSB中读出两个字节的温度数据READ:MOVR,#将温度高位和低位从DSB中读出MOVR,#H低位存入H(TEMPERL),高位存入H(TEMPERH)RE:MOVR,#数据一共有位RE:CLRCSETBPNOPNOPCLRPNOPNOPNOPSETBPMOVR,#RE:DJNZR,REMOVC,PMOVR,#RE:DJNZR,RERRCADJNZR,REMOVR,ADECRDJNZR,RERET显示子程序display:mova,H将H中的十六进制数转换成进制movb,#进制=进制divabmovbbit,a十位在amovabit,b个位在bmovdptr,#numtab指定查表启始地址movr,#dpl:movr,#显示次dplop:mova,abit取个位数MOVCA,ADPTR查个位数的段代码movp,a送出个位的段代码clrp开个位显示acalldms显示mssetbpmova,bbit取十位数MOVCA,ADPTR查十位数的段代码movp,a送出十位的段代码clrp开十位显示acalldms显示mssetbpdjnzr,dplop次没完循环djnzr,dpl个次没完循环retMS延时DMS:MOVR,#DJNZR,$RET实验板上的段数码管~数字的共阴显示代码numtab:DBCFH,H,DH,BH,H,DAH,DEH,H,DFH,DBHend温度传感器B汇编程序,采用器件默认的位转化,最大转化时间微秒将温度数据通过串口发送出去波特率本程序专为ATC实验开发板编写适合晶振本程序经过验证,可以显示温度和两位整数温度和两位小数温度数据DOTEQUHZHENGSHUEQUHFLAGEQUH是否检测到DSB的标志位定义温度数据DISEQUH符号DISEQUH十位DISEQUH个位DISEQUH小数点后第一位DISEQUH小数点后第二位WDDATABITP定义DSB的数据脚为P端口ORGH以下为主程序进行CPU中断方式设置CLREA关闭总中断MOVSCON,#H设置成串口方式MOVTMOD,#H波特率发生器T工作在模式上MOVTH,#FH预置初值(按照波特率BPS预置初值)MOVTL,#FH预置初值(按照波特率BPS预置初值)SETBTR启动定时器T以上完成串口通讯初始化设置主程序MAIN:LCALLINIT调用复位DSB子程序MAIN:LCALLGETTEMPER调用读温度子程序LCALLFORMULA通过公式计算,小数点后显示两位LCALLBCDLCALLDISPLAY调用串口显示子程序LCALLDELAY延时秒LCALLDELAY延时秒LCALLDELAY延时秒AJMPMAINDSB复位初始化程序INIT:SETBWDDATANOPCLRWDDATA主机发出延时微秒的复位低脉冲MOVR,#LCALLDELAYSETBWDDATA然后拉高数据线NOPNOPMOVR,#TSR:JNBWDDATA,TSR等待DSB回应DJNZR,TSRLJMPTSR延时TSR:SETBFLAG置标志位,表示DS存在LJMPTSRTSR:CLRFLAG清标志位,表示DS不存在LJMPTSRTSR:MOVR,#BHTSR:DJNZR,TSR复位成功!时序要求延时一段时间TSR:SETBWDDATARET读出转换后的温度值GETTEMPER:SETBWDDATA定时入口LCALLINIT先复位DSBJBFLAG,TSSRET判断DS是否存在若DSB不存在则返回TSS:MOVA,#CCH跳过ROM匹配LCALLWRITEMOVA,#H发出温度转换命令LCALLWRITEMOVR,#等待AD转换结束,位的话微秒LCALLDELAYLCALLINIT准备读温度前先复位MOVA,#CCH跳过ROM匹配LCALLWRITEMOVA,#BEH发出读温度命令LCALLWRITELCALLREAD将读出的九个字节数据保存到HHRET写DSB的子程序(有具体的时序要求)WRITE:MOVR,#一共位数据CLRCWR:CLRWDDATAMOVR,#DJNZR,$RRCAMOVWDDATA,CMOVR,#DJNZR,$SETBWDDATANOPDJNZR,WRSETBWDDATARET读DSB的程序,从DSB中读出九个字节的数据READ:MOVR,#MOVR,#H存入H开始的九个单元RE:MOVR,#RE:CLRCSETBWDDATANOPNOPCLRWDDATANOPNOPNOPSETBWDDATAMOVR,#RE:DJNZR,REMOVC,WDDATAMOVR,#RE:DJNZR,RERRCADJNZR,REMOVR,AINCRDJNZR,RERET温度计算子程序FORMULA:按公式:T实际=(T整数)(M每度M剩余)M每度计算出实际温度整数部分和小数部分分别存于ZHENGSHU单元和DOT单元将H中的低位移入H中的高位得到温度的整数部分并存于ZHENGSHU单元MOVH,HMOVA,HMOVC,HRRCAMOVC,HRRCAMOVC,AHRRCAMOVC,BHRRCAMOVZHENGSHU,A(M每度M剩余)M每度,小数值存于A中MOVA,hSUBBA,hMOVB,#HMULABMOVR,BMOVR,AMOVR,HLCALLDIVMOVA,R再减去实际应用中减去SUBBA,#HMOVDOT,A小数部分存于DOT中MOVA,ZHENGSHUSUBBA,#H整数部分减去来自小数部分的借位MOVZHENGSHU,AMOVC,BHJNCZHENG是否为负数CPLAINCAMOVDIS,#DH零度以下时,第一位显示""号MOVZHENGSHU,AZHENG:MOVDIS,#BH零度以上时,第一位显示""号RET双字节除以单字节子程序DIV:CLRCMOVA,RSUBBA,RJCDVSETBOV商溢出RETDV:MOVR,#求平均值(RR/R-→R)DV:MOVA,RRLCAMOVR,AMOVA,RRLCAMOVR,AMOVF,CCLRCSUBBA,RANLC,FJCDVMOVR,ADV:CPLCMOVA,RRLCAMOVR,ADJNZR,DVMOVA,R四舍五入ADDA,RJCDVSUBBA,RJCDVDV:INCRDV:CLROVRET转换成非压缩的BCD码BCD:MOVA,ZHENGSHUMOVB,#AHDIVABORLA,#B转换成ASCII码MOVDIS,AMOVDIS,BMOVA,DISORLA,#B转换成ASCII码movDIS,AMOVA,DOTMOVB,#AHDIVABORLA,#B转换成ASCII码MOVDIS,AMOVDIS,BMOVA,DISORLA,#B转换成ASCII码movDIS,ARET串口显示数据子程序DISPLAY:CLRTIMOVA,DISMOVSBUF,AJNBTI,$发送给PC,通过串口调试助手显示CLRTIMOVA,DISMOVSBUF,AJNBTI,$发送给PC,通过串口调试助手显示整数第一位CLRTIMOVA,DISMOVSBUF,AJNBTI,$发送给PC,通过串口调试助手显示整数第二位CLRTIMOVA,#EHMOVSBUF,AJNBTI,$发送给PC,通过串口调试助手显示小数点CLRTIMOVA,DISMOVSBUF,AJNBTI,$发送给PC,通过串口调试助手显示小数第一位CLRTIMOVA,DISMOVSBUF,AJNBTI,$发送给PC,通过串口调试助手显示小数第一位CLRTIMOVA,#DH换行MOVSBUF,AJNBTI,$发送给PC,通过串口调试助手显示CLRTIMOVA,#AH换行MOVSBUF,AJNBTI,$发送给PC,通过串口调试助手显示RET延时子程序为保证DSB的严格IO时序需要做较精确的延时在DSB操作中用到的延时有μsμsμsμs因这些延时均为μs的整数倍因此可编写一个DELAY(n)函数DELAY:M晶振LOOP:MOVR,#HLOOP:DJNZR,LOOPDJNZR,LOOPRET毫秒延时子程序占用R、RDELAY:MOVR,#DA:MOVR,#DJNZR,$DJNZR,DARETEND    备注:如果不需要ATC实验开发板中的伏电源变压器价格可以降低元

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/30

数字温度传感器DS18B20的原理与应用

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利