当前位置: 网站首页 > 技术应用 > 单片机应用

RC测温控制

1、RC 充放电的原理和硬体:
  RC 测温的实现方法是利用电阻R 给电容C 充放电时间来测量温度的(此处的温度感测器为热敏电阻)。
用不同的电阻给电容充放电时间不一样,对RC 测量温度的精度与电阻R 和电容C 的选取有关。我们通常是选用一
个标准电阻(随温度变化其阻值变化很小,可忽略不计,通常为高精度的金属膜电阻),它的阻值Rs 与温度传感器在
标准大气压下、25℃时的阻值相同。当温度发生变化时,热敏电阻的阻值Rt 发生变化,那么热敏电阻Rt 给电容C 的充
放电时间也发生变化。而标准电阻Rs 给电容C 的充放电时间则不发生变化。
[b]注意:电容放电一定要放完,这是RC测温准确关键之一。
2:公式:在这里我就不列出这个公式是怎么来的了,因为我们不是搞数学研究的。我们只要知道这个就可以了:
       Rt=(Rs*Tt)/Ts
注:Rs 为标准电阻Rt 为热敏电阻
硬件处理完了,我们就开始做软件处理了,下面是RC充放电处理程序,供大家参考有什么好的处理方法望大家提提:
;;********************************
;;文件名:rc.asm
;;
;;********************************
.const
        f_chargem        equ        fp10m                ;;标准电阻引脚方向
        f_charge        equ        fp10
        f_ntcm                equ        fp54m                ;;热敏电阻引脚方向
        f_ntc                equ        fp54
;;----------------------------------------------
.data
        flag3                ds        1
        f_rcirq                equ        flag3.0
        f_rcout                equ        flag3.1
        f_rcend                equ        flag3.2
        f_rc_ok                equ        flag3.3

        b_rcnt                ds        1
        b_temp                ds        1
        b_stand                ds        1
        b_ntc                ds        1
        b_rcmode        ds        1
;;---------------------------------------------
;;---------------------------------------
.code
;;---------------------------------------
;;*****************************************
;;RC充电测温程序
;;程序说明:有测温请求时f_rcirq=1,并将温度数据存放在b_temp中
;;输入参数:f_rcirq
;;输出参数:b_temp
;;程序功能:RC充放测温
;;******************************************
mn_rc:
        bts1        f_rcirq                        ;;是否有测温请求
        jmp        mn_rc90                        ;;无
        mov        a,b_rcmode
        @jmp_a        5
        jmp        mn_rc10                        ;;放电
        jmp        mn_rc20                        ;;标准电阻充电
        jmp        mn_rc10                        ;;放电
        jmp        mn_rc30                        ;;热敏电阻充电
        jmp        mn_rc40                        ;;计算温度值
;;*****************************************
mn_rc10:
        bts0        f_rcout
        jmp        mn_rc60
        bset        f_rcout                        ;;开始放电
        bclr        f_charge
        bset        f_chargem                ;;标准电阻输出0        
        bclr        f_ntc
        bset        f_ntcm                        ;;热敏电阻输出0
        
        mov        a,#255                        ;;
        mov        b_rcnt,a                        ;;放电时间为5xTb
        
        jmp        mn_rc90
;;--------------------------------------------
mn_rc20:
        
        clr        b_stand                        ;;标准电阻清0
        bset        f_charge
        bset        f_chargem
                                        ;;开始标准电阻充电
        bclr        f_ntcm                        
;;----------------------------------------
mn_rc21:
        bts0        f_ntc                        ;;f_check=1充满
        jmp        mn_rc80        
        incms        b_stand                        ;;标准电阻计时
        jmp        mn_rc21
        decms        b_stand
        
        jmp        mn_rc80
        
;;----------------------------------------
mn_rc30:
        clr        b_ntc                        ;;热敏电阻时间清0
        bset        f_ntc
        bset        f_ntcm
        bclr        f_chargem
;        bclr        f_checkm                ;;热敏电阻充电计时
;;--------------------------------------
mn_rc31:
        bts0        f_charge
        jmp        mn_rc80
        incms        b_ntc
        jmp        mn_rc31
        decms        b_ntc
        
        jmp        mn_rc80
;;-------------------------------------
;;--------------------------------------
mn_rc40:
        mov        a,#100
        mov        y,a
        mov        a,b_stand
        mov        b_text,a
        call        mn_mul                                //乘法
        call        mn_div                                //除法
;;------------------------------------------------------------
;;---------------------------------------
mn_rc60:
        
        mov        a,b_rcnt
        bts1        fz
        jmp        mn_rc90
        bclr        f_rcout
        jmp        mn_rc80
;;--------------------------------------
mn_rc80:
        incms        b_rcmode                ;;模式加1
        mov        a,b_rcmode
        sub        a,#5
        jnc        mn_rc90
        clr        b_rcmode
        bclr        f_rcirq                        ;;清除测温标志
;;--------------------------------------
mn_rc90:
        ret
        
;;**************************************
;;程序功能:放电计时
;;输入参数:rcnt
;;输出参数:无
;;*************************************
drcnt:
        bts1        f_rcout
        jmp        drcnt90
        mov        a,b_rcnt                        ;;是否已放电完成
        bts0        fz
        jmp        drcnt90

        decms        b_rcnt
        nop
drcnt90:
        ret

;;******************************************************;;
;;Function        :乘法        8位乘8位                        ;;
;;Input                :乘数--;被乘数--data_ntc;循环次数(被乘数位数)--z
;;Output        :乘积--dividend_high、dividend_Low        ;;
;;******************************************************;;
mn_mul:                                        ;;
        b0mov        z,#08h                                ;;
        clr        dividend_Low                        ;;
        clr        dividend_high                        ;;
mn_mul10:                                        ;;
        rrcm        y                                ;;
        b0bts1        fc                                ;;
        jmp        mn_mul20                        ;;
        mov        a,b_ntc                                ;;
        add        dividend_high,a                        ;;
        b0bts0        fc                                ;;
        incms        dividend_low                        ;;
        nop                                        ;;
mn_mul20:                                        ;;
        rrcm        dividend_high                        ;;
        rrcm        dividend_low                        ;;
        decms        z                                ;;
        jmp        mn_mul10                        ;;
        ret                                        ;;
;;**********************************************;;


;;******************************************************;;
;;Function        :除法 16位除8位                                ;;
;;Input                :被除数--dividend_high、dividend_low ; 除数--data_ref ; 循环次数(被除数位数)--z
;;Output        :商quotient_high、quotient_low                ;;
;;******************************************************;;
;;******************************************************;;
;;Function        :除法 16位除8位                                ;;
;;Input                :被除数--dividend_high、dividend_low ; 除数--data_ref ; 循环次数(被除数位数)--z
;;Output        :商quotient_high、quotient_low                ;;
;;余数                :div_few_high,div_few_low
;;******************************************************;;
mn_div:
        b0mov        z,#10h
        clr        quotient_high
        clr        quotient_low
        clr        div_few_high
        clr        div_few_low
        

;;-----------------------------------------------------
mn_div10:
        b0bclr        fc
        
        rlcm        dividend_low
        rlcm        dividend_high

        rlcm        div_few_low
;        rlcm        div_few_high
        
        b0bts0        fc
        jmp        $+5
        
;        b0bts1        fz
;        jmp        mn_div20
        
        mov        a,div_few_low
        sub        a,b_stand
;;--------------------------------------------------------
mn_div20:
        b0bts1        fc
        jmp        mn_div30
;;B>=A
        mov        a,div_few_low
        sub        a,b_stand
        mov        div_few_low,a

;        bts1        fc
;        decms        div_few_high
;        nop
        bset        fc
mn_div30:
        rlcm        quotient_low                        ;;
        rlcm        quotient_high                        ;;
        decms        z                                ;;
        jmp        mn_div10                                          ;;

        ret
//-----------------------------------------------------------------------
下面就是做平均处理我这里就不在列出了

点击次数:  【关闭
  • 壹零零单片机©版权所有 2008-2025 粤ICP备17151077号

Powered by  xinfuke  5.2.5 ©2008-2025  www.100mcu.com