基于STC12C5408单片机数字式温度计的设计资料

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录
摘要----------------------------------------------------------------1 第一章绪论----------------------------------------------------------------2 第二章总体设计方案-------------------------------------------------------3
2.1 数字式温度传感器的设计方案论证-----------------------------------3
2.2 温度传感器方案总体设计框图---------------------------------------3第三章系统整体硬件电路图------------------------------------------------4
3.1 稳压电源电路--------------------------------------------------------4
3.2 单片机电路----------------------------------------------------------5
3.3 显示电路------------------------------------------------------------6
3.4 信号输出电路-------------------------------------------------------6
3.5 红外遥控接收电路---------------------------------------------------7 第四章 DS18B20 温度传感器的工作原理-------------------------------------8
4.1 DS18B20的内部结构-------------------------------------------------8
4.2 DS18B20的测温原理-------------------------------------------------9
4.3 温度数据的处理方法 -----------------------------------------------9第五章数字式温度传感器的程序流程 -------------------------------------11
5.1 主程序设计-----------------------------------------------------11
5.2 读出温度子程序设计-----------------------------------------------11
5.3 温度转换命令程序设计---------------------------------------------11
5.4 计算温度程序设计 -------------------------------------------------12
5.5 显示数据刷新程序设计--------------------------------------------12 第六章调试与性能分析----------------------------------------------------14
结论 --------------------------------------------------------------15 致谢 (16)
参考文献 (17)
附录1 PCB布线图 (18)
附录2元件清单 (19)
附录3单片机汇编源程序清单 (20)
摘要
本论文主要介绍数字式温度传感器。

此温度传感器主要用STC12C5408单片机和DS18B20温度传感器,从硬件和软件两方面介绍了一款简易数字温度传感器的制作过程,并对硬件原理图和程序流程图作了简洁的描述。

单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。

而基于STC12C5408单片机的温度传感器DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。

以上特点使DS18B20非常适用于远距离多点温度检测系统。

数字温度传感器具有读数方便,测温范围广,其输出温度采用数字显示,主要用于对测温比较准确的场所,可以精确到0.1 °C,测量范围-55~125°C.
【关键词】单片机STC12C5408 温度传感器DS18B20
第一章绪论
随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活提供更好的更方便的设施就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。

随着我国经济的持续高速发展,对于煤矿资源的需求不断上升。

这给我国煤矿开采带来了很大的压力,同时也使我国煤矿生产中存在的基础设施落后,安全生产管理薄弱等问题进一步凸显出来。

近年来,我国的煤矿事故发生频繁,造成了巨大的人员伤亡,同时也给我国经济带来了很大的损失,煤矿生产安全已成为我国当前亟待解决的问题。

在煤矿安全问题中,温度是煤矿安全监测的重要指标之一。

而DS18B20具有独特的一线接口,只需要一条口线通信多点能力,简化了分布式温度传感应用无需外部元件可用数据总线供电,电压范围为3.0 V至5.5 V 无需备用电源测量温度范围为-55 ° C至+125 ℃。

华氏相当于是-67 ° F到257华氏度 -10 ° C至+85 ° C范围内精度为±0.5 ° C温度传感器可编程的分辨率为9~12位温度转换为12位数字格式最大值为750毫秒用户可定义的非易失性温度报警设置应用范围包括恒温控制,工业系统,消费电子产品温度计,或任何热敏感系统描述该DS18B20的数字温度计提供9至12位(可编程设备温度读数。

信息被发送到/从DS18B20 通过1线接口,所以中央微处理器与DS18B20只有一个一条口线连接。

为读写以及温度转换可以从数据线本身获得能量,不需要外接电源。

因为每一个DS18B20的包含一个独特的序号,多个ds18b20s可以同时存在于一条总线。

这使得温度传感器放置在许多不同的地方。

它的用途很多,包括空调环境控制,感测建筑物内温设备或机器,并进行过程监测和控制。

文章将具体介绍智能集成温度传感器DS18B20的结构特征及控制方法,并对此传感器、STC12C5408单片机为控制器构成的温度测量装置的工作原理及程序设计作了详细的介绍,该装置适用于煤矿的温度测量。

第二章总体设计方案
本数字温度传感器设计采用美国DALLAS半导体公司继DS1820之后推出的一种改进型智能温度传感器DS18B20作为检测元件,温度范围为-55~125℃,最大分辨率在0.0625℃。

DS18B20可以直接读出温度被测温度值,而且采用三线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点。

2.1 DS18B20的主要特性
(1)适应电压范围更宽,电压范围:3.0~5.5V,寄生电源方式下数据线供电
(2)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯
(3)DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温
(4)DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内
(5)温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃
(6)可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温
(7)在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms 内把温度值转换为数字,速度更快
(8负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。

2.2 方案总体设计框图
温度传感器电路总体设计方框图如图1所示,控制器采用单片机STC12C5408,温度传感器采用DS18B20,用3位LED数码管以串行口传送数据实现温度显示。

第三章 系统整体硬件电路
温度传感器电路设计原理图如图2所示,传感器的完整电路系统由稳压电源电路、传感元件、单片机电路、显示电路、信号输出电路、红外接收电路等部分组成。

3.1 稳压电源电路
传感器设有机内串联稳压电源,由串联稳压集成电路IC4以及
C3、C4、C5、C6、C9、C10等构成。

如图3所示。

串联稳压电源的稳定电压为5V ,为数字逻辑电路和温度传感元件供电。

3.2单片机电路
传感器由IC2及相关外围元件构成单片机系统,完成从数据采集到输出控制的所有处理工作,是整台仪器的中枢。

其中集成电路IC2为复合型电路,内含复位电路、电压监控电路、硬件看门狗电路和电可擦存储电路等。

由于使用了复合型集成电路,降低了整机元
器件数量,提高了可靠性。

如图4所示。

图4 单片机电路
STC12C5408单片机的时钟可以由内部方式和外部方式产生,XTAL1(6脚)和XTAL2
(7脚)即为单片机的两个时钟引脚。

P1、P2口:P1、 P2口作为通用I/O接口,它的每一位都可以编程为通用的I/O接口线。

P3口:P3口是一个多功能口,除可以作为通用I/O接口外,还具有多种控制功能。

为通
用I/O接口时和单片机其他端口一样。

P3口在作为第二功能(控制功能)使用时,它的相
关功能定义如下表所示:
表1 P3口第二功能定义表
STC12C5408单片机内部集成
MAX810专用复位路(外部晶体12M 以下时,可省外部复位电路),故无复位电路。

3.3 显示电路
传感器的显示电路是由三只高亮度共阴极数码管SMG1、SMG2、SMG3和两只发光二极管LED1、LED2及限流电阻组成的。

数码管驱动采用了共阴极动态扫描方式,电路结构简单,逐段笔划限流,亮度均匀。

在数码管的右侧有一只发光二极管,作为工作指示灯,当传感器正常工作时,该发光二极管以1Hz 速率闪烁发光。

在数码管的左侧有一只发光二极管,作为信号输出指示灯,当传感器信号输出端接有正常负载时,该发光二极管以输出信号频率同步发光。

3.4 信号输出电路
传感器信号输出电路由BG1及R3、R4、R5等元件组成。

单片机对采集的数据进行运算处理后,计算出对应输出信号驱动输出电路,输出信号经电路板CT1第2脚联接到航空插座的第3脚上引出机外。

如图5所示。

3.5红外遥控接收电路
红外线接收电路由一体化红外接收译码集成电路IC1和由R8、C7组成的阻容滤波器构成,当该电路收到红外光脉冲后,接收器将光编码信号转换成串行电信号送单片机进行处理,完成各项操作。

第四章 DS18B20温度传感器工作原理
4.1 DS18B20的内部结构
DS18B20的性能特点如下:
●独特的单线接口仅需要一个端口引脚进行通信,多个DS18B20可以并联在惟一的三线上,实现多点组网功能;
●无须外部器件;
●可通过数据线供电,电压范围为3.0~5.5V;
●零待机功耗(即不测量温度时不消耗功率);
●温度以9~12位的数字值读数方式;
●用户可定义报警设置;
●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;
DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构框图如图6所示
64位ROM的位结构如图7 所示。

开始8位是产品类型的编号;接着是每个器件的唯一序号,共有48位;最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用单线进行通信的原因。

非易失性温度报警触发器TH和TL,可通过软件写入用户报警上下限数据。

DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可擦除的E2PROM。

4.2 DS18B20测温原理
如图8所示,DS18B20的测温原理是这样的,图中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶体振荡器随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。

器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。

计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在-55℃所对应的一个基数值。

减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。

其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。

另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。

系统对DS18B20的各种操作按协议进行。

操作协议为:初使化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。

4.3温度数据的计算处理方法
从DS18B20读取出的二进制值必须先转换成十进制值,才能用于字符显示。

DS18B20的转换精度为9~12位可选,为了提高精度采用12位。

在采用12位转换精度时,温度寄存器里的值是以0.625为步进的,即温度值为温度寄存器里的二进制值乘以0.625,就是
实际的十进制温度值。

通过观察表2可以发现,一个十进制值与二进制值间有很明显的关系,就是把二进制的高字节的低半字节和低字节的高半字节组成一个字节。

这个字节的二进制值化为十进制值后,就是温度值百、十、个位置,而剩下的低字节的低半字节化成十进制后,就是温度值的小数部分。

因为小数部分是半字节,所以二进制值的范围是0~F,转换成十进制小数值就是0.625的倍数(0~15倍)。

这样需要4位的数码管显示小数部分。

实际应用不必有这么高的精度,采用一位数码管来显示小数,可以精确到0.1 °C
表2 DS18B20温度与表示值对应表
第五章 数字式温度传感器的程序流程图及程序设计
5.1主程序设计
主程序的主要功能是负责温度的实时显示,读出并处理DS18B20的测量温度值。

温度测量间隔每1s 进行一次。

主程序流程图如图9所示。

5.2 读出温度子程序设计
读出温度子程序的主要功能是读出RAM 中的9字节。

在读出时进行CRC 效验,效验有错时不进行温度数据改写。

读出温度子程序流程图如图10所示。

5.3 温度转换命令子程序设计
温度转换命令子程序主要是发温度转换开始命令。

当采用12位分辨率时,转换时间约为750ms 。

在本程序设计中,采用1s 显示程序延时法等待转换的完成。

温度转换命令子
程序流程图如图11所示。

5.4 计算温度程序设计
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定。

计算温度子程序流程图如图12所示。

5.5 显示数据刷新子程序设计
显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高数据显示为0时,将符号显示位移入下一位。

显示数据刷新子程序流程图如图13所示。

N
第六章调试与性能分析
硬件调试,首先检查电路的焊接是否正确,然后可用通电检测是否显示温度值。

软件调试可以先编写显示程序并进行硬件的正确性检验,然后分别进行主程序、读出温度子程序、温度转换命令子程序、计算温度子程序和显示数据刷新子程序的编程及调试。

由于DS18B20与单片机采用串行数据传送,因此,对DS18B20进行读/写编程时必须严格地保证读/写时序;否则就无法读取测量结果,本程序用单片机汇编语言编写。

软件调试到能显示温度值为止,而且在有温度变化时显示温度能改变,就基本完成。

性能测试可用制作的温度传感器与已有的成品温度计同时进行测量比较。

由于DS18B20的精度很高,所以误差指标可以限制在±0.5°C以内。

另外,-55~+125°C的测温范围使得该温度传感器完全适合一般的应用场合,其低电压供电特性可做成用电池供电的手持电子温度计。

在硬件检测中发现单片机IC2的24脚和数码显示管SMG2的8脚虚焊导致整个电路板不运行,经过反复检查才发现并改正。

焊好后又发现数码管SMG2还是不显示,在老师的指导下发现数码管阴极线路短路。

后来又重新换了一个数码管。

结论
经过几个月的艰苦努力,毕业论文就要告一段落,通过本次设计,令我学到了很多的知识,仿佛又再次经历了一次系统学习。

本次设计使我加深巩固了理论知识,更深刻的意识到理论知识的重要性,了解了具体应用范围和应用方法。

提高了动手和实际解决问题的能力,提高了对问题系统解决的意识。

能够把握毕业论文的核心,而且还提高了自己对资料的查询能力。

也认识到了人际交往在工作学习中的重要性。

在硬件图设计方面:使我领会到了怎么样才能一步一步深入地,拿出初步的设计方案来。

在经过反复的论证,最后拿出一个比较经济,实用的方案来。

在完成这些要求之前,我必须要对该课题要实现的功能有一个比较详细的了解,同时要通过查资料,能够做到对所用元件的功能,适用范围,技术参数等能有一个比较详细的认识。

在软件方面:在完成了硬件图的基础之上,根据其要实现的功能来编制根据要求画出程序框图,然后根据框图来编制程序。

最后,对编好的程序进行调试,直到使得程序达到预定的结果为止,在这编制软件过程中,使我们对课堂上老师讲的有关指令的适用范围,使用的注意点等都有了一个深入的理解。

当我终于完成了所有打字、绘图、排版、校对的任务后整个人都很累,但同时看着电脑荧屏上的毕业设计稿件我的心里是甜的,我觉得这一切都值了。

这次毕业论文的制作过程是我的一次再学习,再提高的过程。

在论文中我充分地运用了大学期间所学到的知识。

致谢
在毕业论文接近末尾之时,作为一名毕业生,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有导师的督促指导,以及一起工作的同学们的支持,想要完成这个设计是难以想象的。

我要衷心的感谢我们的指导老师。

在我整个毕业论文写作过程中,陆老师给了我们很大的帮助和细心的指导,当我们遇到困难和问题时,陆老师总是第一时间帮我们解答,她让我们学会了以前课堂上没有的东西。

从课题的选择到项目的最终完成,陆老师始终给予我耐心的指导和不懈的支持。

陆老师不仅在学业上给我们以精心指导,同时还在思想、生活上给我们以无微不至的关怀,除了敬佩陆老师的专业水平外,她的治学严谨和科学研究的精神也是我永远学习的榜样,并将影响我今后的学习和工作。

感谢我的室友们,从遥远的家来到这个陌生的城市里,是你们和我共同维系着彼此之间兄弟般的感情,维系着寝室那份家的融洽。

五年了,仿佛就在昨天。

五年里,我们没有红过脸,没有吵过嘴,没有发生上大学前所担心的任何不开心的事情。

只是今后大家就难得再聚在一起吃每年元旦那顿饭了吧,没关系,各奔前程,大家珍重。

我们在一起的日子,我会记一辈子的。

最后要感谢的是我的父母,他们不仅培养了我对中国传统文化的浓厚的兴趣,让我在漫长的人生旅途中使心灵有了虔敬的归依,而且也为我能够顺利的完成毕业论文提供了巨大的支持与帮助。

在未来的日子里,我会更加努力的学习和工作,不辜负父母对我的殷殷期望!我一定会好好孝敬和报答他们!
还有许多人,也许他们只是我生命中匆匆的过客,但他们对我的支持和帮助依然在我记忆中留底了深刻的印象。

在此无法一一罗列,但对他们,我始终心怀感激。

参考文献
[1] 楼然苗,李光飞.单片机课程设计指导.第1版.北京:北京航天航空大学出版社,2007
[2] 李广第等编. 单片机基础. 北京:北京航天航空大学出版社,2001
[3] 徐新艳. 单片机原理、应用与实践. 高等教育出版社,2005
[4] 李朝青. 单片机原理及接口技术(简明修订版).北京航空航天大学出版社,1998
[5] 胡辉. 单片机原理及应用设计. 中国水利水电出版社 2005.07
[6] 彭为.单片机典型系统设计实例精讲[M].北京:电子工业出版社,2006.
[7] 杜伟略.单片机及接口技术[M].化学工业出版社,2008.
[8] 张洪润蓝清华.单片机应用技术教程[M].北京:清华大学出版社,1997.
[9] 刘国荣.单片微型计算机技术[M].北京:机械工业出版社,1996.
[10] 张建伟.电子元器件应用[M].电子工业出版社,2009
附录3 单片机汇编源程序清单:
;**********************************常数定义************************** TIMEL EQU 0E0H ;20ms,定时器0时间常数
TIMEH EQU 0B1H
TEMPHEAD EQU 36H
;*********************************工作内存定义*********************** BITST DATE 20H
TIME1SOK BIT BITST.1
TEMPONEOK BIT BITST.1
TEMPL DATE 26H
TEMPH DATE 27H
TEMPHC DATE 28H
TEMPLC DATE 29H
;*******************************引脚定义***************************** TEMPDIN BIT P3.3
;******************************中断向量区**************************** ORG 0000H
LJMP START
ORG 00BH
LJMP T0IT
;*******************************系统初始化***************************
ORG 0000H
START: MOV SP,#60H
CLSMEM: MOV RO,#20H
MOV R1,#60H
CLSMEM1: MOV ﹫RO,#00H
INC R0
DJNZ R1,CLSMEM1
MOV TMOD,#00100001B
MOV TH0,#TIMEL
MOV TL0,#TIMEH
SJMP INIT
INIT: NOP
NOP
SETB ET0
SETB TR0
SETB EA
MOV PSW,#00H
CLR TEMPONEOK
LJNP MAIN
;*******************************************************************
定时器0中断服务程序
;******************************************************************** T0IT PUSH PSW
MOV PSW,#10H
MOV TH0,#TIMEH
MOV TL0,#TIMEH
INC R7
CJNE R7,#32H,T0IT1
MOV R7,#00H
SETB TIME1SOK ;1秒定时到标志
T0IT1: POP PSW
RETI
;********************************************************************
DS18B20操作程序
;******************************************************************** QDAD: LCALL WDRST ;调用DS18B20复位子程序
MOV A,#0CCH;
LCALL W18B20 ;发跳过ROM命令
MOV A,#44H;
LCALL W18B20 ;发启动转换命令
LCALL WDRST;
MOV A,#0CCH ;发跳过ROM命令
LCALL W18B20;
MOV A,#0BEH ;发读存储器命令
LCALL W18B20;
LCALL R18B20 ;温度值低字节
MOV LS0,A;
LCALL R18B20 ;温度值高字节
MOV LS1,A;
RET;
WDRST: SETB P3.3 ;温度传感器DS18B20复位子程序
MOV YSJS0,#5 ;5*134.5486=672.743uS
CLR P3.3 ;输出低电平;
RSTYS: MOV A,YSJS0 ;延时微秒计时器
ADD A,#0FAH;
JNC RSTYS ;延时538~807uS;
SETB P3.3 ;然后拉高数据线;
CLR DNBZ;
MOV YSJS0,#5 ;5*134.5486uS;
VERYS: JB P3.3,NOTWD ;等待DS18B20回应;
SETB DNBZ;
NOTWD: MOV A,YSJS0 ;延时微秒计时器
ADD A,#0FAH;
JNC VERYS ;延时538~807uS
RET;
W1820: NOP ;写DS18B20的子程序(有具体的时序要求)
MOV R2,#8 ;一共8位数据;
WRIT1: CLR EA ;为保证时序正确中断关闭
NOP;
CLR P3.3 ;输出写时隙
MOV R3,#6;
WRYS1: DJNZ R3,WRYS1 ;延时2uS
RRC A;
MOV P3.3, C ;CY→D7→...→D0→CY
MOV R3,#200;
WRYS2: DJNZ R3,WRYS2 ;延时66uS
SETB P3.3;
SETB EA ;中断开放
MOV R3,#6;
WRYS3: DJNZ R3,WRYS3 ;延时2uS
DJNZ R2,WRIT1;
RET ;写8位数据;
R1820: NOP ;读DS18B20的程序(有具体的时序要求) MOV R2,#8 ;一共8位数据;
READ1: CLR EA ; 为保证时序正确中断关闭
NOP;
CLR P3.3 ;输出读时隙
MOV R3,#6;
RDYS1: DJNZ R3,RDYS1 ;延时2uS
SETB P3.3;
MOV R3,#30 ;延时10uS
RDYS2: DJNZ R3,RDYS2;
MOV C,P3.3 ; CY→D7→...→D0→CY
RRC A;
MOV R3,#180 ;延时60uS
RDYS3: DJNZ R3,RDYS3;
SETB EA ;中断开放
SETB P3.3;
DJNZ R2,READ1 ; 读8位数据
RET;
;****************************处理温度BCD码子程序******************** CONVTEMP: MOV A,TEMPH
ANL A,#80H
JZ TEMPC1
CLR C
MOV A,TEMPL
CPL A
ADD A,#01H
MOV TEMPL,A
MOV A,TEMPL ;“-”
CPL A
ADDC A,#00H
MOV TEMPH,A ;TEMPHC HI=符号位
MOV TEMPHC,#0BH
SJMP TEMPC11
TEMPC1: MOV TEMPHC,#0AH ;“+”
TEMPC11: MOV A,TEMPHC
SWAP A
MOV TEMPHC,A
MOV A,TEMPL
ANL A,#0FH ;乘以0.0625
MOV DPTR,#TEMPDOTTAB
MOVC A,@ A + DPTR
MOV TEMPLC,A ;TEMPLC LOW=小数部分BCD
MOV A,TEMPL ;整数部分
ANL A,#0F0H
SWAP A
MOV TEMPL,A
MOV A,TEMPH
ANL A,#0FH
SWAP A,
ORL A,TEMPL
LCALL HEX2BCD1
MOV TEMPL,A
ANL A,#0F0H
SWAP A
ORL A,TEMPHC ;TEMPLC=个位数BCD
MOV TEMPHC,A
MOV A,TEMPL
ANL A,#OFH
SWAP A ;TEMPLC HI=个位数BCD
ORL A,TEMPHC
MOV TEMPHC,A
MOV A,R7
JZ TEMPC12
ANL A,#0FH
SWAP A
MOV R7,A
MOV A,TEMPHC ;TEMPHC HI=百位数BCD
ANL A,#0FH
ORL A,R7
MOV TEMPHC,A
TEMPC12: RET
;******************************************************************** 定时器0中断服务程序(124*1.085069uS时标兼红外接收、显示刷新) ;******************************************************************** T0INT: PUSH PSW ;124*1.085069uS=134.5486uS
PUSH ACC ;保护现场;
DJNZ YSJS0,SBJS ;延时微秒计时器
MOV YSJS0,#8 ;1076.3888uS
DEC YSJS1 ;延时毫秒计时;
SBJS: DJNZ TIME0,HWCL ;微秒计时器
MOV TIME0,#29 ;29*124=3596;
ORL P1,#0DBH ;关显示(显示刷新速率64Hz)
JB MXBZ,HMJS ;灭显转;
INC SXZZ ;数码管显示刷新指针
MOV A,SXZZ;
SM1QD: CJNE A,#0,SM2QD ;判断数码管1驱动
MOV P2,SMG1;
MOV A,XSTZ ;显示特征控制器(消隐,扩展码)
JB ACC.7,HMJS;
ANL P1,#0FCH ;数码管1驱动
LJMP HMJS ;退出;
SM2QD: CJNE A,#1,SM3QD ;判断数码管2驱动
MOV P2,SMG2;
MOV A,XSTZ ;显示特征控制器(消隐,扩展码)
JB ACC.5, HMJS;
ANL P1,#0E7H ;数码管2驱动
LJMP HMJS;退出;
SM3QD: CJNE A,#2,ADZQ ;判断数码管3驱动
MOV P2,SMG3;
MOV A,XSTZ ;显示特征控制器(消隐,扩展码)
JB ACC.3,HMJS;
ANL P1,#3FH ;数码管3驱动
LJMP HMJS;退出;
ADZQ: MOV SXZZ,#0FFH ;数码管显示刷新指针
MOV A,ADCN ;模数转换控制器
JB ACC.4,HMJS ;结果未利用
ORL ADCN,#08H ;启动转换;
HMJS: DJNZ TIME1,HWCL ;毫秒计时器(256*3596*1.085069=0.9988秒)
INC TIME2 ;秒计时器
SETB ADON ;模数转换启动标志(1=启动);
HWCL: MOV A,HWJS ;红外脉宽计数器值
XRL A,#0FFH;
JZ QT0 ;达最大值结束计数
INC HWJS ;脉宽计数值;
QT0: POP ACC ;恢复现场
POP PSW;
RETI;
;********************************************************************。

相关文档
最新文档