机电之家资源网
单片机首页|单片机基础|单片机应用|单片机开发|单片机文案|软件资料下载|音响制作|电路图下载 |嵌入式开发
培训信息
赞助商
NT10-A2取暖器智能控制程序
NT10-A2取暖器智能控制程序
 更新时间:2009-7-22 16:41:09  点击数:0
【字体: 字体颜色
/script>

;**************************************
 list  p=16f84A
 include "P16F84A.INC"
;*******************************************************************
 LIST P=16F84A,R=DEC  ;定义器件为16F84,默认数制为十进制
;-------------------------------------------------------
__CONFIG B'11111111110001';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC
                                              ;没有代码保护
                                              ;看门狗关闭
                                              ;上电廷时器开启
                                              ;振荡器模式为XT
;----------RA4遥控输入 RA0开机按键 RA2功能键 RA1定时键-----
;************变量定义******************
YKSPBZ   EQU  0
GNL      EQU  1 ;RB1
GNH      EQU  2;RB2
FLZ      EQU  3;RA3
SW       EQU  0;RB0
POWER_LED  EQU 7;RB7
LED_SW     EQU 6;RB6
LED_GNL      EQU 5;RB5
LED_GNH      EQU 4;RB4
RF         EQU 3;RB3
SPEK      EQU 2;RA2
KEY_ONOFF  EQU 7;RB7
KEY_TIME   EQU 6;RB6
KEY_SPEED  EQU 5;RB5
KEY_SW     EQU 4;RB4
ONOFFBZ    EQU 0;
XIANSHIBZ   EQU 1;
LFMBZ       EQU 3;
GNXIZI     EQU 22H ;功能显值
TIMEXIZI    EQU  45H
SETTIME   EQU 23H ;
YUANXIZI   EQU 26H ;原RB显示值
;----------------------------
DSBZ       EQU   30h  ;定时打开标志
DSLANG     EQU   31h  ;累加长时间定时寄存器
DSMES1     EQU   32h  ;定时秒寄存器1
DSMES2     EQU   33h  ;定时秒寄存器2
DSMIN      EQU   34h  ;定时分寄存器
DSSET      EQU   35h  ;设置定时寄存器
ONBZ       EQU   36h  ;开机标志
LS1        EQU   38h   ;临时寄存器
LS2        EQU   47H
JSQ1       EQU   40H
JSQ2       EQU   41H
JSQ3       EQU   46H
LFMBZJC    EQU   47H
RFSPEEK    EQU   48H
;-------------------------------------------------
YFML      EQU  20H
YFMH      EQU  21H
YFMLC     EQU  24H
YFMHC     EQU  25H
BZH1        EQU  28H
BZH         EQU  29H
RFSJBZ      EQU  44H
;-----------初始化------------------
LOOP   
        ORG  00H
        GOTO LOOPTOP
;--------------连续码处理----------------
LXMCL      BTFSS   ONBZ, ONOFFBZ
          RETURN
        BTFSS   LFMBZJC,LFMBZ
        RETURN
        MOVLW  D'100'
        MOVWF  JSQ3
        BSF   LFMBZJC,LFMBZ
        GOTO MAIN
ZILXM 
         MOVLW  D'100'
        MOVWF  JSQ3
        BSF   LFMBZJC,LFMBZ
        RETURN

;--------------开关机按键处理----------------------------
KEYONOFF
        btfsc  PORTB,KEY_ONOFF
        RETURN    ;RA0为1返回
        NOP
        btfsc  PORTB,KEY_ONOFF
        RETURN    ;
        CALL  LXMCL
;BDSK     btfss  PORTB,KEY_ONOFF
       ;  goto BDSK    ;
;-----------开关机执行-----------------------
DOONOFF
        btfsc  ONBZ,ONOFFBZ
        goto LOOP    ;RA0为1返回
        bsf    ONBZ,ONOFFBZ ;置开机标志为1
        BSF    GNXIZI,POWER_LED
        BSF    GNXIZI,LED_GNL
        BSF    PORTB,GNL
        BSF    YUANXIZI,GNL
        BSF    PORTA,FLZ
            call   SPEEK
         CALL   ZILXM
        RETURN
;-------------摇头功能键处理--------- 
KEYSW
        btfsc  PORTB,KEY_SW
        return    ;RA0为1返回
        nop
        btfsc  PORTB,KEY_SW
        return    ;RA2为1返回
        CALL   LXMCL
;bddsbz     btfss  DSBZ,0
 ;          goto   PDSKSW
;------------等待松开------------
;PDSKSW1     call   OUTWAIT
 ;          call   SHIJI
  ;         btfss  PORTB,KEY_SW
   ;        goto  PDSKSW1
;--------------功能执行-----------
DOSW
         btfss  PORTB,SW
         goto  SWON
         bcf    PORTB,SW
        BCF     YUANXIZI,SW
         BCF    GNXIZI,LED_SW
          call    SPEEK
          CALL  ZILXM
         return
;----------------RB5置高H--------
SWON
        bsf    PORTB,SW
        BSF     YUANXIZI,SW
        BSF    GNXIZI,LED_SW
         call   SPEEK
        CALL  ZILXM
        return
;--------------判断按键是否检开---------------
;PDSKSW
 ;        btfss  PORTB,KEY_SW
  ;       goto   PDSKSW    ;RA2为0返回
   ;      goto   DOSW

;-------------档位功能键处理---------  
KEYSPEED
        btfsc  PORTB,KEY_SPEED
        return    ;RA0为1返回
        nop
        btfsc  PORTB,KEY_SPEED
        return    ;RA2为1返回
        CALL   LXMCL
;PDDSBZ_1     btfss  DSBZ,0
 ;          goto   PDSKSPEED
;------------等待松开------------
;PDSKSPEED1     call   OUTWAIT
 ;          call   SHIJI
  ;         btfss  PORTB,KEY_SPEED
   ;        goto  PDSKSPEED1
;--------------功能执行-----------
DOSPEED
         BTFSC  YUANXIZI,GNL
         goto   DOGNH
         BSF    YUANXIZI,GNL
         BSF    PORTB,GNL
         BSF    GNXIZI,LED_GNL
         BCF    GNXIZI,LED_GNH
         BCF    PORTB,GNH
         BCF    YUANXIZI,GNH
          call    SPEEK
         CALL ZILXM
         return
;----------------RB5置高H--------
DOGNH
        bsf    YUANXIZI,GNH
        BSF    PORTB,GNH
        BSF    GNXIZI,LED_GNH
        BCF    GNXIZI,LED_GNL
        BCF    PORTB,GNL
        BCF    YUANXIZI,GNL
         call   SPEEK
         CALL ZILXM
        return
;--------------判断按键是否检开---------------
;PDSKSPEED
    ;     btfss  PORTB,KEY_SW
    ;     goto   PDSKSPEED    ;RA2为0返回
      ;   goto   DOSPEED
;----------定时键处理---------------------
 
KEYTIME
        btfsc  PORTB,KEY_TIME
        return    ;RA0为1返回
        nop
        btfsc  PORTB,KEY_TIME
        return    ;RA1为1返回
        CALL  LXMCL
;PDDSBZT     btfss  DSBZ,0
 ;           goto   PDDSSKT1
;------------等待松开------------
;PDDSSKT      call   OUTWAIT
     ;      call   SHIJI
     ;      btfss  PORTB,KEY_TIME
      ;     goto  PDDSSKT
;------------执行定时----------
DOTIME
          CALL  SPEEK
          movlw  H'0F'
          andwf  SETTIME,0
          xorlw  H'0F'
          btfsc  STATUS,Z
          goto   QINGTIMEBZ
;--------------------------
          bsf   DSBZ,0
          incf  SETTIME,1
;---按键处理完后,要清原来计数的寄存器值------
qinyuanjs
         clrf  DSLANG
         clrf  DSMES1
         clrf  DSMES2
         CALL  ZILXM
                  RETURN
;--------------判断按键是否检开---------------

;PDDSSKT1
        ; btfss  PORTB,KEY_TIME
       ;  goto   PDDSSKT1    ;RA2为0返回
       ;  goto   DOTIME
;-------------显示处理----------------------
XIANSHICL
         BANKSEL  TRISB
         MOVLW  H'08'
         MOVWF    TRISB
         BANKSEL  PORTB
         NOP
         BSF  PORTA,0
         BSF  PORTA,1
        BTFSC  ONBZ,XIANSHIBZ
         GOTO   XIANSHICL_TIME
         MOVF  GNXIZI,0
         MOVLW  H'F0'
         ANDWF  GNXIZI,1
         MOVLW  H'0F'
         ANDWF  YUANXIZI,1
         MOVF   GNXIZI,0
         IORWF  YUANXIZI,1
         MOVLW  H'0F'
         ANDWF   PORTB,1 
         MOVF   YUANXIZI,0
         MOVWF  PORTB
         BSF    PORTA,0
         BCF    PORTA,1
         CALL  XIANSHIYANSI
         BSF   ONBZ,XIANSHIBZ
         BANKSEL  TRISB
         MOVLW  H'F8'
         MOVWF    TRISB
         BANKSEL  PORTB
           return
XIANSHICL_TIME
         MOVF  SETTIME,0
         MOVWF  TIMEXIZI
         MOVF   TIMEXIZI,0
         SWAPF   TIMEXIZI,1
         MOVLW  H'F0'
         ANDWF  TIMEXIZI,1
         MOVLW  H'0F'
         ANDWF  YUANXIZI,1
         MOVF   TIMEXIZI,0
         IORWF  YUANXIZI,1
         MOVLW  H'0F'
         ANDWF   PORTB,1 
         MOVF   YUANXIZI,0
         MOVWF  PORTB
         BSF    PORTA,1
         BCF    PORTA,0
         CALL  XIANSHIYANSI
         BCF   ONBZ,XIANSHIBZ
         BANKSEL  TRISB
         MOVLW  H'F8'
         MOVWF    TRISB
         BANKSEL  PORTB
           return
GNXIANSHICL
         BANKSEL  TRISB
         MOVLW  H'08'
         MOVWF    TRISB
         BANKSEL  PORTB
         NOP
         BSF  PORTA,0
         BSF  PORTA,1
          MOVF  GNXIZI,0
         MOVLW  H'F0'
         ANDWF  GNXIZI,1
         MOVLW  H'0F'
         ANDWF  YUANXIZI,1
         MOVF   GNXIZI,0
         IORWF  YUANXIZI,1
         MOVLW  H'0F'
         ANDWF   PORTB,1 
         MOVF   YUANXIZI,0
         MOVWF  PORTB
         BSF    PORTA,0
         BCF    PORTA,1
         RETURN
SJXIANSHICL
         MOVF  SETTIME,0
         MOVWF  TIMEXIZI
         MOVF   TIMEXIZI,0
         SWAPF   TIMEXIZI,1
         MOVLW  H'F0'
         ANDWF  TIMEXIZI,1
         MOVLW  H'0F'
         ANDWF  YUANXIZI,1
         MOVF   TIMEXIZI,0
         IORWF  YUANXIZI,1
         MOVLW  H'0F'
         ANDWF   PORTB,1 
         MOVF   YUANXIZI,0
         MOVWF  PORTB
         BSF    PORTA,1
         BCF    PORTA,0
           RETURN
;----------------专门为主程序用不要声音的-------------

;-----------清定时标志---当按键按超出定时时,溢出不定时----------
QINGTIMEBZ
          clrf  SETTIME
          clrf  DSBZ
          clrf  DSLANG
          clrf  DSMES1
          clrf  DSMES2
          CALL  ZILXM
             return
;-----------------------------------------
XIANSHIYANSI
         MOVLW  D'10'
         MOVWF  JSQ1
         CALL OUTWAITMAIN
         CALL SHIJI
         DECFSZ  JSQ1,1
         GOTO $-3
         RETURN
       
;遥控处理2
;***************************************
RFCL 


         CALL  LXMCL
RF1
         BTFSC  PORTB,RF
         RETURN
         BTFSC  PORTB,RF
         RETURN
WAITL  
        BTFSC  PORTB,RF
        GOTO   RFOUT
        
;----------------0.520MS---
         CALL SHIJI
         CALL  GNXIANSHICL
         CALL  OUTWAIT
;---------------------------
         CALL SHIJI
;-----------------------
EB1
         BTFSS  PORTB,RF
         GOTO   SETZERO1
         BSF   BZH1,0     
;--------------------
EA1        CALL OUTWAIT
;-------------------
         CALL SHIJI
;------------------- 
EB11
         BTFSS  PORTB,RF
         GOTO  SETZERO2
         BSF   BZH1,1   
;---------判断BZH1的值,是00则为1,是11则为0---
PD
           MOVLW B'00000011'
           ANDWF  BZH1,1
           MOVLW   B'00000011'
           XORWF   BZH1,0
           BTFSC    STATUS,Z
           GOTO    ZIL

 ;-----判是否为110=1---
            GOTO    ZIH  
;---------用于判断时的置数------
ZIL
         BCF  BZH,0
         GOTO ZISUO
ZIH
        BSF  BZH,0
        
;----------置数-----------
ZISUO
        MOVLW  D'5'
        XORWF  YFMLC,0                                                                                                                           
        BTFSC   STATUS,Z
        GOTO    YFMHXH                                                                                                                                                                                                                                   
        BTFSS   BZH,0
        GOTO    BZZER0
        RLF    YFML,1
        BSF    YFML,0
YFMLYW
        CLRF  BZH
        CLRF  BZH1
        INCF  YFMLC,1
        GOTO  WAIT
;-------------------
BZZER0
       RLF    YFML,1
       BCF   YFML,0
       GOTO   YFMLYW
;-----------------------
YFMHXH
;-----------------------
        MOVLW  D'7'
        XORWF  YFMHC,0
        BTFSC   STATUS,Z
        GOTO    ZIXING
        BTFSS   BZH,0
        GOTO    BZZER01
        RLF    YFMH,1
        BSF    YFMH,0
YFMHYW
        CLRF  BZH
        CLRF  BZH1
        INCF  YFMHC,1
        GOTO  WAIT
BZZER01
       RLF    YFMH,1
       BCF   YFMH,0
       GOTO   YFMHYW
             
;----------读数时判断值--------         
SETZERO1
         BCF    BZH1,0
         GOTO EA1
SETZERO2
         BCF   BZH1,1
         GOTO PD
;---------ZIXING-------
ZIXING
   
PD1
       MOVLW B'00011111'
       ANDWF YFML,1
        MOVLW  B'00011011'
        XORWF  YFML,0
        BTFSS   STATUS,Z
        GOTO    RFOUT
        BSF  RFSPEEK,YKSPBZ
keyzi
;-------------------
        MOVLW B'01111111'
        ANDWF YFMH,1
;---------------------------
        MOVLW  B'00000001'
        XORWF  YFMH,0
        BTFSC   STATUS,Z
        GOTO    KEY0
;---------------判是否开机----------
        btfss  ONBZ,0
        goto   RFOUT    
;------------------------------
        MOVLW  B'00000010'
        XORWF  YFMH,0
        BTFSC   STATUS,Z
        GOTO    KEY1
;------------------------------
        MOVLW  H'08'
        XORWF YFMH,0
        BTFSC   STATUS,Z
        GOTO    KEY2
;------------------------------
        MOVLW   H'10'
        XORWF YFMH,0
        BTFSC   STATUS,Z
        GOTO    KEY3
        GOTO    RFOUT
;------------------------------
KEY0
        call DOONOFF
       goto  RFOUT
KEY1
     CALL   DOSPEED
      goto  RFOUT
KEY2 
     CALL   DOTIME
      goto  RFOUT
KEY3 
     CALL   DOSW
      goto  RFOUT
;-------------------------------
WAIT
      CALL  OUTWAIT
      MOVLW  H'0D'
      MOVWF  LS2
CF    CALL  SHIJI
   
WAITH1    BTFSC  PORTB,RF  ;先判断为H
         GOTO  WAITHH      ;为H待L
         BTFSS  INTCON,2
         GOTO  WAITH1
         GOTO ZD        ;指定周期内没有H中断一下,再判到到指定时间到
WAITHH
         BTFSS  PORTB,RF ;等待L
         GOTO  WAITL
         BTFSS  INTCON,2
         GOTO  WAITHH
ZD
        BTFSS   DSBZ,0
        GOTO    JIAN
        INCF    DSLANG,1
JIAN     DECFSZ   LS2,1 ;指定的时间内没有H L变化 则重新开始检测一下
        GOTO  CF
        CALL  RFOUT1
        MOVLW  H'0D'; H'26'
        MOVWF  LS2
;-------------------------
CF1        CALL  SHIJI
   
WAITH12     BTFSC  PORTB,RF  ;先检测有没有L,并等待H,在一个时苦内没有变化跳出,如果有变化则跳到H,如果是高, 说明已经复位了,则接收L
          GOTO  WAITHH1     
         BTFSS  INTCON,2
         GOTO  WAITH12
         GOTO OUT
WAITHH1
         BTFSS  PORTB,RF   ;如果真为L 则认为是开始遥控值,一段时间仍为H,则跳出
         GOTO  WAITL
         BTFSS  INTCON,2
         GOTO  WAITHH1
OUT
        BTFSS   DSBZ,0
        GOTO    JIA2
        INCF    DSLANG,1
JIA2    DECFSZ   LS2,1
        GOTO  CF1
  ;---------------------------
RFOUT1
            CLRF     YFML
            CLRF     YFMH
            CLRF     YFMLC
            CLRF     YFMHC
            CLRF     BZH
            CLRF     BZH1
            RETURN
RFOUT
            CLRF     YFML
            CLRF     YFMH
            CLRF     YFMLC
            CLRF     YFMHC
            CLRF     BZH
            CLRF     BZH1
             BSF ONBZ,XIANSHIBZ
             CALL  XIANSHICL
              CALL     ZILXM
                RETURN
;------------0.52MS时基----4*(256-126)-----------------
SHIJI
          bcf   INTCON,2
          movlw  D'126'
          movwf  TMR0
          return
;------------中断等待--------------------------------
OUTWAIT
          btfss  INTCON,2
           goto   OUTWAIT
          btfss  DSBZ,0
          return
          incf  DSLANG,1
          return
;--------------主中断----------------------------
OUTWAITMAIN
          btfss  INTCON,2
          goto   TEXTRF
          BTFSC  LFMBZJC,LFMBZ
          CALL   LFMCL
          btfss  DSBZ,0
          return
          incf  DSLANG,1
          return
TEXTRF
         btfss   PORTB,RF
         call   RFCL
         goto    OUTWAITMAIN
LFMCL
        DECFSZ  JSQ3,1
        RETURN
        BCF   LFMBZJC,LFMBZ
        RETURN
;----------------------------------
SPEEK
  BTFSC  RFSPEEK,YKSPBZ
  RETURN
   movlw  H'5'
  movwf  JSQ1
ys1a
  movlw  d'30'
  movwf  JSQ2
ys2a
   call spak
   decfsz JSQ2
   goto ys2a
   decfsz JSQ1
   goto ys1a
   return
spak 
    bsf  PORTA,SPEK
    call SHIJI
   call SJXIANSHICL
    call OUTWAIT 
   bcf  PORTA,SPEK
    call SHIJI
   call GNXIANSHICL
    call OUTWAIT 
       return
;--------------------  
LOOPTOP
        CLRF  PORTB
        BSF  STATUS,5
        MOVLW  H'F8'
        MOVWF  TRISB
        movlw H'00'
        movwf  TRISA
        movlw  H'01'
        movwf  OPTION_REG
        bcf  STATUS,5
;-------------处理寄存器-------------------
        CLRF  PORTB
        clrf  PORTA
        BSF   PORTA,0
        BSF   PORTA,1
        clrf  TMR0
        clrf  DSBZ
        clrf  DSLANG
        clrf  DSMES1
        clrf  DSMES2
        clrf  DSSET
        clrf  ONBZ
        CLRF  GNXIZI
        CLRF  SETTIME
        CLRF  YUANXIZI
    ;----------------------------------
            CLRF     YFML
            CLRF     YFMH
            CLRF     YFMLC
            CLRF     YFMHC
            CLRF     BZH
            CLRF     BZH1
            CLRF     RFSJBZ
            CLRF     LS2
            clrf     LS1
            CLRF     LFMBZJC
            CLRF     JSQ3
            CLRF    RFSPEEK
            call    SPEEK
            call    SPEEK
;-----------主程序----------------------------
MAIN
        BSF  PORTA,0
        BSF  PORTA,1
        BANKSEL  TRISB
        MOVLW  H'F8'
        MOVWF   TRISB
        BANKSEL   PORTB     
        NOP
RFTOP
        btfss PORTB,RF
        call  RFCL   ;RA4遥控处理
ra0
        btfss  PORTB,KEY_ONOFF
        call   KEYONOFF;RA0开关机处理
BZKBZ
        btfss  ONBZ,ONOFFBZ ;开机标志为0则返回,开机标志为1往下执行
        goto   RFTOP
ra2
        btfss  PORTB,KEY_SW
        call   KEYSW  ;RA2功能处理
ra1
        btfss  PORTB,KEY_SPEED
        call   KEYSPEED ;RA1定时处理
TOPTIME 
       BTFSS  PORTB,KEY_TIME
       CALL   KEYTIME
       CALL   XIANSHICL
        CALL   XIANSHICL
       BTFSC  RFSPEEK,YKSPBZ
       CALL  RFSPEEKCL
          
PDDSBZ_TOP
         btfss  DSBZ,0
         goto   MAIN
;------------等待中断--------------
         call OUTWAITMAIN
;------------恢复定时------------
         call SHIJI
;-----------判断是否到192 192*10*520=998400US=0.998S----
         movlw  d'148' ;D'192'
         subwf  DSLANG,0
         btfss  STATUS,C
         goto   MAIN
;---------判断是否到10*192---------------------------
         btfss  STATUS,Z
         NOP
         clrf  DSLANG
          movlw  d'10'  ;本来为10
         xorwf   DSMES1,0
         btfss  STATUS,Z
         goto   JIANDSMES1
;---------------判断寄存器是否到了60S----------
         clrf   DSMES1
         movlw  d'60'  ;本来为60
         xorwf  DSMES2,0
         btfss STATUS,Z
         goto   JIANDSMES2
;--------------定时标志寄存器-1------------
         clrf    DSMES2
         decfsz  SETTIME,1
         goto    MAIN
         goto    LOOP
;------------定时减去时的指示显示-----------

;-------------定时存贮1加1  (10)---------
JIANDSMES1
         incf  DSMES1,1
         goto   MAIN
;-------------定时存贮1加1(60s)---------
JIANDSMES2
         incf  DSMES2,1
         goto  MAIN
RFSPEEKCL
            CALL  GNXIANSHICL
            BCF  RFSPEEK,YKSPBZ
            CALL  SPEEK
            RETURN
end

  • 上一篇: PIC单片机做的遥控解码程序
  • 下一篇: 四位数码管时钟显示的时钟程序
  • 发表评论   告诉好友   打印此文  收藏此页  关闭窗口  返回顶部
    热点文章
     
    推荐文章
     
    相关文章
    网友评论:(只显示最新5条。)
    关于我们 | 联系我们 | 广告合作 | 付款方式 | 使用帮助 | 机电之家 | 会员助手 | 免费链接

    点击这里给我发消息66821730(技术支持)点击这里给我发消息66821730(广告投放) 点击这里给我发消息41031197(编辑) 点击这里给我发消息58733127(审核)
    本站提供的机电设备,机电供求等信息由机电企业自行提供,该企业负责信息内容的真实性、准确性和合法性。
    机电之家对此不承担任何保证责任,有侵犯您利益的地方请联系机电之家,机电之家将及时作出处理。
    Copyright 2007 机电之家 Inc All Rights Reserved.机电之家-由机电一体化网更名-声明
    电话:0571-87774297 传真:0571-87774298
    杭州滨兴科技有限公司提供技术支持

    主办:杭州市高新区(滨江)机电一体化学会
    中国行业电子商务100强网站

    网站经营许可证:浙B2-20080178-1