您的位置 首页 传感器

根据EMP78P156单片机的RC测温的完成

以前做一个电熨斗的项目,其中要使用到温度的测量,但是为了节省成本,要用不带AD的单片机来控制。测温部分是利用RC来测温,就是利用热敏电…

曾经做一个电熨斗的项目,其间要使用到温度的丈量,可是为了节约本钱,要用不带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_DATA2(24H) RF_DATA1(23H)

/*热敏电阻充电时刻计数值寄存地址:RS_DATA2(26H) RS_DATA1(25H)

/*寄存器及变量界说*/

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_DATA1EQU 0X21;寄存AD采样过来的数值

AD_DATA2EQU 0X22

RF_DATA1EQU 0X23;寄存基准电阻采样过来的数值,寄存低位

RF_DATA2EQU 0X24;寄存高位

RS_DATA1EQU 0X25;寄存传感器电阻采样过来的数值

RS_DATA2EQU 0X26

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_DATA1

MOVRS_DATA1,A

MOVA,AD_DATA2

MOVRS_DATA2,A

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_DATA1,A

MOVAD_DATA2,A

BCPORT6,5

BSFLAG1,AD_E;置正在采样标志位

JMPADQUIT

AD_1:;对参阅电阻进行采样

MOVA,AD_DATA1;将AD采样过来的数据放入参阅电阻的数据寄存器

MOVRF_DATA1,A

MOVA,AD_DATA2

MOVRF_DATA2,A

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_DATA1,A

MOVAD_DATA2,A

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_DATA1;SAMPLE COUNT

JBSSTATUS,Z

JMPTCC_0

INCAD_DATA2

MOVA,AD_DATA2

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

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/chuanganqi/272041.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部