《单片机温度报警课程设计温度显示器.doc》由会员分享,可在线阅读,更多相关《单片机温度报警课程设计温度显示器.doc(27页珍藏版)》请在三一办公上搜索。
1、 扬州市职业大学课程设计论文题 目 温度显示器 院 (系) 汽车与电气工程系 专 业 电气自动化 班 级 09电气(2)班 学生姓名 史学和 学 号 0902030226 指导教师 刘卉 2011 年 11 月 目录摘要3第一章 引言41.1设计背景41.2设计任务41.3电路的工作原理4第二章 方案论证及硬件设计52.1方案选择5温度显示器硬件设计62.2最小系统的设计62.2.1电源部分62.2.2时钟电路的设计62.2.3复位电路的设计72.3温度传感器92.3.1 DS18B2092.3.2 DS18B20的主要特性92.3.3 DS18B20工作原理102.3.4 温度格式102.3
2、.4 DS18B20的外部电源供电方式112.4 AT89S51112.4.2管脚说明122.5 数码管132.5.1 LED数码显示器连接方法:132.5.2 方案132.5.3数码管显示方式14第三章 温度显示器系统的软件设计154.1程序流程图154.1.1主程序流程图154.1.2读温流程图154.1.3读出子程序流程图154.2 程序16结束语24参考文献24附录1 元器件清单25附录2 原理图26摘要温度是一个十分重要的物理量,对他的测量与控制有十分重要的意义,随着现代工农业技术的发展及人们对生活环境要求的提高,人们也迫切需要检测与控制温度。本温度显示器的设计与制作,阐明了该装置进
3、行设计与制作的具体过程及方法。这种温度显示器结构简单,可操作性强,应用广泛。工作时,由传感器检测温度,防止因温度升高而带来的不必要的损失。本文介绍的是采用温度传感器DS18B20的温度显示器,自动测量当前环境温度,由单片机AT89S51控制,并通过四位7段数码管显示。关键词:温度显示 单片机(AT89C51) 数字温度传感器(DS18B20)第一章 引言1.1设计背景 温度是一种最基本的环境参数,人民的生活与环境的温度息息相关,随着人们生活水平的不断提高,对生活质量的要求不断提升,自然会更加关注跟人身体健康紧密联系的温度;同时在工业生产过程中经常需要实时测量温度,尤其是在高危生产行业,如花炮生
4、产、煤矿行业等。但依靠人工检测既浪费时间、物力、人力, 又有一定的危险性,且测量的数据也不准确;在农业生产中也离不开温度的测量,各种农作物的生长都跟温度有直接的关系,掌握了温度的变化就可以更好的控制农作物的生长。因此研究温度的测量方法和装置具有重要的意义。1.2设计任务 本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,该设计控制器使用单片机AT89S51,测温传感器使用DS18B20,用4位共阴极LED数码管实现温度显示,能准确达到以上要求。1.3电路的工作原理 这次的温度显示器由温度传感器
5、DS18B20,AT89S51单片机,LED数码管和电源系统组成。其工作的原理是在电源系统供电的情况下由温度传感器DS18B20测量周围温度的变化,并将测的温度传给单片机AT89S51经过单片机AT89S51分析做出判断,同时经过单片机AT89S51将所测得的温度显示在LED显示出来,如果温度在温度传感器的规定的温度范围内,那么蜂鸣器将不会发出报警信号。第二章 方案论证及硬件设计2.1方案选择方案一 采用热敏电阻作为温度传感器用热敏电阻作为温度传感器,NTC热敏电阻阻值随温度的变化符合指数规律,其最大的缺点也在于它的非线性阻值分散性大复现行差,一般需要经过线性化处理,使输出电压与温度之间基本上
6、成线性关系。NTC热敏电阻温度传感器的一致性和互换性较差.其次是他的老化速度较快。方案二 用模拟温度传感器比如普通的热敏电阻。热敏电阻的温度特性曲线是一条指数曲线,非线性度较大,因此在使用时要进行线性化处理,线性化处理虽然能改善热敏电阻的特性曲线,但比较复杂。为此常在要求不高的一般应用中,作出在一定的温度范围内温度与阻值成线性关系的假定,才能简化计算。另外,温度与输出电压量是非线性的,读出的是模拟量,需要A/D转换器进行转换才能送给数码管显示,从而增加了硬件的负担。方案三 采用数字单片智能温度传感器 智能温度传感器(亦称数字温度传感器)是微电子技术、计算机技术和自动测试技术(ATE)的结晶。目
7、前,已开发出多种智能温度传感器系列产品。智能温度传感器内部都包含温度传感器、A/D转换器、信号处理器、存储器(或寄存器)和接口电路。由于DS18B20将温度传感器、信号放大调理、A/D转换、接口全部集成于一芯片,与单片机连接简单、方便,测量范围广,精度高。稳定性好等优点。广泛的运用于温度检测领域从以上三种方案,非常很容易看出,采用方案三,电路比较简单,软件设计也比较简单,故采用了方案三。温度显示器硬件设计2.2最小系统的设计2.2.1电源部分 8051的工作电压为+5V,0.5V, 工作电流200mA其它部分工作电流:总电流:500mA 功耗:2.5W 图2-1电源:桥式整流、滤波(两个滤波电
8、容)、稳压三端稳压器件:7805系列三端稳压器件是最常用的线性降压型DC/DC转换器,目前也有大量先进的DC/DC转换器层出不穷,例如低压差线性稳压器LDO等。7805简单易用,价格低廉,直到今天还在大多电路中采用。2.2.2时钟电路的设计单片机工作的时间基准是由时钟电路提供的。在单片机的XTAL1和XTAL2两个引脚间,接一只晶振及两只电容就构成了单片机的时钟电路,如图2-2所示。电路中的器件选择可以通过计算和实验确定,也可以参考一些典型电路的参数。电路中,电容器C1和C2对振荡器频率有微调作用,通常的取值范围3010pF;石英晶体选择6MHZ或12MHZ都可以。其结果只是机器周期时间不同,
9、影响计数器的计数初值。 图2-28051单片机的时钟产生有以下两种方法:(1)内部时钟方式:利用单片机内部的振荡器,然后在引脚XTAL1(18脚)和XTAL2(19脚)两端接晶振,就构成了稳定的自激振荡器,其发出的脉冲直接送入内部时钟电路,外接晶振时,晶振两端的电容一般选择为30PF左右;这两个电容对频率有微调的作用,晶振的频率范围可在1.2MHz-12MHz之间选择。(2)外部时钟方式:此方式是利用外部振荡脉冲接入XTAL1或XTAL2。HMOS和CHMOS单片机外时钟信号接入方式不同,HMOS型单片机(例如8051)外时钟信号由XTAL2端脚注入后直接送至内部时钟电路,输入端XTAL1应接
10、地。由于XTAL2端的逻辑电平不是TTL的,故建议外接一个上接电阻。 外接时钟信号通过一个二分频的触发器而成为内部时钟信号,要求高、低电平的持续时间都大于20ns,一般为频率低于12MHz的方波。片内时钟发生器就是上述的二分频触发器,它向芯片提供了一个2节拍的时钟信号。 前面已提到,计算机工作时,是在统一的时钟脉冲控制下一拍一拍地进行的。由于指令的字节数不同,取这些指令所需要的时间也就不同,即使是字节数相同的指令,由于执行操作有较大的差别,不同的指令执行时间也不一定相同,即所需的拍节数不同。为了便于对CPU时序进行分析,一般按指令的执行过程规定了几中周期,即时钟周期、机器周期和指令周期,也称为
11、时序定时单位,下面分别予以讲解。时钟周期 时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。对于某种单片机,若采用了1MHZ的时钟频率,则时钟周期为1us;若采用4MHZ的时钟频率,则时钟周期为250us。由于时钟脉冲是计算机的基本工作脉冲,它控制着计算机的工作节奏(使计算机的每一步都统一到它的步调上来)。显然,对同一种机型的计算机,时钟频率越高,计算机的工作速度就越快。但是,由于不同的计算机硬件电路和器件的不完全
12、相同,所以其所需要的时钟周频率范围也不一定相同。2.2.3复位电路的设计复位是单片机的初始化操作,单片机系统在上电启动运行时,都需要先复位。其作用是使CPU和系统中其他部件都处于一个确定的初始状态,并从这个状态开始工作。因而,复位是一个很重要的操作方式。但单片机本身是不能自动进行复位的,必须配合相应的外部复位电路才能实现。单片机的外部复位电路有上电复位和手动复位两种。我们在设计单片机时,选用手动复位。上电复位利用电容器的充电实现。上电要求接通电源后,单片机实现自动复位操作。上电瞬间RST引脚获得高电平,随着电容的充电,RST引脚的高电平将逐渐下降,RST引脚的高电平只要能保持足够的时间(2个机
13、器周期),单片机就可以进行复位操作。手动复位:按键后:电容器被短路放电,RST直接和VCC相连,就是高电平,此时进入“复位状态”。松手后,电源开始对电容充电,此时,充电电源在电阻上,形成高电平送到RST,仍然是“复位状态”;稍后,充电结束,电降将为0,电阻上的电压也将为0,RST降为低电平,开始正常工作。 上电复位 手动复位图2-3手动复位电路中电阻R14的阻值为8.2K另外一电阻阻值为1K,电容大小为10F对于怀疑是复位电路故障而不能正常工作的单片机也可以采用模拟复位的方法来判断,单片机正常工作时第9 脚对地电压为零,可以用导线短时间和5V 连接一下,模拟一下上电复位,如果单片机能正常工作了
14、,说明这个复位电路有问题。2.3温度传感器2.3.1 DS18B20 DALLAS 半导体公司的数字化温度传感器DS18B20是世界上第一片支持 “一线总线”接口的温度传感器。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。 现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量。 DS18B20内部结构主要由四部分组成:64位光刻ROM,温度传感器,非挥发的温度报警触发器TH和TL,高速暂存器。DS18B20的管脚排列如图2-4所示。 图2-4 DS18B20引脚定义: (1)DQ为数字信号输入/输出端; (2
15、)GND为电源地; (3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。 2.3.2 DS18B20的主要特性 (1)适应电压范围更宽,电压范围:3.05.5V,在寄生电源方式下可由数据线供电;(2)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯;(3)DS18B20在使用中不需要任何外围元件,全部 传感元件及转换电路集成在形如一只三极管的集成电路内; (4)温范围55+125,在-10+85时精度为0.5; (5)可编程 的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测
16、温; (6)在9位分辨率时最多在 93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快; (7)测量结果直接输出数字温度信号,以一 线总线串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力; (8)负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。 2.3.3 DS18B20工作原理 DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s 减为750ms。低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度
17、变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。 2.3.4 温度格式 这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0, 这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;
18、如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。 例如+125的数字输出为07D0H,+25.0625的数字输出为0191H,-25.0625的数字输出为FE6FH,-55的数字输出为FC90H 。 表1: DS18B20温度值格式表 2.3.4 DS18B20的外部电源供电方式 在外部电源供电方式下,DS18B20工作电源由VDD引脚接入,此时I/O线不需要强上拉,不存在电源电流不足的问题,可以保证 转换精度,同时在总线上理论可以挂接任意多个DS18B20传感器,组成多点测温系统。注意:在外部供电的方式下,DS18B20的GND引脚不能悬空 ,否则不能转
19、换温度,读取的温度总是85。 图2-5:外部供电方式单点测温电路 图2-52.4 AT89S51AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。2.4.1主要特性:8031 CPU与MCS-51 兼容 4K字节可编程
20、FLASH存储器(寿命:1000写/擦循环) 全静态工作:0Hz-24KHz 三级程序存储器保密锁定 128*8位内部RAM 32条可编程I/O线 两个16位定时器/计数器6个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内振荡器和时钟电路2.4.2管脚说明 VCC:供电电压GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是
21、一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优
22、势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口 RST:复位输入端,高电平有效。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:地址锁存允许/编程脉冲信号端。当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的
23、低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 PSEN:外部程序存储器的选通信号,低电平有效。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 E
24、A/VPP:外部程序存储器访问允许。当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:片内振荡器反相放大器和时钟发生器的输入端。 XTAL2:片内振荡器反相放大器的输出端。2.5 数码管2.5.1 LED数码显示器连接方法: 共阳极接法:把二极管的阳极连接在一起构成公共阳极,使用时公共阳极接+5V,每个发光二极管的阴极通过电阻与输入端相连。当阴极端输入低电平时,八段发光二极管就
25、导通点亮,而输入高电平时则不点亮。 共阴极接法:把二极管的阴极连接在一起构成公共阴极,使用时公共阴极接+5V,每个发光二极管的阳极通过电阻与输入端相连。当阳极端输入高电平时,八段发光二极管就导通点亮,而输入低电平时则不点亮。(如图示) a) 符号及引脚配置 b)共阴极LED c)共阳极LED2.5.2 方案 这里为了方便导线的连接,电流由外部电源提供,为灌电流,不增加单片机负担,所以本次设计采用四位一体共阳数码管。(如下图)重点:引脚的测量,去实验室找台设备,把电压调在1.5V2.0V之间。电源的正负极分别放在任意一脚上,根据数码管的段亮就可以判断引脚(如下图) 2.5.3数码管显示方式 数码
26、管显示器有两种工作方式,即静态显示方式和动态显示方式。 在静态显示方式下,每位数码管的ag和h端与一个8为的IO相连。特点是:数码管中的发光二极管恒定地导通或截至,直到显示字符改变为止。 静态显示方式程序非常简单,占用CPU时间资源很少,只是在显示字符改变时调用一下显示程序。但是硬件电路繁多,每个数码管需要一个8位IO口、一个8位驱动、8个限流电阻。一般应用于数码管位数少的场合。 相对于静态显示方式而言,动态显示方式线路相对简单,成本低,在单片机系统中常常采用动态扫描显示方式。其工作原理是:逐个地循环点亮各位显示器,也就是说在任一时刻只有一位显示器在显示。 2.5.电阻计算 电阻R9R16:R
27、=(5-0.3-2)0.01=270电阻R4R7:I=80.01100=8mA R=(5-0.7)8=5.3k 图2-6 第三章 温度显示器系统的软件设计4.1程序流程图4.1.1主程序流程图主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值。(如图4-1)4.1.2读温流程图 读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。(如图4-2)4.1.3读出子程序流程图Y发DS18B20复位命令发跳过ROM命令发读取温度命令读取操作,CRC校验9字节完?C图8RC校验正?确?移入温度暂存器结束NNY计算温度子程
28、序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定。(如图4-4)初始化调用显示子程序1S到?初次上电读出温度值温度计算处理显示数据刷新发温度转换开始命令NYNY 图4-1 图4-2 图4-3 图4-4 4.2 程序 ORG 0000H AJMP MAINQ ORG 000BH AJMP TT0 MAINQ:ORG 002FH ;* ;读18B20的温度 ;* TEMPH EQU 50H TEMPL EQU 51H TEMPHC EQU 52H TEMPLC EQU 53H ZJ9 EQU 60H WDCGQ BIT P0.0 ;* ;系统初始化 ;* MOV SP,#2FH M
29、OV TMOD,#21H MOV TH0,#3CH;12MHZ晶振时定时100ms MOV TL0,#0B0H MOV R7,#0AH SETB EA SETB ET0 SETB TR0 CLR F0 CLR 00H ;SETB P2.3 MOV TEMPH,#00H MOV TEMPL,#00H MOV TEMPHC,#00H MOV TEMPLC,#00H ;* ;主程序 ;* START:LCALL DIP JNB 00H,START CLR 00H JNB F0,STA1 LCALL READ LCALL DIP LCALL BCDLC LCALL DIP STA1:LCALL ML
30、SETB F0 LJMP START ;* ;T0中断子程序 ;* TT0:PUSH PSW MOV PSW,#10H MOV TH0,#3CH MOV TL0,#0B0H DJNZ R7,TT0OUT MOV R7,#0AH SETB 00H TT0OUT:POP PSW RETI; ;* ;读1820的转换温度 ;* READ:LCALL RST1820 MOV A,#0CCH ;发跳过1820的ROM命令 LCALL WRIT1820 MOV R6,#1AH ;延时104us DJNZ R6,$ MOV A,#0BEH ;读1820内部RAM中9个字节的内容 LCALL WRIT1820
31、 MOV R6,#1AH DJNZ R6,$ MOV R5,#09H MOV R0,#ZJ9 MOV B,#00H READ1:LCALL READ1820 MOV R0,A INC R0 READ2:LCALL CRC8 ;校验读到的八位数 DJNZ R5,READ1 MOV A,B JNZ READOUT MOV A,ZJ9+0 MOV TEMPL,A MOV A,ZJ9+1 MOV TEMPH,AREADOUT:RET ; ;* ;给1820复位命令(只有收到有效的复位信号才能返回) ;*RST1820:SETB WDCGQ NOP NOP CLR WDCGQ MOV R6,#50H ;
32、延时480us(640us) DJNZ R6,$ MOV R6,#50H DJNZ R6,$ SETB WDCGQ MOV R6,#12H ;延时70us(75us) DJNZ R6,$ MOV R6,#1EH ;在250us内读复位信号 LOOP:MOV C,WDCGQ JC RSTOUT DJNZ R6,LOOP MOV R6,#032H DJNZ R6,$ SJMP RST1820 RET RSTOUT:SETB WDCGQ RET ; ;* ;CPU向1820写一个字节的数据 ;*WRIT1820:MOV R4,#08H SETB WDCGQ NOP ;NOP LOOP1:CLR WD
33、CGQ MOV R6,#03H ;延时15us DJNZ R6,$ ;NOP RRC A MOV WDCGQ,C MOV R6,#1AH ;延时104us DJNZ R6,$ SETB WDCGQ DJNZ R4,LOOP1 RET ; ;* ;CPU从1820中读出一个字节的数据 ;*READ1820:MOV R4,#08H SETB WDCGQ NOP ;NOP LOOP2:CLR WDCGQ ;NOP ;NOP NOP SETB WDCGQ MOV R6,#03H ;延时15us DJNZ R6,$ ;NOP MOV C,WDCGQ MOV R6,#1EH ;延时120us DJNZ R
34、6,$ RRC A SETB WDCGQ DJNZ R4,LOOP2 MOV R6,#1EH ;延时120us DJNZ R6,$ RET ; ;* ;接收的数据校验子程序 ;* CRC8:PUSH ACC MOV R4,#08H LOP1:XRL A,B RRC A MOV A,B JNC LOP2 XRL A,#18H LOP2:RRC A MOV B,A POP ACC RR A PUSH ACC DJNZ R4,LOP1 POP ACC RET; ;* ;给1820发温度转换命令(1820转换一次必须先复位-发R0M命令-发RAM命令) ;* ML:LCALL RST1820 ;给18
35、20复位 MOV A,#0CCH ;给1820发跳过1820的ROM命令 LCALL WRIT1820 MOV R6,#1AH ;延时104us DJNZ R6,$ MOV A,#44H ;给1820的RAM发转换指令 LCALL WRIT1820 MOV R6,#1AH ;延时104us DJNZ R6,$ RET ;*; ;* ;温度数据处理子程序 ;* BCDLC:MOV A,TEMPH ANL A,#80H JZ LP1 ;为正数转LP1 CLR C ;为负数时,将补码转换成原码 MOV A,TEMPL CPL A ADD A,#01H MOV TEMPL,A MOV A,TEMPH
36、CPL A ADDC A,#00H MOV TEMPH,A MOV TEMPHC,#0BH ;符号位为负的标志为0BH SJMP LP2 LP1:MOV TEMPHC,#0AH ;符号位为正的标志为0AH LP2:MOV A,TEMPHC SWAP A MOV TEMPHC,A ; MOV A,TEMPL ANL A,#0FH ;乘0.0625 MOV DPTR,#TAB1 MOVC A,A+DPTR MOV TEMPLC,A ;小数部分的BCD码 ; MOV A,TEMPL ANL A,#0F0H SWAP A MOV TEMPL,A MOV A,TEMPH ANL A,#0FH SWAP A待添加的隐藏文字内容2 ORL A,TEMPL