MCS51单片机机应用于温度控制器毕业论文_第1页
MCS51单片机机应用于温度控制器毕业论文_第2页
MCS51单片机机应用于温度控制器毕业论文_第3页
MCS51单片机机应用于温度控制器毕业论文_第4页
MCS51单片机机应用于温度控制器毕业论文_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目 录1 前言12 温度控制器的技术参数23 系统设计方案的论证33.1 方案比选33.2 方案说明44 控制系统设计54.1 系统的工作原理54.2 硬件电路设计64.3 系统软件设计165 调试,安装,运行305.1 系统硬件调试305.2 系统软件调试306 小结3132 / 33MCS51单片机机应用于温度控制器摘要: 本文论述了采用单片机控制的智能温度控制器,使用AT89C4051单片机、ADS7844E A/D转换芯片、HT1621B液晶显示驱动芯片与液晶显示器,实现温度的测量、输出控制与显示功能。关键字:单片机、A/D转换,液晶显示与其驱动1 前 言模拟电路温度控制器存在电路复杂

2、、功能简单和调试不方便的问题,随着电子技术的快速发展,超大规模集成电路的技术越来越成熟,制造成本越来越低,单片机在军事、工业、通讯、家用电器、智能仪表等领域的应用越来越广泛,使产品的功能、精度和质量大幅度提高;同时,电路的设计更简单、故障率低、可靠性高、成本低;特别是近几年来Flash技术的发展,使单片机系统的开发周期大大缩短,开发成本大幅降低,使用单片机控制的智能仪表是仪表领域发展的必然趋势。本文论述了采用ATMEL公司的AT89C4051单片机和美国Burr-Brown公司的ADS7844E模-数转换芯片以与HOLTEK公司的HT1621B液晶显示驱动芯片设计的LCD显示智能温度控制器。本

3、系统实现了模拟温度数据采集、模拟量到数字量转换、软件对温度信号进行非线性校正,单片机数据运算与逻辑处理、LCD显示、键盘处理与继电器输出控制功能。本文主要介绍了智能温度控制器的功能和设计的过程。重点说明电路设计、软件设计。2 温度控制器的技术参数本系统采用ATMEL公司的AT89C4051单片机和美国Burr-Brown公司的ADS7844E模-数转换芯片以与HOLTEK公司的HT1621B液晶显示驱动芯片设计,实现了模拟温度数据采集、模拟量到数字量转换、单片机数据运算与逻辑处理、LCD显示、键盘处理与继电器输出控制功能,主要技术参数见表1表1 主要技术参数表测量精度:0.5量程0400显示分

4、辨率:0.1采样速度:500毫秒调节算法:开关调节 (ON/OFF) 输入:热电阻:Pt100输出:继电器,常开触点(max.250VAC, 1A)报警:继电器,常开触点(max.250VAC,3A)电源:220VAC10% ; 50Hz环境:工作温度:0 50,相对湿度85%3 系统设计方案的论证本章主要叙述温度控制器的设计方案。3.1 方案比选随着电子技术的发展,温度控制器的设计方案经历了模拟电路温度控制器、模拟量测量加数字显示、单片机温度控制器的发展过程;在单片机温度控制器的设计方案中,又发展出各种智能型的温度控制器方案,如:高AD转换的精度,PID调节控制输出、PID + 模糊控制等。

5、本次设计着重锻炼自己的动手能力,熟悉单片机的使用,具体提出如下设计方案:方案一:采用8031单片机作为控制核心,以最普通的器件ADC0809作数/模转换,以继电器作为控制输出。此方案简单可行,造价低廉,但由于8031没有片ROM,需要扩展程序存储器,增加了电路的复杂性,并且由于0809是8位的数/模转换电路,在温度测量围很小时,测量精度还能满足要求,当测量温度围稍宽时,测量的精度就不能实际应用的要求。方案二:采用片带Flash存储器MCS51系列单片机作为控制核心,采用12位数/模转换电路,以继电器作为控制输出。由于采用了12位的ADC转换芯片,转换围从0到4096,当温度围要求为0-1000

6、时,每一位表示约为0.25,考虑到ADC转换芯片的转换精度1LSB与运算放大器的误差,测量精度理论上可到0.5,可以满足一般的控制要求。方案三:目前许多单片机生产商推出了自带ADC转换,FLASH存储器、EEPROM的产品,如美国Analog Devices公司AduC812部带12位的ADC转换,如果采用AduC812单片机作为控制核心,则系统外围电路比较简单且能够达到控制精度要求,但是成本较高。本系统采用方案二,温度控制器所需要的I/O数量不多,程序量不是很大(不考虑PID调节控制输出),为了节省单片机的I/O口,选用12位串行口数/模芯片ADS7844E,单片机使用AT89C4051,片

7、程序存储器空间为4K,15条I/O。3.2 方案说明系统中设计了一个EEPROM存储器来保存设置参数,目前市面上常用的EEPROM芯片主要有两种接口类型:I2C接口与SPI接口,主要的代表芯片有AT24C02/04/08/16系列和AT25010/020/040系列,由于ADS7844E转换芯片采用的是SPI接口,所以选用AT25010存储器可以节省I/O端口。显示器件常用的有LED数码管显示器件、LCD显示器件。LED数码管显示器件具有亮度大,寿命长等特点,但需要较大的驱动电流;LCD显示器件成本低、功耗小,但需要专用的驱动电路以与亮度低;本方案的显示器件采用6位字符液晶显示器,驱动芯片采用

8、HOTELK公司的HT1621B。4 控制系统设计控制系统设计主要包括系统工作原理、系统硬件设计和系统软件设计。系统软件设计主要包括软件结构、各子程序流程与具体代码设计;下面分别介绍各部分的设计过程4.1 系统的工作原理单片机AT89C4051A/D存储器显示驱动液晶显示器键盘与控制输出图 1 系统功能框图温度测量放大电源电路系统功能框图如图1所示系统的工作原理是:电桥将温度传感器Pt100的温度信号转换为与温度相关的电压信号,经过两级运算放大后进入ADC转换;CPU读取ADC转换结果,经过运算转换为显示的温度字符,控制LCD驱动器来显示温度值,另外,CPU将测量出的温度值与系统设定的温度值相

9、比较,根据不同的控制模式来控制继电器的输出,系统中的按键用来设定系统工作参数,电源电路主要为各电路提供工作电源。系统中需要保存的参数有:设定温度值、回程差值(防止温度到达设定值时输出振荡)、加热或制冷工作模式(0表示加热模式,1表示制冷工作模式)、温度测量围、温度校正值、温度校正符号等。由于温度测量围、温度校正值、温度校正符号用于系统调试校正,此参数不能由用户随便修改,所以在修改这些参数前必须先输入一个密码(默认为1234)后系统才显示这些参数,建议用户不要修改此类参数。本系统采用了四个按键,功能分别为:加键、移位键、功能键、保存键。按下功能键可循环显示系统各项参数,通过加键和移位键组合可对各

10、项参数进行修改,按下保存键后,CPU将修改后的参数写到EEPROM中,系统重新上电后CPU将调用EEPROM中的参数(如果不对数据进行保存时,系统重新上电后将调用以前设置的参数)。4.2 硬件电路设计温度控制器电路主要包括:CPU电路、温度信号调理电路、ADC转换电路、液晶显示与驱动电路、电源电路与控制输出电路;4.2.1CPU电路图2 AT89C4051管脚图CPU电路主要是CPU、数据存储器与晶振电路。CPU采用美国ATMEL公司的MCS51系列单片机AT89C4051,管脚图如图2所示,它具有以下标准功能:4K字节FLASH闪速存储器,128字节部RAM,15个I/O口,两个16位定时/

11、计数器,5个中断向量(两种优先级),一个全双工串行通信接口,置一个精密模拟比较器,片振荡器与时钟电路。AT89C4051的功能框图如图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

12、.1部不带上拉电阻,使用时在此两脚上需要接上拉电阻,电阻阻值按10K选取数据存储器采用美国ATMEL公司AT25010 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;

13、R0=100。Pt100温度传感器的主要技术参数如下:测量围:-200+850;热响应时间30s;允通电流5mA。另外,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

14、+I2 = 1; (1)I1/I2=(10R0+Rt)/11R0 (2)Rt=R0(1+At+Bt2) (3) A=3.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)软件校正采

15、用最小二分法分段校正:将整个测量围按每50为一段,共分为8段,求出每一段的校正函数分别为:(求解方法采用Excel中的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转换结果*量程/

16、4096,将T的值代入校正函数中,求出校正后的温度值T0。 图5 信号调理电路3、误差分析(1)Pt100传感器的非线性产生的误差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转换器的分

17、辨率0.00122V=1.22mV,将会产生温度误差。(3)A/D转换器参考电压Vref带来的误差在比较转换过程中,Vref的变化会对输出的二进制代码有影响。在模拟输入信号不变的情况下,若Vref变大,会导致输出的二进制代码变小;反之,则变大,从而导致了温度误差。4、注意事项与结论由上面的分析可得,为了提高温度测量的准确性, A/D转换器的5V参考电源要稳定在mV级;在价格允许的情况下,Pt100传感器A/D转换器和运放的线性度要高。同时,利用软件矫正其误差,可以使测得温度的精度在0.5。4.2.3 ADC转换电路本方案的ADC转换采用BurrBrown公司的ADS7844E,它是推出的一种高

18、性能、宽电压、低功耗的12bit串行模数转换器。它有8个模拟输入端,可用软件编程为8通道单端输入A/D转换器或4通道差分输入A/D转换器,其转换率高达200KHz,而线性误差和差分误差最大仅为1LSB。ADS7844在电源电压为2.7V5V之间均能正常工作,最大工作电流为1mA,进入低功耗状态后的耗电仅3A。ADS7844通过串行接口与CPU进行通信,而且接口简单方便。ADS7844E的引脚排列如图6所示,引脚与其它电路的连接见表3。ADS7844E的引脚功能:CH0CH7:模拟输入端,当器件被设置为单端输入时,这些引脚可分别与信号地COM构成通道单端输入A/D转换器;当器件被设置为差分输入时

19、,利用CHCH1、CH2CH3、CH4CH5和CH6CH7可构成4通道差分输入A/D转换器COM:信号地VREF:参考电压输入端,最大值为电源电压CS:片选端,低电平有效,该脚为高电平时,其它数字接口线呈三态DCLK:外部时钟输入端,在时钟作用下,CPU将控制字写入ADS7844E,并将转换结果从中读出DIN:串行数据输入端,在片选有效时,控制字在DCLK上升沿被逐位锁入ADS7844EDOUT:串行数据输出端,在片选有效时,转换结果在DCLK的下降沿开始被逐位从ADS7844E移出BUSY:“忙”信号输出端,在接收到控制字的第一位数据后变低,只有在转换结束且片选有效时,该脚才输出一个高脉冲S

20、HDN:电源关闭端,低电平有效。当SHDN为低电平时,ADS7844E进入低功耗状态VCC,GND:分别为电源端和数字地。图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.718CSAD

21、S7844E片选信号CPU P1.219DCLK串行口时钟CPU P1.54.2.4液晶显示与驱动电路HT1621B是128 点存映象和多功能的LCD驱动器,HT1621B的软件配置特性使它适用于多种LCD应用场合,包括LCD模块和显示子系统,用于连接主控制器和HT1621的管脚只有4 或5 条,HT1621 还有一个节电命令用于降低系统功耗。HT1621B的引脚功能与与其它电路的连接见表4:表4: HT1621B的引脚功能与与其它电路的连接表序号引脚名称功能与其它电路的连接备注1CSHt1621B 片选CPU P1.1低电平有效2RD读控制P1.33WR写控制P1.44DATA数据线P1.7

22、5Vss电源地电源地6/7OSCI/OSCO时钟未连接使用片RC振荡器8VLCDLCD电源+5V选用5VLCD9VDD电源+5V10IRQ看门狗输出未连接11、12BZ声音频率输出未连接1316COM0COM3LCD 公共输出口LCD 公共输出口1748SEG0SEG31LCD 段输出口LCD 段输出口只用到其中12位4.2.5 电源电路图5 电源电路4.3 系统软件设计4.3.1 软件结构设计温控器软件主要包括主程序模块、定时器中断处理模块、LCD显示处理模块、ADC转换模块和键盘处理模块。定时器中断处理模块主要产生时间事件,其中200ms事件用于读取键盘的健值,500ms为ADC转换事件。

23、主程序模块循环判断系统是否有事件发生,当发生200ms事件时,调用键盘处理子程序、LCD显示刷新子程序。当发生500ms事件时,调用ADC转换子程序与LCD显示刷新子程序。主要模块调用关系如图6所示LCD显示刷新定时器中断程序读取键值图6 主要模块调用关系图页面处理保存处理移位处理加键处理闪烁处理显示转换写显示数据启动ADC转换读ADC数据求温度平均值温度比较温度校正二进制转换BCD码温度主程序模块键盘处理系统初始化程序ADC转换模块4.3.2 系统程序流程图设计图7 主程序流程图看门狗复位主循环开始判断是否有键盘事件YN上电或复位,程序开始设置堆栈,清内存调用设备初始化子程序开中断NNN清键

24、盘事件标志判断上次键盘事件处理是否完成判断键盘值是否为0键盘处理子程序判断是否有ADC转换事件清ADC转换事件标志ADC处理子程序显示刷新处理子程序1、主程序流程图2、键盘处理流程功能:显示相应页面以与修改系统参数输入:键值输出:修改显示缓冲器数据与系统参数寄存器分配:寄存器组1,各子程序具体分配情况见子程序说明。调用子程序:页面处理子程序(Pagehandle)、加键处程序(Uphandle)、保存数据子程序(Savehandle)、移位处理子程序(Shifthandle)父函数:主程序图8 键盘处理程序流程图压堆栈,设置寄存器组置键盘未处理完标志是否有为功能键YN是否为加键YN是否为保存键

25、YN是否为移位键YN调用页面处理子程序调用加键处理子程序调用移位处理子程序调用保存数据处理子程序恢复堆栈3、ADC转换处理流程功能:启动ADC转换、读取ADC转换结果、进行温度校正、比较、继电器控制输出输入:无输出:温度值显示值、继电器控制输出寄存器分配:寄存器组3,各子程序具体分配情况见子程序说明。调用子程序:启动ADC转换子程序(Start_Adc)、读转换结果程序(ReadADC)、求平均值子程序(Average)、二进制温度转BCD码子程序(Bin_Temp_BCD)、温度校正子程序(TempAdjust)、温度比较子程序(TempCopmare)父函数:主程序图9 ADC转换程序流程

26、图压堆栈,设置寄存器组调用ADC启动子程序延时等待ADC转换结束调用读ADC结果子程序调用二进制温度转换子程序调用求平均值子程序恢复堆栈调用温度校正子程序调用温度比较子程序4、定时器中断处理程序流程功能:产生定时事件输入:无输出:时间事件寄存器分配:寄存器组1。调用子程序:读取键值子程序(Getkeyvalume)、定时器初始化子程序父函数:无YN图10 定时器中断处理子程序流程图判断是否为200ms判断是否为500ms置200ms事件标志置500ms事件标志YYNN恢复堆栈清超时标志,恢复正常显示判断是否为1000ms判断键盘是否超时NYYN压堆栈,设置寄存器组重装定时计数器(调用定时器初始

27、化子程序)ms计数单元加1调用取键值子程序判断是否为100ms键盘事件处理是否完成4.3.3 系统程序设计目前许多公司在生产单片机的同时,都会推出自己的编译系统,并且许多编译系统都会支持C语言、汇编语言或两种语言的混合编程;本系统采用汇编语言编程,使用Keil C51编译。由于程序的篇幅较长,下面主要介绍主程序与二进制温度转换为BCD温度值子程序,其它程序请查阅附录中的程序清单。1、主程序清单ORG 0000H ; 复位入口JMP PROGRAME_STAR ; 程序开始ORG 0003H ; 外部中断0入口RETI ;ORG 000BH ; 定时0中断入口AJMP TIME0_INT ; O

28、RG 0013H ; 外部中断1入口RETI ;ORG 001BH ; 定时1中断入口RETI ; ORG 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 ; 设备初始

29、化 MOV IE ,#82H ; 开中断MAINLOOP: ACALL WDRESET ; 看门狗复位 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

30、 MAIN3 ; 键盘值为0时跳出* ACALL KEYHANDLE ; 处理键盘事件 AJMP 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 ;

31、 刷新LCDMAIN4: SETB CSLCD ; LCD控制芯片片选信号拉高 SETB CSADC ; 置位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 ; LC

32、ALL BCDTOBIN ; MOV R0 , #TEMP_VALUE ; 温度转换后的存储地址 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

33、 , TEMP_VALUE+2 ; 取二进制温度高位 ANL A , #0FH ; SWAP A ; 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 BCDTOB

34、IN ; 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 ; 查表地址 MOV A , R4 ; 偏移地址 MOVC A

35、, A+DPTR ; MOV DPTR , #SLOPECODE ; 查表地址 MOVC A , A+DPTR ; 斜率值 ;以下是将(ADC转换结果(BIN) * 量程值 ) *斜率 MOV R4 , A ; MOV B , TEMP_VALUE ; MUL AB ; TEMP_VALUE*斜率 MOV TEMP_VALUE , A ; MOV R3 , B ; R3 乘积的高位暂存 CLR C ; MOV A , R4 ; MOV B , TEMP_VALUE+1 ; MUL AB ; (TEMP_VALUE+1)*斜率 ADD A , R3 ; MOV TEMP_VALUE+1 , A

36、; MOV A , B ; ADDC A , #00H ; MOV R3 , A ; CLR C ; MOV A , R4 ; MOV B , TEMP_VALUE+2 ; MUL AB ; (TEMP_VALUE+2)*斜率 ADD A , R3 ; MOV TEMP_VALUE+2 , A ; MOV A , B ; ADDC A , #00H ; MOV R3 , A ; CLR C ; MOV A , R4 ; MOV B , TEMP_VALUE+3 ; MUL AB ; (TEMP_VALUE+3)*斜率 ADD A , R3 ; MOV TEMP_VALUE+3 , A ; MO

37、V A , B ; ADDC A , #00H ; MOV R3 , A ; 进位标志 ACALL DIV4096 ; MOV R6 , TEMP_VALUE+2 ; 取二进制温度低位 MOV R7 , TEMP_VALUE+3 ; 取二进制温度高位 LCALL BINTOBCD ; 调用二进制转换为BCD码 MOV A , R3 ; MOV R0 , A ;MOV A , R5 ; MOV R7 , A ;MOV A , R4 ; MOV R6 , A ; MOV R5 , BINRANGE+1 ; MOV R4 , BINRANGE ; ACALL BCDSUBB ; BCD减截距 CLR

38、 C ; MOV A , R0 ; SUBB A , R3 ; MOV R3 , A ; CLR C ; 清标志 MOV A , R6 ; ANL A , #0FH ; CJNE A , #05H , BIN_TEMP_BCD0 ; 四舍五入 BIN_TEMP_BCD0: ;小数点后第二位大于或等于5时需要进行位 JC BIN_TEMP_BCD1 ; MOV A , R6 ; ADD A , #10H ; DA A ; MOV R6 , A ; MOV A , R7 ; ADDC A , #00H ; DA A ; MOV R7 , A ; MOV A , R3 ; ADDC A , #00H

39、 ; DA A ; MOV R3 , A ;BIN_TEMP_BCD1: ;小数点后第二位小于4时需要舍掉 MOV A , R6 ; ANL A , #0F0H ; SWAP A ; MOV TEMP_BCDL , A ; MOV A , R7 ; ANL A , #0FH ; SWAP A ; ADD A , TEMP_BCDL ; MOV TEMP_BCDL , A ; MOV A , R7 ; ANL A , #0F0H ; SWAP A ; MOV TEMP_BCDH , A ; MOV A , R3 ; ANL A , #0FH ; SWAP A ; ADD A , TEMP_BCD

40、H ; MOV TEMP_BCDH , A ; RET DIV4096:;以下程序是将ADC转换值 * 量程 后的结果除4096;由于除4096 实际上就是将数据右移12位;所以乘法结果的高20位就是除4096后的整数部分;乘法结果的低12位就是除4096后的余数部分 ;将余数*10后再除4096即可得到一位小数 MOV TEMP_VALUE+0 , TEMP_VALUE+1 ; MOV TEMP_VALUE+1 , TEMP_VALUE+2 ; MOV TEMP_VALUE+2 , TEMP_VALUE+3 ; MOV A , TEMP_VALUE+2 ; ANL A ,#0FH ; SWAP A ; MOV

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论