89C51智能温度测试有图和程序.docx
《89C51智能温度测试有图和程序.docx》由会员分享,可在线阅读,更多相关《89C51智能温度测试有图和程序.docx(33页珍藏版)》请在冰豆网上搜索。
89C51智能温度测试有图和程序
论文摘要
智能温度测试仪应用广泛,在工农业生产和科学研究中经常要用智能数字式温度测试仪进行温度的检测与控制。
近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月异地更新。
同时,随着传感器技术的发展,使得单片机检测系统功能、性能、精度、成本等都有了很好地提高。
本系统就是采用单片机AT89C51芯片和AD590数字温度传感器,驱动电路,LED数码管等多部件组合而成的一个智能数字式温度测试仪.它主要使用AD590数字温度传感器作为原始测温器件,把采集到的数据传送到单片机P0口读取,经单片机采集、处理及译码后通过三极管驱动,推动数码管显示温度值.
一、方案的选择
1方案一
由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。
2方案二
进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。
从以上两种方案,很容易看出,采用方案二,电路比较简单,设计也比较方便。
但是DS18B20测温范围:
-55℃~+125℃,无法满足我们的需求。
所以我们只能选择经常使用的AD590.
二、系统总体方案的设计
三、主要器件内部结构和工作原理
(一)单片机概述
单片机也被称作“单片微型计算机”、“微控制器”、“嵌入式微控制器”。
单片机一词最初是源于“SingleChipMicrocomputer”,简称SCM。
随着SCM在技术上、体系结构上不断扩展其控制功能,单片机已不能用“单片微型计算机”来表达其内涵。
国际上逐渐采用“MCU”(MicroControllerUnit)来代替,形成了单片机界公认的、最终统一的名词。
为了与国际接轨,以后应将中文“单片机”一词和“MCU”唯一对应解释。
在国内因为“单片机”一词已约定俗成,故而可继续沿用。
1、单片机的发展历史
(1).SCM即单片微型计算机(SingleChipMicrocomputer)阶段,主要是寻求最佳的单片形态嵌入式系统的最佳体系结构。
“创新模式”获得成功,奠定了SCM与通用计算机完全不同的发展道路。
在开创嵌入式系统独立发展道路上,Intel公司功不可没。
(2).MCU即微控制器(MicroControllerUnit)阶段,主要的技术发展方向是:
不断扩展满足嵌入式应用时,对象系统要求的各种外围电路与接口电路,突显其对象的智能化控制能力。
它所涉及的领域都与对象系统相关,因此,发展MCU的重任不可避免地落在电气、电子技术厂家。
从这一角度来看,Intel逐渐淡出MCU的发展也有其客观因素。
在发展MCU方面,最著名的厂家当数Philips公司。
Philips公司以其在嵌入式应用方面的巨大优势,将MCS-51从单片微型计算机迅速发展到微控制器。
因此,当我们回顾嵌入式系统发展道路时,不要忘记Intel和Philips的历史功绩。
(3).单片机是嵌入式系统的独立发展之路,向MCU阶段发展的重要因素,就是寻求应用系统在芯片上的最大化解决;因此,专用单片机的发展自然形成了SoC化趋势。
随着微电子技术、IC设计、EDA工具的发展,基于SoC的单片机应用系统设计会有较大的发展。
因此,对单片机的理解可以从单片微型计算机、单片微控制器延伸到单片应用系统。
2、单片机的特点:
(1).有优异的性能价格比。
(2).集成度高、体积小、有很高的可靠性。
单片机把各功能部件集成在一块芯上,内部采用总线结构,减少了各芯片之间的连线,大大提高了单片机的可靠性和抗干扰能力。
另外,其体积小,对于强磁场环境易于采取屏蔽措施,适合在恶劣环境下工作。
(3).制功能强。
为了满足工业控制的要求,一般单片机的指令系统中均有极丰富的转移指令、I/O口的逻辑操作以及位处理功能。
单片机的逻辑控制功能及运行速度均高于同一档次的微机。
(4).低功耗、低电压,便于生产便携式产品。
(5).外部总线增加了IC(Inter-IntegratedCircuit)及SPI(SerialPeripheralInterface)等串行总线方式,进一步缩小了体积,简化了结构。
(6).单片机的系统扩展和系统配置较典型、规范,容易构成各种规模的应用系统
3、单片机的应用
由于单片机具有显著的优点,它已成为科技领域的有力工具,人类生活的得力助手。
它的应用遍及各个领域,主要表现在以下几个方面:
(1).单片机在智能仪表中的应用
(2).单片机在机电一体化中的应用
(3).单片机在实时控制中的应用
(4).单片机在分布式多机系统中的应用
(5).单片机在人类生活中的应用
单片机已成为计算机发展和应用的一个重要方面,另一方面,单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。
从前必须由模拟电路或数字电路实现的大部分功能,现在已能通过单片机来实现了。
这种用软件代替硬件的控制技术也称为微控制技术,是对传统控制技术的一次革命。
(二)AT89C51简介
AT89C51是美国ATMEL公司生产的低电压,高性能的CMOS8位单片机片内4Kbytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机存储器(RAM),器件采用ATMEL公司的高密度、非易失存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大。
AT89C51单片机可为你提供许多高性价的应用场合,可灵活的应用于各种控制领域。
结构(如图1)
AT89C51单片机是ATMEL公司生产的高性能8位单片机,主要功能特性如下:
①兼容MCS-51指令系统;
②32个双向I/O口,两个16位可编程定时/计数器;
③1个串行中断,两个外部中断源;
④可直接驱动LED;
⑤低功耗空闲和掉电模式;
⑥4kB可反复擦写(>1000次)FLASIROM;
⑦全静态操作O~24MHz;
⑧128×8b内部RAM。
图1
(三)、智能温度传感器AD590的内部结构和原理
AD590简介
AD590是美国模拟器件公司生产的单片集成两端感温电流源。
它的主要特性如下:
1、流过器件的电流(mA)等于器件所处环境的热力学温度(开尔文)度数,即:
mA/K式中:
—流过器件(AD590)的电流,单位为mA;T—热力学温度,单位为K。
2、AD590的测温范围为-55℃~+150℃。
3、AD590的电源电压范围为4V~30V。
电源电压可在4V~6V范围变化,电流变化1mA,相当于温度变化1K。
AD590可以承受44V正向电压和20V反向电压,因而器件反接也不会被损坏。
4、输出电阻为710MW。
5、精度高。
AD590共有I、J、K、L、M五档,其中M档精度最高,在-55℃~+150℃范围内,非线性误差为±0.3℃。
(四)ADC0809的介绍:
ADC0809是采样频率为8位的、以逐次逼近原理进行模—数转换的器件。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。
1.主要特性
1)8路8位A/D转换器,即分辨率8位。
2)具有转换起停控制端。
3)转换时间为100μs
4)单个+5V电源供电
5)模拟输入电压范围0~+5V,不需零点和满刻度校准。
6)工作温度范围为-40~+85摄氏度
7)低功耗,约15mW。
2.引角说明(如图2)
图2
IN0~IN7:
8路模拟量输入端。
2-1~2-8:
8位数字量输出端。
ADDA、ADDB、ADDC:
3位地址输入线,用于选通8路模拟输入中的一路
ALE:
地址锁存允许信号,输入,高电平有效。
START:
A/D转换启动信号,输入,高电平有效。
EOC:
A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
OE:
数据输出允许信号,输入,高电平有效。
当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
CLK:
时钟脉冲输入端。
要求时钟频率不高于640KHZ。
REF(+)、REF(-):
基准电压。
Vcc:
电源,单一+5V。
GND:
地
3.ADC0809的工作过程是:
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
4、硬件电路
(一)AD590的连接
AD590是一种恒流源,输出的电流值和它所测的绝对温度有精确的线性关系。
由于厂家生产时采用激光微调来效正集成电路内的薄膜电阻,使其在摄氏零度(对应绝对温度为273.2K)输出的电流为273.2u。
灵敏度为1uA/K。
当其感受温度升高或降低时,输出电流以1uA/K的速率增大或减小,从而将电流转换成电压可用电压形式表示对应温度的大小(如图3)
图3
(二)ADC0809A/D转换器
A/D转换器的选择主要取决于温度控制精度。
ADC0809是8位8通道的逐次逼近式A/D转换器。
转换时间在100us左右。
其最大量化误差为±1℃。
因此能够完全满足本系统的精度要求。
为简化设计,ADC0809与单片机之间采用直接接口方式。
用软件在ALE端产生脉冲供给ADC0809的时钟信号,并用软件查询方式读取转换结果。
电路设计好后,调整采样放大电路的输出。
使-50℃~+150℃的温度变化对应于0V~5V的输出。
则A/D转换对应的数字量为00H~FAH,即0~250。
与AT89C51连接图(如图4)
图4
1.IOL=(Vcc-Vt-VLED)/R,其中:
Vcc是LED显示器的电流,Vcc=5V。
Vt是晶体管T1,T2的压降,一般Vt=0.3V。
VLED是LED的压降,VLED=1.3V。
R是LED阴极串联电阻R11~R17,R=430Ω.
因此,流过P1.1~P1.7的电流IOL为IOL=(5-0.3-1.3)/430Ω=7.9mA。
由于7.9mA小于每条引脚允许的最大电流10mA,故是安全的。
另外,总电流为7.9*7mA即55.3mA。
也小于允许的总电流71mA。
所以LED结构是一种有效的电路。
2.图示LED数码显示器从左到右依次显示上、下限设定标志,百位、十位、个位,本系统采用的是共阳极动态显示。
(三)LED显示接口电路
在AT89C51中有P0,P1,P2和P3共4个I/O端口。
同时作为单条引脚,可以允许10mA~20mA电流流过;但对于所有的I/O引脚,总的灌入电流,即低电平流入电流不得超过71mA~80mA。
对于扫描式的7段LED显示器,显然AT89C51不可直接驱动其工作。
这时必须加以驱动(74LS145)。
显示与驱动电路的接口电路如图。
在某一时刻,只有一个7段显示器通电工作。
在最大电流时,应是7段都处于亮的显示状态。
这时,P1.1~P1.7都会流过的电流为IOL。
(如图5)
图5
(四)键盘设计
本系统采用的是独立式按键。
此按键是各按键相互独立。
每个按钮占用一根I/O口线。
每根I/O口线上的按键的工作状态不会影响其它I/O口线上的工作状态。
要判别是否有键按下,用单片机的为处理指令十分方便,软件结构简单,且适用于按键数量较少的场合。
结构如图(图6)
图6
1.此电路为方式电路。
通常按钮输入采用低电平有效。
上拉电阻保证了按钮断开时,I/O口线有确定的高电平。
当I/O口线有上接电阻时,外电路可以不配置上拉电阻。
AT89C51的P1~P3端口刚好是一个带内部没有上拉电阻的8位双向I/O端口。
因此要配置上拉电阻。
2.为使系统简单紧凑,仅设置3个功能按键。
分别为“K1功能转换”,“K2增建”,“K3减键”。
通过P2.3,P2.4,P2.5口读入按钮状态,并用软件去抖动。
利用K1键进入温度设定上限、下限或显示状态。
按K2和K3键对上、下限进行温度设定(-50℃~+150℃)即按K2键温度+1℃,按K3键温度-1℃。
(五)电源设计
图7
(六)系统硬件电路
图8
(七)元件清单
名称
型号规格
数量
单片机
AT89C51
1
A/D转换器
ADC0809
1
温度传感器
AD590
1
显示器
LED数码管0.5英寸、红色、共阳
3
运算放大器
OPA37
2
LM741
1
石英晶振
6MHZ
1
瓷介无极性电容
20PF
2
电解电容
10uF/16V
2
电阻
RJ-5.1KΩ-1/4W
4
RJ-430Ω-1/4W
7
RJ-8.2KΩ-1/4W
2
RJ-1KΩ-1/4W
2
RJ-100KΩ-1/4W
5
RJ-25KΩ-1/4W
1
电位器
RJ-100KΩ-1/4W
1
LED发光二极管
黄色¢5
1
绿色¢5
1
工频变压器
9V/±18V/5W
1
五、软件系统总体设计
(一)主程序流程图和主要的几个程序流程图
1.主流程图
2.显示子程序流程图
3.键盘扫描子程序流程图
(二)源程序清单:
1.主程序
ORG0000H
LJMPZCX00;首先运行主程序
ORG0003H
LJMPINT00;中断向量
ORG0030H;主程序
ZCX00:
MOVP2,#40H;关报警、关显示
MOVP3,#0FFH;P3设为输入口
MOVSP,#5FH;设堆栈底为60H
MOVIP,#01H;为高级中断
SETBIT0;为边沿触发
CLRA
MOVIE,A;禁止所有中断请求
MOV16H,A;置查询键为初始状态
MOV17H,A;置功能键为初始状态
MOV20H,A
MOV22H,A
MOV23H,A
MOV2DH,A;置故障、超限等标志为初始状态
MOV33H,A;清零4次测零漂的和
MOV34H,A
MOV45H,#4;置中断计数器初值
MOV46H,#240;置定时测零漂计数器初值
ACALLTDIS0;调显示器自检子程序
ZCX01:
ACALLTROM0;调ROM自检子程序
ACALLTRAM0;调RAM自检子程序
ACALLTSRZJ;调输入通道自检子程序
ACALLDIS00;调显示子程序
JB2DH.0,ERR01;自检故障判断
JB2DH.1,ERR02
JB2DH.2,ERR03
CLR2DH.3;清故障标志
CLRP2.4;关故障报警
CLRP2.5
SJMPZCX02
ERR01:
MOV32H,#01H;置个位显示"1"
SJMPERR04
ERR02:
MOV32H,#02H;置个位显示"2"
SJMPERR04
ERR03:
MOV32H,#03H;置个位显示"3"
ERR04:
MOV31H,#0EH;置十位显示"E"
MOV30H,#0CH;置百位显示"熄灭"
SETB2DH.3;置开机自检故障标志
SETBP2.4;开故障报警
SETBP2.5
SJMPZCX01;重新自检
ZCX02:
MOVSP,#5FH;系统初始化
SETBP2.7;通道开关置测温状态
LOOPCHU:
MOV@R0A;内存单元清“0“
INCR0
DJNZR1LOOPCHU
MOVA#0FFH
MOVP0A
MOVP2A
MOVTMOD#01H
MOVTLO#0E0H
MOVTH0#0B1H
SETBET0
SETBTR0
SJMP$
TIM0:
CLRP1;定时时间到对显示清“0”
MOVTL0#0E0H
MOVTH0#0B1H
LCALLJIANPAN;时间到调键盘子程序
LCALLCELIANG;调数据采集子程序
LCALLXIANSHI;调显示子程序
LCALLBAOJING;调报警程序
RETI
定时器T0中断:
TIMETO:
PUSHPSW;保护现场
PUSHACC
SETBPSW.3;选工作寄存器组1
CLRPSW.4
CLRTR0;重置定时器时间常数
MOVA,TH0
ADDCA,#0B1H
MOVTH0,A
SETBTR0
INC25H
MOVA,25H
CJNEA,#50H,TIME1
MOV25H,#0;=250ms,改变显示
JB20H,0,TIME2
MOV30H,#OC1H
LCALLDISPLAY;设定值显示
TIME1:
LJMPRETURN
TIME2:
LCALLSAMPLE
MOV30H,#0C1H;正式测量显示
LCALLDISPLAY;显示温度
LCALLBAOJING;判温度范围
PETURN:
POPACC;恢复现场
POPPSW
RET1
END
2.显示器自检子程序
ORG0100H
TDIS0:
MOVR4,#3;循环3次
TDIS1:
MOVR1,#2FH;置显缓区首址(最高位)
MOVR5,#4;置显缓区为全亮
TDIS2:
MOV@R1,#0FH
INCR1
DJNZR5,TDIS2
SETBP2.4;点亮报警灯
SETBP2.5;打开蜂鸣器
MOVR5,#125;字段全亮约0.5S
TDIS3:
ACALLDIS00
DJNZR5,TDIS3
MOVR1,#2FH;置显缓区首址
MOVR5,#4;置显缓区为全灭
TDIS4:
MOV@R1,#0CH
INCR1
DJNZR5,TDIS4
CLRP2.4;熄灭报警灯
CLRP2.5;关闭蜂鸣器
MOVR5,#125;全熄灭约0.5S
TDIS5:
ACALLDIS00
DJNZR5,TDIS5
DJNZR4,TDIS1
RET
3.开机自检程序
若发现故障,建立相应故障标志后返回,若无故障,清除故障标志后返回。
见附图1-3所示。
输入通道自检时A/D转换器的输入电压约为1V,转换后送到显示缓冲区的数据应为1000,考虑到各种误差,该数字量为950~1050即视为输入通道正常,检测显缓区数据的正常与否,还可检测软件运算部分是否正常。
源程序见附件1-3。
开机自检子程序
(1)ROM自检子程序↓
ORG0160H
TROM0:
MOVDPTR,#0FFFH;data1为程序的结束地址
PUSHDPH;程序的结束地址进栈
PUSHDPL
MOVDPTR,#0000H;0000H为程序的起始地址
MOVB,#0
TROM1:
CLRA
MOVCA,@A+DPTR;读ROM
XRLB,A;异或运算结果存B
POPAcc;结束地址低8位出栈
MOVR2,A
CJNEA,DPL,TROM3;当前地址低8位≠结束地
址低8位,转移至TROM3
POPAcc;结束地址高8位出栈
CJNEA,DPH,TROM2;当前地址高8位≠结束地
址高8位,转移至TROM
AJMPTROM4;ROM中程序代码全部读出并求异或和,转移至TROM4
TROM2:
PUSHAcc;结束地址高8位进栈
MOVA,R2
TROM3:
PUSHAcc;data1低8位进栈
INCDPTR;当前地址加1
AJMPTROM1;继续异或和运算
TROM4:
MOVDPTR,#0FFFH;指向校验和地址
CLRA
MOVCA,@A+DPTR;读代码校验和
XRLA,B;A、B相等时,(A)=0
JNZTROM5;(A)≠0,ROM故障
CLR2DH.0;清故障标志
RET
TROM5:
SETB2DH.0;置故障标志
RET
(2)RAM自检子程序
有的纯仿真软件不允许向SP以上的地址写入数据,故将栈指针修改为7FH;00H是R0的地址,不检
TRAM0:
MOVSP,#7FH
MOVR0,#7FH;置初始地址指针
TRAM1:
MOV@R0,#55H
MOVA,@R0
CJNEA,#55H,TRAM2
MOV@R0,#0AAH
MOVA,@R0
CJNEA,#0AAH,TRAM2
DJNZR0,TRAM1;未检完,继续
CLR2DH.1;清故障标志
RET
TRAM2:
SETB2DH.1;置故障标志
MOVSP,#5FH;恢复栈指针
RET;
(3)输入通道自检子程序
TSRZJ:
SETBP2.6;置为自检状态
CLRP2.7
CLR2DH.7;置自检标志
MOVIE,#81H;开中断
MOVR3,#250
TSR00:
LCALLDIS00;延时1s
DJNZR3,TSR00
MOVR1,#30H;指向显缓百位
JB2FH.0,TSR04
CJNE@R1,#09H,TSR03
INCR1
CJNE@R1,#05H,TSR02
TSR01:
CLR2DH.2;清故障标志
RET
TSR02:
JNBCY,TSR01
TSR03:
SETB2DH.2;置故障标志
RET
TSR04:
CJNE@R1,#00H,TSR03
INCR1
CJNE@R1,#05H,TSR05
SJMPTSR03
TSR05:
JBCY,TSR01
SJMPTSR03
4.键盘设计:
根据上述键盘扫描子程序流程图和硬件电路图,可以对温度进行设定,首先按下S1键一次进入上限温度设定,可以按S2、S3键对温度进行加、减,按两下可以对下限温度设定,S2、S3两键都是自动从(0—9或9—0),超过时自动进位或借位。
JIANPAN:
MOVP2#0FFH;置P2口为输入口
MOVAP2;读键状态
CPLA
ANLA#38H;屏遮其它位
JZJIANPAN;无键闭合则返回
ACALLD10MS;延时10ms去抖动
MOVAP2
CPLA
ANLA#38H
JZJIANPAN
MOVA