1、目 录1 前 言12 温度控制器的技术参数23 系统设计方案的论证33.1 方案比选33.2 方案说明44 控制系统设计54.1 系统的工作原理54.2 硬件电路设计64.3 系统软件设计165 调试,安装,运行305.1 系统硬件调试305.2 系统软件调试306 小结31毕业论文(设计)原创性声明本人所呈交的毕业论文(设计)是我在导师的指导下进行的研究工作及取得的研究成果。据我所知,除文中已经注明引用的内容外,本论文(设计)不包含其他个人已经发表或撰写过的研究成果。对本论文(设计)的研究做出重要贡献的个人和集体,均已在文中作了明确说明并表示谢意。 作者签名: 日期: 毕业论文(设计)授权使
2、用说明本论文(设计)作者完全了解*学院有关保留、使用毕业论文(设计)的规定,学校有权保留论文(设计)并向相关部门送交论文(设计)的电子版和纸质版。有权将论文(设计)用于非赢利目的的少量复制并允许论文(设计)进入学校图书馆被查阅。学校可以公布论文(设计)的全部或部分内容。保密的论文(设计)在解密后适用本规定。 作者签名: 指导教师签名: 日期: 日期: 注 意 事 项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词 5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致
3、谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。3.附件包括:任务书、开题报告、外文译文、译文原文(复印件)。4.文字、图表要求:1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画3)毕业论文须用A4单面打印,论文50页以上的双面打印4)图表应绘制于无格子的页面上5)软件工程类课题应有程序清单,并提供电子
4、文档5.装订顺序1)设计(论文)2)附件:按照任务书、开题报告、外文译文、译文原文(复印件)次序装订3)其它MCS51单片机机应用于温度控制器摘要: 本文论述了采用单片机控制的智能温度控制器,使用AT89C4051单片机、ADS7844E A/D转换芯片、HT1621B液晶显示驱动芯片及液晶显示器,实现温度的测量、输出控制及显示功能。关键字:单片机、A/D转换,液晶显示及其驱动1 前 言模拟电路温度控制器存在电路复杂、功能简单和调试不方便的问题,随着电子技术的快速发展,超大规模集成电路的技术越来越成熟,制造成本越来越低,单片机在军事、工业、通讯、家用电器、智能仪表等领域的应用越来越广泛,使产品
5、的功能、精度和质量大幅度提高;同时,电路的设计更简单、故障率低、可靠性高、成本低;特别是近几年来Flash技术的发展,使单片机系统的开发周期大大缩短,开发成本大幅降低,使用单片机控制的智能仪表是仪表领域发展的必然趋势。本文论述了采用ATMEL公司的AT89C4051单片机和美国Burr-Brown公司的ADS7844E模-数转换芯片以及HOLTEK公司的HT1621B液晶显示驱动芯片设计的LCD显示智能温度控制器。本系统实现了模拟温度数据采集、模拟量到数字量转换、软件对温度信号进行非线性校正,单片机数据运算及逻辑处理、LCD显示、键盘处理及继电器输出控制功能。本文主要介绍了智能温度控制器的功能
6、和设计的过程。重点说明电路设计、软件设计。第 37 页 共 31 页2 温度控制器的技术参数本系统采用ATMEL公司的AT89C4051单片机和美国Burr-Brown公司的ADS7844E模-数转换芯片以及HOLTEK公司的HT1621B液晶显示驱动芯片设计,实现了模拟温度数据采集、模拟量到数字量转换、单片机数据运算及逻辑处理、LCD显示、键盘处理及继电器输出控制功能,主要技术参数见表1表1 主要技术参数表测量精度:0.5量程0400显示分辨率:0.1采样速度:500毫秒调节算法:开关调节 (ON/OFF) 输入:热电阻:Pt100输出:继电器,常开触点(max.250VAC, 1A)报警:
7、继电器,常开触点(max.250VAC,3A)电源:220VAC 10% ; 50Hz环境:工作温度:0 50,相对湿度85%3 系统设计方案的论证本章主要叙述温度控制器的设计方案。3.1 方案比选随着电子技术的发展,温度控制器的设计方案经历了模拟电路温度控制器、模拟量测量加数字显示、单片机温度控制器的发展过程;在单片机温度控制器的设计方案中,又发展出各种智能型的温度控制器方案,如:高AD转换的精度,PID调节控制输出、PID + 模糊控制等。本次设计着重锻炼自己的动手能力,熟悉单片机的使用,具体提出如下设计方案:方案一:采用8031单片机作为控制核心,以最普通的器件ADC0809作数/模转换
8、,以继电器作为控制输出。此方案简单可行,造价低廉,但由于8031没有片内ROM,需要扩展程序存储器,增加了电路的复杂性,并且由于0809是8位的数/模转换电路,在温度测量范围很小时,测量精度还能满足要求,当测量温度范围稍宽时,测量的精度就不能实际应用的要求。方案二:采用片内带Flash存储器MCS51系列单片机作为控制核心,采用12位数/模转换电路,以继电器作为控制输出。由于采用了12位的ADC转换芯片,转换范围从0到4096,当温度范围要求为0-1000时,每一位表示约为0.25,考虑到ADC转换芯片的转换精度1LSB及运算放大器的误差,测量精度理论上可到0.5,可以满足一般的控制要求。方案
9、三:目前许多单片机生产商推出了自带ADC转换,FLASH存储器、EEPROM的产品,如美国Analog Devices公司AduC812内部带12位的ADC转换,如果采用AduC812单片机作为控制核心,则系统外围电路比较简单且能够达到控制精度要求,但是成本较高。本系统采用方案二,温度控制器所需要的I/O数量不多,程序量不是很大(不考虑PID调节控制输出),为了节省单片机的I/O口,选用12位串行口数/模芯片ADS7844E,单片机使用AT89C4051,片内程序存储器空间为4K,15条I/O。3.2 方案说明系统中设计了一个EEPROM存储器来保存设置参数,目前市面上常用的EEPROM芯片主
10、要有两种接口类型:I2C接口及SPI接口,主要的代表芯片有AT24C02/04/08/16系列和AT25010/020/040系列,由于ADS7844E转换芯片采用的是SPI接口,所以选用AT25010存储器可以节省I/O端口。显示器件常用的有LED数码管显示器件、LCD显示器件。LED数码管显示器件具有亮度大,寿命长等特点,但需要较大的驱动电流;LCD显示器件成本低、功耗小,但需要专用的驱动电路以及亮度低;本方案的显示器件采用6位字符液晶显示器,驱动芯片采用HOTELK公司的HT1621B。4 控制系统设计控制系统设计主要包括系统工作原理、系统硬件设计和系统软件设计。系统软件设计主要包括软件
11、结构、各子程序流程及具体代码设计;下面分别介绍各部分的设计过程4.1 系统的工作原理单片机AT89C4051A/D存储器显示驱动液晶显示器键盘及控制输出图 1 系统功能框图温度测量放大电源电路系统功能框图如图1所示系统的工作原理是:电桥将温度传感器Pt100的温度信号转换为与温度相关的电压信号,经过两级运算放大后进入ADC转换;CPU读取ADC转换结果,经过运算转换为显示的温度字符,控制LCD驱动器来显示温度值,另外,CPU将测量出的温度值与系统设定的温度值相比较,根据不同的控制模式来控制继电器的输出,系统中的按键用来设定系统工作参数,电源电路主要为各电路提供工作电源。系统中需要保存的参数有:
12、设定温度值、回程差值(防止温度到达设定值时输出振荡)、加热或制冷工作模式(0表示加热模式,1表示制冷工作模式)、温度测量范围、温度校正值、温度校正符号等。由于温度测量范围、温度校正值、温度校正符号用于系统调试校正,此参数不能由用户随便修改,所以在修改这些参数前必须先输入一个密码(默认为1234)后系统才显示这些参数,建议用户不要修改此类参数。本系统采用了四个按键,功能分别为:加键、移位键、功能键、保存键。按下功能键可循环显示系统各项参数,通过加键和移位键组合可对各项参数进行修改,按下保存键后,CPU将修改后的参数写到EEPROM中,系统重新上电后CPU将调用EEPROM中的参数(如果不对数据进
13、行保存时,系统重新上电后将调用以前设置的参数)。4.2 硬件电路设计温度控制器电路主要包括:CPU电路、温度信号调理电路、ADC转换电路、液晶显示及驱动电路、电源电路及控制输出电路;4.2.1 CPU电路图2 AT89C4051管脚图CPU电路主要是CPU、数据存储器及晶振电路。CPU采用美国ATMEL公司的MCS51系列单片机AT89C4051,管脚图如图2所示,它具有以下标准功能:4K字节FLASH闪速存储器,128字节内部RAM,15个I/O口,两个16位定时/计数器,5个中断向量(两种优先级),一个全双工串行通信接口,内置一个精密模拟比较器,片内振荡器及时钟电路。AT89C4051的功
14、能框图如图3所示。CPU的端口资源分配见表2:图3 AT89C4051功能框图表2: CPU的端口资源分配表引脚名称功能引脚名称功能P1.0AT25010片选信号P3.0功能键P1.1HT1621B片选信号P3.1加键P1.2ADS7844E片选信号P3.2保存键P1.3HT1621B读控制信号P3.3移位键P1.4HT1621B写控制信号P3.4P1.5串行口时钟P3.5继电器控制输出P1.6串行数据输入P3.6P1.7串行数据输出P3.7看门狗复位注:由于P1.0及P1.1内部不带上拉电阻,使用时在此两脚上需要接上拉电阻,电阻阻值按10K选取数据存储器采用美国ATMEL公司AT25010
15、EEPROM。AT25010通过SPI接口与CPU进行数据交换,端口连接见表1。时钟采用12M晶体振荡器,负载电容按22p选取。4.2.2温度信号调理电路本设计温度传感器采用Pt100,温度信号由电桥电路输出后,经过两级放大后进入ADC转换。1、Pt100传感器介绍Pt100传感器是利用铂电阻的阻值随温度变化而变化、并呈一定函数关系的特性来进行测温,其温度/阻值对应关系为:0t850时,Rt=R0(1+At+Bt2) 式中,A=3.9080210-3;B=-5.8010-7;R0=100。Pt100温度传感器的主要技术参数如下:测量范围:-200+850;热响应时间30s;允通电流5mA。另外
16、,Pt100温度传感器还具有抗振动、稳定性好、准确度高、耐高压等优点。2、电桥采集数据的电路图及原理Pt100电桥电路如图4、图5所示。其中,R10R11R14Rt组成电桥,R10=R11= 10R0, R14=R0。电桥采用TL431组成恒流源供电,为了避免流过Pt100传感器的电流过大使其发热进而导致非线性失真增大,取Im=1mA。R10R14R11Rt-+1mA-+Vo图4 信号调理电路设流过R14的电流为I1,流过Rt的电流为I2,由于恒流源的电流为1mA,所以有:I1+I2 = 1; (1)I1/I2=(10R0+Rt)/11R0 (2)Rt=R0(1+At+Bt2) (3) A=3
17、.9080210-3;B=-5.8010-7;R0=100当温度较低时,I1/I21,所以有:Vi=I2Rt-I1R00.5(Rt-R0) (4)又因为R= Rt-R0 = R0(At+Bt2),所以:Vi0.5*R0(At+Bt2)0.5*R0*A*t =0.195*t (mV) (5)由公式(5)可知,温度较低时,Pt100传感器的线性度良好;当温度较高时,Pt100传感器的线性度变差,此时有Vi= 10R0(At+Bt2)/(22+At+Bt2)(mV) (6)软件校正采用最小二分法分段校正:将整个测量范围按每50为一段,共分为8段,求出每一段的校正函数分别为:(求解方法采用Excel中
18、的SLOPE函数及INTERCEPT函数)050 : T0 = 0.89*T 0.1050100 : T0 = 0.92*T 1.44100150 : T0 = 0.95*T 4.28150200 : T0 = 0.98*T 8.80200250 : T0 = 1.01*T 15.11250300 : T0 = 1.04*T 23.45300350 : T0 = 1.08*T 34.16350400 : T0 = 1.12*T 47.65温度的计算方法:T=ADC转换结果*量程/4096,将T的值代入校正函数中,求出校正后的温度值T0。 图5 信号调理电路3、误差分析(1)Pt100传感器的非
19、线性产生的误差Pt100的温度函数为Rt=R0(1+At+Bt2),由此可见Pt100的阻值与温度的函数不是线性关系,不考虑其它因素带来的误差,由于Pt100传感器的非线性,在0-400的范围内,可产生约12的误差,在实际测量中,用非线性校正程序可以减少由此带来的误差。(2)A/D转换器非线性带来的误差在实际应用中会发现,对同一模拟输入信号Vi,经A/D转换得出的数字量会有1位的跳变,这是由A/D转换器的判断误差造成的。A/D转换器的一位跳变对应的电压值,即为该12位A/D转换器的分辨率0.00122V=1.22mV,将会产生温度误差。(3)A/D转换器参考电压Vref带来的误差在比较转换过程
20、中,Vref的变化会对输出的二进制代码有影响。在模拟输入信号不变的情况下,若Vref变大,会导致输出的二进制代码变小;反之,则变大,从而导致了温度误差。4、注意事项与结论由上面的分析可得,为了提高温度测量的准确性, A/D转换器的5V参考电源要稳定在mV级;在价格允许的情况下,Pt100传感器A/D转换器和运放的线性度要高。同时,利用软件矫正其误差,可以使测得温度的精度在0.5。4.2.3 ADC转换电路本方案的ADC转换采用BurrBrown公司的ADS7844E,它是推出的一种高性能、宽电压、低功耗的12bit串行模数转换器。它有8个模拟输入端,可用软件编程为8通道单端输入A/D转换器或4
21、通道差分输入A/D转换器,其转换率高达200KHz,而线性误差和差分误差最大仅为1LSB。ADS7844在电源电压为2.7V5V之间均能正常工作,最大工作电流为1mA,进入低功耗状态后的耗电仅3A。ADS7844通过串行接口与CPU进行通信,而且接口简单方便。ADS7844E的引脚排列如图6所示,引脚与其它电路的连接见表3。ADS7844E的引脚功能:CH0CH7:模拟输入端,当器件被设置为单端输入时,这些引脚可分别与信号地COM构成通道单端输入A/D转换器;当器件被设置为差分输入时,利用CHCH1、CH2CH3、CH4CH5和CH6CH7可构成4通道差分输入A/D转换器COM:信号地VREF
22、:参考电压输入端,最大值为电源电压CS:片选端,低电平有效,该脚为高电平时,其它数字接口线呈三态DCLK:外部时钟输入端,在时钟作用下,CPU将控制字写入ADS7844E,并将转换结果从中读出DIN:串行数据输入端,在片选有效时,控制字在DCLK上升沿被逐位锁入ADS7844EDOUT:串行数据输出端,在片选有效时,转换结果在DCLK的下降沿开始被逐位从ADS7844E移出BUSY:“忙”信号输出端,在接收到控制字的第一位数据后变低,只有在转换结束且片选有效时,该脚才输出一个高脉冲SHDN:电源关闭端,低电平有效。当SHDN为低电平时,ADS7844E进入低功耗状态VCC,GND:分别为电源端
23、和数字地。图6 ADS7844引脚图表3: ADS7844E引脚连接表序号引脚名称功能与其它电路的连接备注13CH0CH2模拟输入通道温度信号放大输出47CH3CH7模拟输入通道未连接9COM模拟输入公共端模拟地11VREF参考电压端工作电源VCC采用5V的参考电压12、20VCC工作电源工作电源+5V接10uF和0.1uF的退耦电容13、14GND电源地电源地15DOUT串行数据输出CPU P1.616BUSY“忙”信号输出端未连接17DIN串行数据输入CPU P1.718CSADS7844E片选信号CPU P1.219DCLK串行口时钟CPU P1.54.2.4 液晶显示及驱动电路HT16
24、21B是128 点内存映象和多功能的LCD驱动器,HT1621B 的软件配置特性使它适用于多种LCD应用场合,包括LCD模块和显示子系统,用于连接主控制器和HT1621的管脚只有4 或5 条,HT1621 还有一个节电命令用于降低系统功耗。HT1621B的引脚功能及与其它电路的连接见表4:表4: HT1621B的引脚功能及与其它电路的连接表序号引脚名称功能与其它电路的连接备注1CSHt1621B 片选CPU P1.1低电平有效2RD读控制P1.33WR写控制P1.44DATA数据线P1.75Vss电源地电源地6/7OSCI/OSCO时钟未连接使用片内RC振荡器8VLCDLCD电源+5V选用5V
25、LCD9VDD电源+5V10IRQ看门狗输出未连接11、12BZ声音频率输出未连接1316COM0COM3LCD 公共输出口LCD 公共输出口1748SEG0SEG31LCD 段输出口LCD 段输出口只用到其中12位4.2.5 电源电路图5 电源电路4.3 系统软件设计4.3.1 软件结构设计温控器软件主要包括主程序模块、定时器中断处理模块、LCD显示处理模块、ADC转换模块和键盘处理模块。定时器中断处理模块主要产生时间事件,其中200ms事件用于读取键盘的健值,500ms为ADC转换事件。主程序模块循环判断系统是否有事件发生,当发生200ms事件时,调用键盘处理子程序、LCD显示刷新子程序。
26、当发生500ms事件时,调用ADC转换子程序及LCD显示刷新子程序。主要模块调用关系如图6所示LCD显示刷新定时器中断程序读取键值图6 主要模块调用关系图页面处理保存处理移位处理加键处理闪烁处理显示转换写显示数据启动ADC转换读ADC数据求温度平均值温度比较温度校正二进制转换BCD码温度主程序模块键盘处理系统初始化程序ADC转换模块4.3.2 系统程序流程图设计图7 主程序流程图看门狗复位主循环开始判断是否有键盘事件YN上电或复位,程序开始设置堆栈,清内存调用设备初始化子程序开中断NNN清键盘事件标志判断上次键盘事件处理是否完成判断键盘值是否为0键盘处理子程序判断是否有ADC转换事件清ADC转
27、换事件标志ADC处理子程序显示刷新处理子程序1、主程序流程图2、键盘处理流程功能:显示相应页面以及修改系统参数输入:键值输出:修改显示缓冲器数据及系统参数寄存器分配:寄存器组1,各子程序具体分配情况见子程序说明。调用子程序:页面处理子程序(Pagehandle)、加键处程序(Uphandle)、保存数据子程序(Savehandle)、移位处理子程序(Shifthandle)父函数:主程序图8 键盘处理程序流程图压堆栈,设置寄存器组置键盘未处理完标志是否有为功能键YN是否为加键YN是否为保存键YN是否为移位键YN调用页面处理子程序调用加键处理子程序调用移位处理子程序调用保存数据处理子程序恢复堆栈
28、3、ADC转换处理流程功能:启动ADC转换、读取ADC转换结果、进行温度校正、比较、继电器控制输出输入:无输出:温度值显示值、继电器控制输出寄存器分配:寄存器组3,各子程序具体分配情况见子程序说明。调用子程序:启动ADC转换子程序(Start_Adc)、读转换结果程序(ReadADC)、求平均值子程序(Average)、二进制温度转BCD码子程序(Bin_Temp_BCD)、温度校正子程序(TempAdjust)、温度比较子程序(TempCopmare)父函数:主程序图9 ADC转换程序流程图压堆栈,设置寄存器组调用ADC启动子程序延时等待ADC转换结束调用读ADC结果子程序调用二进制温度转换
29、子程序调用求平均值子程序恢复堆栈调用温度校正子程序调用温度比较子程序4、定时器中断处理程序流程功能:产生定时事件输入:无输出:时间事件寄存器分配:寄存器组1。调用子程序:读取键值子程序(Getkeyvalume)、定时器初始化子程序父函数:无YN图10 定时器中断处理子程序流程图判断是否为200ms判断是否为500ms置200ms事件标志置500ms事件标志YYNN恢复堆栈清超时标志,恢复正常显示判断是否为1000ms判断键盘是否超时NYYN压堆栈,设置寄存器组重装定时计数器(调用定时器初始化子程序)ms计数单元加1调用取键值子程序判断是否为100ms键盘事件处理是否完成4.3.3 系统程序设
30、计目前许多公司在生产单片机的同时,都会推出自己的编译系统,并且许多编译系统都会支持C语言、汇编语言或两种语言的混合编程;本系统采用汇编语言编程,使用Keil C51编译。由于程序的篇幅较长,下面主要介绍主程序及二进制温度转换为BCD温度值子程序,其它程序请查阅附录中的程序清单。1、主程序清单ORG 0000H ; 复位入口JMP PROGRAME_STAR ; 程序开始ORG 0003H ; 外部中断0入口RETI ; ORG 000BH ; 定时0中断入口AJMP TIME0_INT ; ORG 0013H ; 外部中断1入口RETI ;ORG 001BH ; 定时1中断入口RETI ; O
31、RG 0023H ; 串口中断入口RETI ; ORG 0060H ; 程序起点PROGRAME_STAR: MOV SP , #STACK ; 设置堆栈 MOV PSW , #(0 SHL 3) ; 使用寄存器组0 MOV R0 , #10H ; 清内存的开始地址 MOV R1 , #50H -1 ; 设置清除内存计数 MOV A , #00H ;MAIN0: MOV R0 , A ; 内存清零 INC R0 ; DJNZ R1 , MAIN0 ; ACALL DEVICE_INIT ; 设备初始化 MOV IE ,#82H ; 开中断MAINLOOP: ACALL WDRESET ; 看门
32、狗复位 MOV A , TIMEEVENT ; 200ms事件标志, 处理键盘事件 ANL A , #EVT_MS200 ; A和#EVT_MS200做与运算,取出200ms事件标志位 JZ MAIN1 ; 200ms事件标志位为0时跳到MAIN1 MOV A , #EVT_MS200 ; CPL A ; ANL TIMEEVENT , A ; 清除200ms事件标志 MOV A , KEYOVER ; 键盘处理完标志 JNZ MAIN3 ; * MOV A , KEY_VALUE ; 取键值 JZ MAIN3 ; 键盘值为0时跳出* ACALL KEYHANDLE ; 处理键盘事件 AJMP
33、 MAIN3 ; *MAIN1: MOV A , TIMEEVENT ; 500ms事件标志 处理ADC转换 ANL A , #EVT_MS500 ; A和#EVT_MS500做与运算,取出500ms事件标志位 JZ MAIN4 ; 500ms事件标志位为0时跳到MAIN4 MOV A , #EVT_MS500 ; CPL A ; ANL TIMEEVENT , A ; 清除500ms事件标志 LCALL ADCCONVERT ; 调用ADC转换子程序MAIN3: ACALL REFESHLCD ; 刷新LCDMAIN4: SETB CSLCD ; LCD控制芯片片选信号拉高 SETB CSA
34、DC ; 置位AD7844E 片选 SETB CSE2ROM ; 置位AT25010 片选 AJMP MAINLOOP ; 主循环2、二进制温度转换为BCD温度值子程序;二进制温度转换为BCD温度值子程序;输出:无;输入:无;寄存器组: 第 3 组; 温度值=ADC转换结果(BIN) * 量程值/4096BIN_TEMP_BCD: MOV PSW , #(3 SHL 3) ; 使用寄存器组3 MOV R6 , RANGE ; 将BCD码量程值转换为二进制数 MOV R7 , RANGE+1 ; LCALL BCDTOBIN ; MOV R0 , #TEMP_VALUE ; 温度转换后的存储地址
35、 MOV R6 , TEMP_BINL ; 取二进制温度低位 MOV R7 , TEMP_BINH ; 取二进制温度高位 LCALL MUL16 ; 调用16进制乘法;以下程序根据第一次转换的结果查表取出校正函数 MOV A , TEMP_VALUE+1 ; 取二进制温度高位 ANL A , #0F0H ; SWAP A ; MOV R6 , A ; MOV A , TEMP_VALUE+2 ; 取二进制温度高位 ANL A , #0F0H ; SWAP A ; MOV R7 , A ; MOV A , TEMP_VALUE+2 ; 取二进制温度高位 ANL A , #0FH ; SWAP A
36、 ; ADD A , R6 ; MOV R6 , A ;R6,R7分别存放二进制温度的低位和高位 LCALL BINTOBCD ; 调用二进制转换为BCD码 MOV A , R5 ; 去掉转换结果的千位 ANL A , #0FH ; TEMP_BCDH 存放结果的百位和十位 SWAP A ; MOV R5 , A ; MOV A , R4 ; ANL A , #0F0H ; SWAP A ; ADD A , R5 ; MOV R6 , A ; MOV R7 , #00H ; LCALL BCDTOBIN ; MOV DPTR , #DIVCODE00 ; 查表地址 MOV A , R4 ; 偏移地址 MOVC A , A+DPTR ; MOV R5 , A ; RL A ; 偏移地址*2 MOV DPTR , #INTERCEPT0 ; 查表地址 MOVC A , A+DPTR ; MOV BINRANGE+1 , A ; 校正值高位 INC DPTR ; MOV A , R5 ; RL A ; MOVC A , A+DPTR ; MOV BINRANGE , A ; 校正值低位 MOV DPTR , #DIVCODE00 ; 查表地址 M