中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于EMP78P156單片機的RC測溫的實現(xiàn)

        基于EMP78P156單片機的RC測溫的實現(xiàn)

        作者: 時間:2016-11-13 來源:網(wǎng)絡 收藏
        以前做一個電熨斗的項目,其中要使用到溫度的測量,但是為了節(jié)省成本,要用不帶AD的單片機來控制。測溫部分是利用RC來測溫,就是利用熱敏電阻結合RC電路來實現(xiàn)溫度的測量,可以精確到1℃。本電路采用了臺灣義隆單片機EM78P156來實現(xiàn)溫度的測量和控制。

        一、總體控制電路:

        本文引用地址:http://www.antipu.com.cn/article/201611/316077.htm

        圖 1

        二、RC測溫原理:

        利用單片機I/O口來實現(xiàn)RC測溫,電路很簡單,而且也不難實現(xiàn),最主要的是要有個概念,如何實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設置為輸入狀態(tài),P1.0輸出高電平,通過RK電阻給C1充電,單片機內(nèi)部的計數(shù)器開始計時,并且不斷的檢測P1.2狀態(tài),當P1.2為高電平時,即當C1的電壓達到了單片機高電平輸入的門限電壓時,根據(jù)計數(shù)的值來確定從開始充電到P1.2轉變?yōu)楦唠娖降臅r間T1。

        3. 將P1.0、P1.1和P1.2設為低電平輸出,延時0.5s ,使C1放電完。

        4. 再將P1.0和P1.2設置為輸入狀態(tài),P1.1輸出高電平,通過RT電阻給C1充電,單片機內(nèi)部的計數(shù)器開始計時,并且不斷的檢測P1.2狀態(tài),當P1.2為高電平時,即當C1的電壓達到了單片機高電平輸入的門限電壓時,根據(jù)計數(shù)的值來確定從開始充電到P1.2轉變?yōu)楦唠娖降臅r間T2。

        5. 電容電壓計算公式:

        所以 ,這樣我們可以通過計算來得到熱敏電阻的阻值,通過查表來得到測量的溫度值。

        注:我們可以根據(jù)需要把R1也換成熱敏電阻,來實現(xiàn)兩路溫度的檢測,理論上N個I/O口可以測量N-1個溫度。也可以把電容一端接VCC,那么當C1充滿的時候檢測端口電壓就是低電平。

        三、實際程序舉例

        /******RC測溫程序********/

        /*單片機:EM78P156*/

        /*晶振:4MHZ*/

        /*編者:鄭文*/

        /*日期:2007.01.31*/

        /*功能:RC測溫*/

        /************************/

        /*說明:精密電阻充電時間計數(shù)值存放地址:RF_DATA2(24H) RF_DATA1(23H)

        /*熱敏電阻充電時間計數(shù)值存放地址: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采樣過來的數(shù)值

        AD_DATA2EQU 0X22

        RF_DATA1EQU 0X23;存放基準電阻采樣過來的數(shù)值,存放低位

        RF_DATA2EQU 0X24;存放高位

        RS_DATA1EQU 0X25;存放傳感器電阻采樣過來的數(shù)值

        RS_DATA2EQU 0X26

        XSWEQU 0X2A;顯示位,判斷哪位可以正在點亮

        BACCEQU 0X2D;ACC備份寄存器

        BSTATUSEQU 0X2E;STATUS備份寄存器

        LA_CNT1EQU 0X2F

        FLAG1EQU 0X30

        LPEQU 0;LP放電標志位

        HAVEDISEQU 1;放電時間計數(shù)標志位

        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特殊,預分頻器分給計數(shù)器,分頻比為1:2,

        CONTW;上升沿觸發(fā),內(nèi)部時鐘源,中斷屏蔽。

        MOVA,@0B00000000;5口定義為輸出口

        IOWIOC5

        MOVA,@0B00000000;6口定義為輸出口

        IOWIOC6

        MOVA,@0B00000000

        IOWIOCE;WITE=0禁止WDT,EIS=0定義P60口為雙向IO口而不是中斷口;

        MOVA,@0B00000001

        IOWIOCF;定時器中斷允許

        ENI;開中斷,整個程序執(zhí)行過程,中斷一直是起用的

        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;清放電時間計數(shù)

        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采樣過來的數(shù)據(jù)放入?yún)⒖茧娮璧臄?shù)據(jù)寄存器

        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;判斷是否為計數(shù)器中斷,如果是得話進入

        ;計數(shù)器中斷服務程序,不是則退出

        JMPINTQUIT

        MOVA,@231;賦初始值給TCC

        MOVTCC,A

        BCRF,0;RF可以指令清零,但不能置1

        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

        LAPSE_TIMER:

        JBSFLAG1,LP;放電0.1S計時(LP放電標志位)

        JMPTCC_1;如果放電沒結束則跳轉到TCC_1

        INCLA_CNT1;如果放電結束了,執(zhí)行

        MOVA,@255

        XORA,LA_CNT1

        JBSSTATUS,Z

        MPTCC_1;如果不等于255則跳轉到TCC_1

        BCFLAG1,AD_E;采樣正在進行的標志位清0(AD采樣不使能)

        BSFLAG1,HAVEDIS ;放電時間標志位為1(表示已經(jīng)計時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



        評論


        技術專區(qū)

        關閉