首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
HT46R47单片机HT6221遥控接收程序
来源:本站整理  作者:佚名  2011-08-04 10:14:24



;; ****************************************************
; * Filename : HT6221.ASM                             *
; * Function : 23:21 2011-7-1                     *                 
; * MICroprocessor : HT46R47/18DIP                    *
; * Crystal : 4MHz                                    *
; *****************************************************
;                  ___________
;       PA3/PFD---|           |-----PA4/TMR
;       PA2-------|           |-----PA5/ /INT
;       PA1-------|           |-----PA6
;       PA0-------|           |-----PA7
;       PB3/AN3---|           |-----OSC2
;       PB2/AN2---|           |-----OSC1
;       PB1/AN1---|           |-----VDD
;       PB0/AN0---|           |-----/RES
;       VSS-------|           |-----PD0/PWM
;                  ___________
;                    HT46R47
;******************************************************
#include    HT46R47.INC       ;
;******************************************************
DATA  .SECTION   ’DATA’        ;
R11       EQU   [40H]          ;
R22       EQU   [41H]          ;

AD_DL     EQU   [42H]          ;
AD_DM     EQU   [43H]          ;
AD_DH     EQU   [44H]          ;
TEMP      EQU   [45H]          ;

BIT_CNT   EQU   [46H]          ;
TIME_CNT  EQU   [47H]          ;
CNT0      EQU   [48H]          ;

CSR0      EQU   [49H]          ;
CSR1      EQU   [4AH]          ;
CSR2      EQU   [4BH]          ;
CSR3      EQU   [4CH]          ;

INT_ACC   EQU   [4DH]          ;
SEC1_CNT  EQU   [4EH]          ;
SEC2_CNT  EQU   [4FH]          ;
;--------------------------------
FLAG1     EQU   [50H]          ;
B_BEGIN   EQU   FLAG1.0        ;
B_REC_OK  EQU   FLAG1.1        ;
B_KEY_WORK EQU  FLAG1.2        ;
B_DP1     EQU   FLAG1.3        ;
B_DP2     EQU   FLAG1.4        ;
B_KEY     EQU   FLAG1.5        ;
B_KEY_OK  EQU   FLAG1.6        ;
B_DISP_E  EQU   FLAG1.7        ;
;--------------------------------
K_ION     EQU   PA.0           ;
K_TIMER   EQU   PA.1           ;
K_RH      EQU   PA.2           ;
K_ONOFF   EQU   PA.3           ;
;---------------------------------
;K_ION     EQU   KEY_TEMP.0     ;
;K_TIMER   EQU   KEY_TEMP.1     ;
;K_RH      EQU   KEY_TEMP.2     ;
;K_ONOFF   EQU   KEY_TEMP.3     ;
;---------------------------------
WORK_TMR0     EQU [51H]        ;
WORK_TMR1     EQU [52H]        ;

KEY_BUF       EQU [53H]        ;
KEY_TEMP      EQU [54H]        ;

TIMER_LOW_CNT EQU [55H]        ;
TIMER_HI_CNT  EQU [56H]        ;
RH_LOW_CNT    EQU [57H]        ;
RH_HI_CNT     EQU [58H]        ;
ONOFF_LOW_CNT EQU [59H]        ;
ONOFF_HI_CNT  EQU [5AH]        ;

CNT1          EQU [5BH]        ;
CNT2          EQU [5CH]        ;
BUF1          EQU [5DH]        ;
BUF2          EQU [5EH]        ;
BUF3          EQU [5FH]        ;
BUF           EQU [60H]        ;
;----------------------------------
KEY_SAVE      EQU [61H]        ;
KEY_SAVE0     EQU [62H]        ;
KEY_SAVE1     EQU [63H]        ;
KEY_DELAY     EQU [64H]        ;
KEY_DELAY1    EQU [69H]        ;
BUF1A         EQU [65H]        ;
BUF2A         EQU [66H]        ;
BUF3A         EQU [67H]        ;
DISP_BIT      EQU [68H]        ;
KEY_VALUE     EQU [6AH]        ;
;***********************************
CODE  .SECTION  AT  00H  ’CODE’
          ORG    00H           ;
          JMP    START1        ;
          ORG    04H           ;INT中断入口
          JMP    ACCEPT_INT    ;
          ORG    08H           ;定时/计数器中断入口
          JMP    ACCEPT_TMR0   ;
          ORG    0CH           ;A/D转换中断入口
          RETI                 ;  
;---------------------------------
START1:
          CALL   RAM_CLR       ;
          
          MOV    A,00100000B   ;
          MOV    PAC,A         ;
          MOV    PA,A          ;PA0--PA7=输出
          
          MOV    A,00000000B   ;
          MOV    PBC,A         ;PB0--PB3=输入
          MOV    PB,A          ;
;--------------------------------          
          MOV    A,10000010B   ;Fsys/2 定时器方式 TMRC.4=TON=0关定时/计时器
          MOV    TMRC,A        ; 
                   
          MOV    A,00H         ;
          MOV    ADCR,A        ;PCR2,PCR1,PCR0=0为数字I/O口
          
          MOV    A,01H         ;
          MOV    ACSR,A        ;SYS/8
          
          MOV    A,156         ;初值206
          MOV    TMR,A         ;100us*{(Fint=Fsys/4) [系统时间=1/(4M/4)=1]}=100us中断

          SET    TMRC.4        ;开定时/计时器
         
          MOV    A,07H         ;开总中断,开外部中断,开定时器中断
          MOV    INTC,A        ; 
         
          MOV    A,32          ;
          MOV    BIT_CNT,A     ;
          MOV    A,0FFH        ;
          MOV    KEY_VALUE,A   ;
          
          CLR    B_DISP_E      ;          
;          MOV    A,02H         ;
;          MOV    BUF1,A        ;
;          MOV    BUF2,A        ;
;          MOV    BUF3,A        ;

;          SET    BUF2          ;
;          SET    BUF3          ;
          SET    B_DISP_E      ;           
;***********************************

          
                            
;***********************************        
LOOP_MAIN:
          CLR     WDT          ;
          CALL    KEY_TEST     ;
;----------------------------------- 
;          MOV     A,0FFH       ;
;          XOR     A,KEY_VALUE  ;         
;          SZ      Z            ;
;          JMP     LOOP_MAIN    ;
;-----------------------------------         
;          MOV    A,01H         ;
;          XOR    A,KEY_VALUE   ;
;          SNZ    Z             ;         
;          JMP    LOOP_MAIN     ;
          
;          CLR    B_DISP_E      ;
;          MOV    A,01H         ;
;          XORM   A,BUF1        ;
;          SET    B_DISP_E      ;
          JMP    LOOP_MAIN     ;
;**********************************          
          
          
          
;**********************************
KEY_TEST:
         SZ      KEY_SAVE1     ;
         JMP     $+2           ;
         RET                   ;
         MOV    A,07H          ;
         XOR    A,KEY_SAVE1    ;
         SZ     Z              ;
         JMP    ONOFF_1        ;
         
         MOV    A,0BH          ;
         XOR    A,KEY_SAVE1    ;
         SZ     Z              ;         
         JMP    RH_1           ;
         
         MOV    A,0DH          ;
         XOR    A,KEY_SAVE1    ;
         SZ     Z              ;
         JMP    TIMER_1        ;
         
         MOV    A,0EH          ;
         XOR    A,KEY_SAVE1    ;
         SZ     Z              ;
         JMP    ION_1          ; 
;===================================          
         MOV    A,0FFH         ;
         MOV    KEY_VALUE,A    ;
KEY_OUT:         
         CLR    KEY_SAVE1      ;       
         RET                   ;  
;==================================                 
ONOFF_1:
         MOV    A,01H          ;
         MOV    KEY_VALUE,A    ; 
         
         CLR    B_DISP_E       ;                  
         MOV    A,01H          ;
         XORM   A,BUF1         ;  
         SET    B_DISP_E       ;   
                               
         JMP    KEY_OUT        ;
;=====================================         
RH_1:
         MOV    A,02H          ;
         MOV    KEY_VALUE,A    ;  
         
         CLR    B_DISP_E       ;                  
         MOV    A,01H          ;
         XORM   A,BUF2         ;  
         SET    B_DISP_E       ;                 
         JMP    KEY_OUT        ;
;======================================       
TIMER_1:
         MOV    A,03H          ;
         MOV    KEY_VALUE,A    ; 
         
         CLR    B_DISP_E       ;                  
         CLR    BUF1           ;
         CLR    BUF2           ;
         CLR    BUF3           ; 
         SET    B_DISP_E       ;                  
         JMP    KEY_OUT        ;
;=====================================         
ION_1:
         MOV    A,04H          ;
         MOV    KEY_VALUE,A    ;   
         
         CLR    B_DISP_E       ;                  
         SET    BUF1           ;
         SET    BUF2           ;
         SET    BUF3           ; 
         SET    B_DISP_E       ;               
         JMP    KEY_OUT        ;
;*************************************         
         
         
;**********************************
ACCEPT_TMR0:
         INC     TIME_CNT      ;
         CLR     INTC.5        ;
         
         MOV     A,156         ;初值156
         MOV     TMR,A         ;100us*1=100us中断
         INC     WORK_TMR0     ;         

         MOV     A,10          ;10*100US=1MS
         SUB     A,WORK_TMR0   ;
         SZ      C             ;
         JMP     KEY_EXIT      ;
         CLR     WORK_TMR0     ; 
         
         INC     WORK_TMR1     ;  
         MOV     A,6           ;6*1MS=6MS
         SUB     A,WORK_TMR1   ;
         SZ      C             ;
         JMP     DISP_SCAN     ;
         CLR     WORK_TMR1     ;         
;==================================         
KEY_SCAN:
         SZ      B_KEY_OK      ;
         JMP     KEY_WAIT      ;
;==================================         
         MOV     A,00100000B   ;
         MOV     PAC,A         ;
         MOV     A,2FH         ;
         MOV     PA,A          ;
         CLR     PB.2          ;
         NOP                   ;
         NOP                   ;
         NOP                   ;
         NOP                   ;
         NOP                   ;
         NOP                   ;
         MOV     A,00101111B   ;
         MOV     PAC,A         ; 
         MOV     PA,A          ;
         NOP                   ;
         NOP                   ;
         NOP                   ;
         NOP                   ;
         NOP                   ;
         NOP                   ;
         MOV     A,PA          ;  
         AND     A,0FH         ;   
         MOV     KEY_SAVE,A    ;
         MOV     A,0FH         ;
         XOR     A,KEY_SAVE    ; 
         SNZ     Z             ;KEY_BUF=0FH  Z=1  KEY_BUF不等于0FH Z=0
         JMP     KEY_SCAN0     ; 
         
         CLR     KEY_SAVE      ;         
         CLR     KEY_SAVE0     ;
         JMP     KEY_EXIT      ;
;===================================        
KEY_SCAN0:         
         MOV     A,00100000B   ;
         MOV     PAC,A         ;
         MOV     A,2FH         ;
         MOV     PA,A          ;
         CLR     PB.2          ;         
         NOP                   ;
         NOP                   ;
         NOP                   ;
         NOP                   ;
         NOP                   ;
         NOP                   ;
         MOV     A,00101111B   ;
         MOV     PAC,A         ; 
         MOV     PA,A          ;
         NOP                   ;
         NOP                   ;
         NOP                   ;
         NOP                   ;
         NOP                   ;
         NOP                   ;
         MOV     A,PA          ;  
         AND     A,0FH         ; 
         MOV     KEY_SAVE0,A   ; 
         
         MOV     A,0FH         ;         
         XOR     A,KEY_SAVE0   ;
         SNZ     Z             ;
         JMP     KEY_SCAN1     ;
         
         CLR     KEY_SAVE      ;         
         CLR     KEY_SAVE0     ;
         JMP     KEY_EXIT      ;
;===================================        
KEY_WAIT:
         MOV     A,00100000B   ;
         MOV     PAC,A         ;
         MOV     A,2FH         ;
         MOV     PA,A          ;
         CLR     PB.2          ;
         NOP                   ;
         NOP                   ;
         NOP                   ;
         NOP                   ;
         NOP                   ;
         NOP                   ;
         MOV     A,00101111B   ;
         MOV     PAC,A         ; 
         MOV     PA,A          ;
         NOP                   ;
         NOP                   ;
         NOP                   ;
         NOP                   ;
         NOP                   ;
         NOP                   ;
         MOV     A,PA          ;  
         AND     A,0FH         ;   
         MOV     KEY_SAVE,A    ;
         MOV     A,0FH         ;
         XOR     A,KEY_SAVE    ; 
         SNZ     Z             ;KEY_BUF=0FH  Z=1  KEY_BUF不等于0FH Z=0
         JMP     KEY_SCAN2     ;  
;---------------------------------         
KEY_SCANA:
         INC     KEY_DELAY1    ;
         MOV     A,3           ;3*5MS=15MS
         SUB     A,KEY_DELAY1  ;
         SZ      C             ; 
         JMP     KEY_SCAN2     ;  
         CLR     KEY_DELAY1    ;
         
         CLR     B_KEY_OK      ;
         
         MOV     A,KEY_SAVE0   ;
         MOV     KEY_SAVE1,A   ;
         JMP     KEY_SCAN2     ;                 
;==================================         
KEY_SCAN1:
         MOV     A,KEY_SAVE    ;
         XOR     A,KEY_SAVE0   ;
         SNZ     Z             ;
         JMP     KEY_SCAN2     ;
          
         INC     KEY_DELAY     ;
         MOV     A,6           ;6*5MS=30MS
         SUB     A,KEY_DELAY   ;
         SZ      C             ; 
         JMP     KEY_EXIT      ;
         
         SET     B_KEY_OK      ;
         CLR     KEY_SAVE      ;  
         CLR     KEY_SAVE1     ;  
;==================================        
KEY_SCAN2:  
         CLR     KEY_DELAY     ;                 
KEY_EXIT:
         MOV     A,00100000B   ;
         MOV     PAC,A         ;   
         RETI                  ;  
;=================================
         
                     
;================================= 
DISP_SCAN:
         MOV     A,00100000B   ;
         MOV     PAC,A         ;
         MOV     A,0FH         ;
         MOV     PA,A          ;
         
         SNZ     B_DISP_E      ;
         JMP     DISP_SCAN0    ;
         CLR     B_DISP_E      ;
         MOV     A,BUF1        ;更新显示数据
         MOV     BUF1A,A       ;
         MOV     A,BUF2        ;
         MOV     BUF2A,A       ;
         MOV     A,BUF3        ;
         MOV     BUF3A,A       ;
DISP_SCAN0:
         MOV     A,DISP_BIT    ;
         ADDM    A,PCL         ;
         JMP     DISP_COM1     ;
         JMP     DISP_COM2     ;
         JMP     DISP_COM3     ;
DISP_COM1:
         MOV     A,BUF1A       ;
         AND     A,0FH         ;
         MOV     PA,A          ;
         SET     PA.4          ;
         JMP     DISP_COM      ;
DISP_COM2:
         MOV     A,BUF2A       ;
         AND     A,0FH         ;
         MOV     PA,A          ;
         SET     PA.6          ;
         JMP     DISP_COM      ; 
DISP_COM3:
         MOV     A,BUF3A       ;
         AND     A,0FH         ;
         MOV     PA,A          ;
         SET     PB.2          ;
         JMP     DISP_COM      ; 
DISP_COM:
         INC     DISP_BIT      ;
         NOP                   ;
         MOV     A,3           ;
         SUB     A,DISP_BIT    ;
         SZ      C             ;
         JMP     KEY_EXIT      ;
         CLR     DISP_BIT      ;
         JMP     KEY_EXIT      ;                                  
;*********************************



;*********************************
ACCEPT_INT:
         MOV     INT_ACC,A     ;
         CLR     INTC.4        ;清INT中断标志位
                  
         CLR     INTC.0        ;关总中断
         CLR     TMRC.4        ;关定时/计时器
         
         MOV     A,TIME_CNT    ;
         MOV     CNT0,A        ;
         CLR     TIME_CNT      ;
;---------------------------------
         SZ      B_BEGIN       ;
         JMP     BIT_0         ;
         
         MOV     A,125         ;125*100US=12.5MS
         SUB     A,CNT0        ;
         SZ      C             ;
         JMP     INT_EXIT      ;
         
         MOV     A,145         ;145*100US=14.5MS
         SUB     A,CNT0        ;A > CNT0  C=1  A < CNT0 C=0
         SNZ     C             ;
         JMP     INT_EXIT      ;
         
         SET     B_BEGIN       ;
         CLR     TIME_CNT      ; 
         CLR     CNT0          ;
         JMP     INT_EXIT      ;   
;==================================                 
BIT_0:
         MOV     A,8           ;data 值小于100μs*8=800μs 判断错误
         SUB     A,CNT0        ;
         SZ      C             ;
         JMP     INT_ERR       ;
         
         MOV     A,26          ;data 值大于100μs*26=2.6ms 判断错误
         SUB     A,CNT0        ;A-CNT0 无借位 C=1 有借位 C=0
         SNZ     C             ;
         JMP     INT_ERR       ;
         
         MOV     A,CNT0        ;data 值大于100μs*16=1.6ms c=1, data=1
         SUB     A,16          ;data 值小于100μs*16=1.6ms c=0, data=0
;---------------------------------   
         RRC     CSR3          ;
         RRC     CSR2          ;
         RRC     CSR1          ;
         RRC     CSR0          ;
         SDZ     BIT_CNT       ;
         JMP     INT_EXIT      ;    
         SET     B_REC_OK      ;
         MOV     A,32          ;
         MOV     BIT_CNT,A     ;
;----------------------------------         
         CLR    B_DISP_E       ;                  
         MOV    A,01H          ;
         XORM   A,BUF2         ;  
         SET    B_DISP_E       ;        
;----------------------------------         
INT_ERR:
         CLR     B_BEGIN       ;                  
INT_EXIT:
         MOV     A,156         ;初值156
         MOV     TMR,A         ;100us*1=100us中断
         
         MOV     A,INT_ACC     ;   
              
         SET     TMRC.4        ;开定时/计时器
         SET     INTC.0        ;开总中断
         RETI                  ;
;**********************************


;**********************************
RES_AD:
          CLR    INTC.0        ;关总中断
          CLR    INTC.3        ;A/D中断控制位EADI
          MOV    A,00001000B   ;
          MOV    ADCR,A        ;PB0/AN0湿度检测口 PB1--PB3=0为数字I/O口

          MOV    A,01H         ;
          MOV    ACSR,A        ;SYS/8
;---------------------------------
          CLR    ADCR.7        ;
          NOP                  ;
          SET    ADCR.7        ;ADCR.7=START
          NOP                  ;
          CLR    ADCR.7        ;
AD_LOOP:
          NOP                  ;
          NOP                  ;
          SZ     ADCR.6        ;ADCR.6=EOR
          JMP    AD_LOOP       ;
;---------------------------------
          CLR    INTC.6        ;ADF转换中断请求位
          
          MOV    A,ADRH        ;
          MOV    AD_DL,A       ;
          MOV    AD_DM,A       ;
          
          RL     AD_DL         ;高位左移一位
          MOV    A,0FEH        ;
          ANDM   A,AD_DL       ;
;---------------------------------
          MOV    A,ADRL        ;低位数据右移7位
          MOV    AD_DH,A       ;
          RR     AD_DH         ;
          RR     AD_DH         ;
          RR     AD_DH         ;
          RR     AD_DH         ;
          RR     AD_DH         ;
          RR     AD_DH         ;
          RR     AD_DH         ;
          MOV    A,01H         ;
          AND    A,AD_DH       ;
          OR     A,AD_DL       ;
          MOV    AD_DL,A       ;D0-D7数据
;---------------------------------
          RR     AD_DM         ;高位右移7位
          RR     AD_DM         ;
          RR     AD_DM         ;
          RR     AD_DM         ;
          RR     AD_DM         ;
          RR     AD_DM         ;
          RR     AD_DM         ;
          MOV    A,01H         ;
          AND    A,AD_DM       ;
          MOV    AD_DH,A       ;D8高位数据
          
          CLR    AD_DM         ;   
          CLR    ADCR.7        ;
          SET    ADCR.7        ;
          SET    INTC.0        ;开总中断 
                       
          NOP                  ;
          RET                  ;
;**********************************      
          
          
          

;**********************************
RAM_CLR   PROC                  ;
          MOV     A,40H         ;
          MOV     MP0,A         ;
          MOV     A,64          ;
          MOV     TEMP,A        ;
RAM_CLR1:
          CLR     R0            ;
          INC     MP0           ;
          SDZ     TEMP          ;
          JMP     RAM_CLR1      ;
          RET                   ;
RAM_CLR   ENDP                  ;
;**********************************

;==================================
;         INC     SEC1_CNT      ;
;         MOV     A,100         ;
;         SUB     A,SEC1_CNT    ;
;         SZ      C             ;
;         JMP     TMR0_EXIT     ;
;         CLR     SEC1_CNT      ;
         
;         INC     SEC2_CNT      ;
;         MOV     A,100         ;
;         SUB     A,SEC2_CNT    ;
;         SZ      C             ;
;         JMP     TMR0_EXIT     ;
;         CLR     SEC2_CNT      ;
         
;         MOV     A,08H         ;
;         XORM    A,PA          ;   
;================================= 
;=================================            
;          SNZ    B_REC_OK      ;
;          JMP    MAIN1         ;
;          CLR    B_REC_OK      ;  
;          MOV    A,04H         ;
;          XORM   A,PA          ;    
;          CALL   RES_AD        ;
;MAIN1:
;=================================

;**********************************
DELAY:
          MOV    A,90H         ;
          MOV    R11,A         ;
          MOV    R22,A         ;
DEL1:
          SDZ    R22           ;
          JMP    DEL1          ;
          SDZ    R11           ;
          JMP    DEL1          ;
          RET                  ;
;**********************************
          ORG    400H          ;
DC        007EH,003CH,0018H,0000H,00E7H,00C3H,0081H,0055H  ;
DC        00AAH,0000H,00FFH,0001H,0002H,0004H,0008H,0010H  ;
          END                  ;HT46R47单片机HT6221遥控接收程序

关键词:

·上一文章:em78p153驱动1602源程序
·下一文章:AT89C52超声波测距器

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:36,312.50000 毫秒