曾经做一个电熨斗的项目,其间要使用到温度的丈量,可是为了节约本钱,要用不带AD的单片机来操控。测温部分是使用RC来测温,便是使用热敏电阻结合RC电路来完成温度的丈量,能够准确到1℃。本电路采用了台湾义隆单片机EM78P156来完成温度的丈量和操控。
一、整体操控电路:
图 1
二、RC测温原理:
使用单片机I/O口来完成RC测温,电路很简单,而且也不难完成,最主要的是要有个概念,怎么实RC测温,也便是RC测温的原理。这儿详细的介绍一下,能够在这个原理基础上进行修正很扩展为多路的测温。如下图(2)
图中:
P1.0、P1.1和P1.2是单片机的3个I/O口;
RK为100K精细电阻;
RT为100K—精度为1%的热敏电阻;
R1为100 的一般电阻;
C1为瓷介电容。
作业原理:
1. 先将P1.0、P1.1和P1.2设为低电平输出,延时0.5s ,使C1放电完。
2. 将P1.1和P1.2设置为输入状况,P1.0输出高电平,经过RK电阻给C1充电,单片机内部的计数器开端计时,而且不断的检测P1.2状况,当P1.2为高电平时,即当C1的电压达到了单片机高电平输入的门限电压时,依据计数的值来确认从开端充电到P1.2转变为高电平的时刻T1。
3. 将P1.0、P1.1和P1.2设为低电平输出,延时0.5s ,使C1放电完。
4. 再将P1.0和P1.2设置为输入状况,P1.1输出高电平,经过RT电阻给C1充电,单片机内部的计数器开端计时,而且不断的检测P1.2状况,当P1.2为高电平时,即当C1的电压达到了单片机高电平输入的门限电压时,依据计数的值来确认从开端充电到P1.2转变为高电平的时刻T2。
5. 电容电压核算公式:
所以 ,这样咱们能够经过核算来得到热敏电阻的阻值,经过查表来得到丈量的温度值。
注:咱们能够依据需要把R1也换成热敏电阻,来完成两路温度的检测,理论上N个I/O口能够丈量N-1个温度。也能够把电容一端接VCC,那么当C1充溢的时分检测端口电压便是低电平。
三、实践程序举例
/******RC测温程序********/
/*单片机:EM78P156*/
/*晶振:4MHZ*/
/*编者:郑文*/
/*日期:2007.01.31*/
/*功用:RC测温*/
/************************/
/*阐明:精细电阻充电时刻计数值寄存地址:RF_DA
/*热敏电阻充电时刻计数值寄存地址:RS_DA
/*寄存器及变量界说*/
R0EQU 0X00
TCCEQU 0X01
CONTEQU 0X01
PCEQU 0X02
STATUSEQU 0X03
CEQU 0
DCEQU 1
ZEQU 2
R4EQU 0X04
RSREQU 0X04
IOC5EQU 0X05
PORT5EQU 0x05
IOC6EQU 0X06
PORT6EQU 0x06
;***************************
;***************************
IOCAEQU 0X0A
IOCBEQU 0X0B
IOCCEQU 0X0C
IOCDEQU 0X0D
IOCEEQU 0X0E
RFEQU 0X0F
IOCFEQU 0X0F
;**************************
;**************************
T_SETEQU 0X1F;温度设置值寄存器
T_MEASEQU 0X20;当时测得温度值
AD_DA
AD_DA
RF_DA
RF_DA
RS_DA
RS_DA
XSWEQU 0X2A;显现位,判别哪位能够正在点亮
BACCEQU 0X2D;ACC备份寄存器
BSTATUSEQU 0X2E;STATUS备份寄存器
LA_CNT1EQU 0X2F
FLAG1EQU 0X30
LPEQU 0;LP放电标志位
HAVEDISEQU 1;放电时刻计数标志位
RS_OVEREQU 4
REF_OVEREQU 5
AD_EEQU 6;采样正在进行标志位
AD_TYPEEQU 7;采样类型,是参阅电阻采样仍是传感器电阻采样
/********************************************/
ORG00H
JMPSTART
ORG08H
JMPINT_TCC ;进入中止程序
;*******************************************
;=================================================
START:
CALL INITAITE ;程序初始化
MAIN:
MAIN2:
CALL ADCONVER ;RC测温RC时刻丈量
JMPMAIN
;**************************************************
INITAITE:
MOVA,@0B00000000;BIT6特别,预分频器分给计数器,分频比为1:2,
CONTW;上升沿触发,内部时钟源,中止屏蔽。
MOVA,@0B00000000;5口界说为输出口
IOWIOC5
MOVA,@0B00000000;6口界说为输出口
IOWIOC6
MOVA,@0B00000000
IOWIOCE;WITE=0制止WDT,EIS=0界说P60口为双向IO口而不是中止口;
MOVA,@0B00000001
IOWIOCF;定时器中止答应
ENI;开中止,整个程序履行进程,中止一直是重用的
RET
/**********************************************************
*程序称号:AD程序
************************************************************/
;———
;|P6.3|———-P5.1
;||____|
;|P6.5|–|____|–|P5.2
;||___/|
;|P5.4|–|__/_|–|P5.0
;||/—
;||— c
;|||
;———+5v
;***********************************************************
;;;;;;;;;;;;;;;;;;;RC转化丈量;;;;;;;;;;;;;;;;;;;;;;;;;
ADCONVER:
JBCFLAG1,AD_E;是否正在进行AD采样,1 EN, 0 DIS
JMPADQUIT
JBCFLAG1,HAVEDIS;放电时刻是否到
JMPREF_SENSOR
;;;;;;;;;;;;;;;;;;;;;;;;
IORIOC6;置P6.3,P6.4,P6.5输出,为AD采样做好预备
ANDA,@0B11000111
IOWIOC6
BSPORT6,3;P5.0,P5.1,P5.2输出为1,对%&&&&&%进行放电
BSPORT6,4
BSPORT6,5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLRLA_CNT1;清放电时刻计数
BSFLAG1,LP; LP置高表明放电完毕
BSFLAG1,AD_E;使能AD采样
RET
REF_SENSOR:
BCFLAG1,HAVEDIS
BCFLAG1,AD_TYPE;正在采样的是参阅电阻仍是传感器:1 REF REGISTER, 0 SENSOR
MPAD_1;正在对参阅电阻进行采样
;对传感器电阻进行采样
MOVA,AD_DA
MOVRS_DA
MOVA,AD_DA
MOVRS_DA
BSFLAG1,RS_OVER
BSFLAG1,AD_TYPE
IORIOC6;SET port6.3,port6.4 INPORT,port6.5 EXPORT
ORA,@0B00011000
ANDA,@0B11011111
IOWIOC6
MOVA,@231;REF START COUNT
MOVTCC,A
MOVA,@0
MOVAD_DA
MOVAD_DA
BCPORT6,5
BSFLAG1,AD_E;置正在采样标志位
JMPADQUIT
AD_1:;对参阅电阻进行采样
MOVA,AD_DA
MOVRF_DA
MOVA,AD_DA
MOVRF_DA
BSFLAG1,REF_OVER
BCFLAG1,AD_TYPE;清零AD_TYPE
IORIOC6
ORA,@0B00101000
ANDA,@0b11101111;port6.3,port6.5 INPORT,port6.4 EXPORT
IOWIOC6
MOVA,@231;SENSOR START COUNT
MOVTCC,A
MOVA,@0
MOVAD_DA
MOVAD_DA
BCPORT6,4
BSFLAG1,AD_E
ADQUIT:
RET
;******************************************************
INT_TCC:
MOVBACC,A;维护ACC和STATUS
SWAPASTATUS
MOVBSTATUS,A
JBSRF,0;判别是否为计数器中止,假如是得话进入
;计数器中止服务程序,不是则退出
JMPINTQUIT
MOVA,@231;赋初始值给TCC
MOVTCC,A
BCRF,0;RF能够指令清零,但不能置1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LAPSE_TIMER:
JBSFLAG1,LP;放电0.1S计时(LP放电标志位)
JMPTCC_1;假如放电没完毕则跳转到TCC_1
INCLA_CNT1;假如放电完毕了,履行
MOVA,@255
XORA,LA_CNT1
JBSSTATUS,Z
MPTCC_1;假如不等于255则跳转到TCC_1
BCFLAG1,AD_E;采样正在进行的标志位清0(AD采样不使能)
BSFLAG1,HAVEDIS ;放电时刻标志位为1(表明现已计时0.5秒,满足放完电)
BCFLAG1,LP;放电完毕,放电标志位清零
TCC_1:
JBSFLAG1,AD_E;判别AD采样使能?
JMPINTQUIT;不使能就跳出中止
JBCFLAG1,LP;判别放电标志位使能?
JMPINTQUIT;不使能就跳出中止
INCAD_DA
JBSSTATUS,Z
JMPTCC_0
INCAD_DA
MOVA,AD_DA
XORA,@120
JBSSTATUS,Z
JMPTCC_0
BCFLAG1,AD_E;AD采样不使能
JMPINTQUIT
TCC_0:
JBCPORT6,3;检测P51口电平是否改变
JMPINTQUIT;没有改变就跳出中止
BCFLAG1,AD_E;假如P51为0则中止采样
INTQUIT:
SWAPABSTATUS;康复寄存器
MOVSTATUS,A
SWAPBACC
SWAPABACC
RETI
END