51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机技术文章 > PIC单片机 > 详细内容
SC1621摇控器-PIC单片机解码程序(已测试OK)
发布时间:2009/7/19  阅读次数:609  字体大小: 【】 【】【

;*APPLICATION NOTE   E6000 ICEXPLORER ******************
;* Title:                                                                                         ;
;SC6121的遥控器发射码依次为:同步头(引导码)+32位数据码 ;
;(用户码低8位+用户码高8位+键码+键码的反码)                       ;
;引导码是由9MS的高电平加4.5MS的低电平构成,                       ;
;我们接收到的刚好反相为9MS的低电平加4.5MS的高电平.       ;
;数据码0是由560US的高电平加560US的低电平构成               ;
;接收时反相为560US的低电平加560US的高电平构成=1.125mS ;
;数据码1是由560US的高电平加1.69MS的高电平构成             ;
;接收时反相为560US的低电平加1.69MS的高电平构成=2.25mS ;
;* Version:                 00                                                               ;
;* Last Updated:       2006.06.09                                               ;
;* MCU:                         PIC16C74                                                   ;
;* FOR:                         www.picavr.com                                       ;
;******************************************************
;***ROM   PCLATH.D3=0   000H-7FFH                                             ;
;   PCLATH.D3=1   800H-FFFH                                             ;
;******************************************************
;** RAM       BANK0=20H---7FH  STATUS RP0=0,RP1=0       ;
;**               BANK1=A0H---FFH  STATUS RP0=1,RP1=0       ;
;**               BANK2=100H--17FH         STATUS RP1=1,RP0=0       ;
;**               BANK3=180H--1FFH         STATUS RP1=1,RP0=1       ;
;******************************************************
;                            ________________
;       MCLR/VPP/TH-| 1                     40 |-RB7/PGD
;               RA0/AN0-| 2                     39 |-RB6/PGC
;               RA1/AN1-| 3                     38 |-RB5
; RA2/AN2/VRref--| 4                     37 |-RB4
; RA3/AN3/VRref+-| 5                     36 |-RB3/PGM
;           RA4/TOCKI-| 6                     35 |-RB2
;         RA5/AN4/SS-| 7                     34 |-RB1
;         RE0/RD/AN5-| 8                     33 |-RB0/INT
;         RE1/WR.AN6-| 9                     32 |-VDD
;         RE2/CS/AN7-| 10                   31 |-VSS
;                       VDD-| 11                   30 |-RD7/PSP7
;                        VSS-| 12                   29 |-RD6/PSP6
;         OSC1/CLKIN-| 13                   28 |-RD5/PSP5
;       OSC2/CLKOUT-| 14                   27 |-RD4/PSP4
; RC0/TISO/TICKI-| 15                   26 |-RC7/RX/DT
; RC1/T1OSI/CCP2-| 16                   25 |-RC6/TX/CK
;              RC2/CCP1-| 17                   24 |-RC5/SDO
;       RC3/SCK/SCL-| 18                   23 |-RC4/SDA
;             RD0/PSP0-| 19                   22 |-RD3/PSP3
;             RD1/PSP1-| 20                   21 |-RD2/PSP2
;                                  ~~~~~~~~~~~~~~~
;                 16F74A
;****************************************************
RMT                   EQU   0                   ;遥控接收输入脚位地址(RB。0)
;-------------------------------------------------
BITIN               EQU   7                   ;遥控接收数据位位标志
;-------------------------------------------------
CNT0                 EQU 20H                 ;用户临时寄存器1
CNT1                 EQU 21H                 ;用户临时寄存器2
CNT2                 EQU 22H                 ;用户临时寄存器3
CNT3                 EQU 23H                 ;用户临时寄存器4
TABADD             EQU 24H                 ;数码管显示码取码用寄存器
FLAGS               EQU 25H                 ;显示位选标志位
DISPBUF_H       EQU 26H                 ;显示器高位
DISPBUF_L       EQU 27H                 ;显示器低位

FLAGS2             EQU 28H                 ;临时寄存器

W_TEMP             EQU 2AH                 ;W现场保护寄存器
STATUS_TEMP   EQU 2BH                 ;STATUS现场保护寄存器

CSR0                 EQU 2CH                 ;遥控键码反码寄存器
CSR1                 EQU 2DH                 ;遥控器键码寄存器
CSR2                 EQU 2EH                 ;遥控器用户码高8位寄存器
CSR3                 EQU 2FH                 ;遥控器用户码低8位寄存器

CSR0A               EQU 30H                 ;遥控接收32位数据暂存寄存器
CSR1A               EQU 31H                 ;遥控接收32位数据暂存寄存器
CSR2A               EQU 32H                 ;遥控接收32位数据暂存寄存器
CSR3A               EQU 33H                 ;遥控接收32位数据暂存寄存器
;**************************************************
CONT1               EQU 7FH                 ;
;**************************************************
                       ORG 0000H
                       GOTO MAIN
                       ORG   0004H
                       RETFIE                     ;
                       ORG   0008H
;************************************************
MAIN:
  CALL       RESET_             ;BANK0--BANK1清0

  CLRF  STATUS             ;清状态寄存器口
               BSF         STATUS,RP0     ;BANK-1
;------------------------------------------------
               MOVLW     0FH                   ;00001111设定:RB口不用上拉,分频器配给WDT
               MOVWF     OPTION_           ;分频比设为1:256
               MOVLW     02H                   ;00000010转换结果左对齐,只选3个A/D通道RA0/AN0,RA1,RA3
               MOVWF     ADCON1             ;选择VDD和VSS作参考源
;------------------------------------------------
               MOVLW     00H
               MOVWF     TRISC               ;PORTC所有管脚设为输出
               MOVLW     01H                   ;
               MOVWF     TRISB               ;RB0=输入
               MOVLW     0FFH                 ;
               MOVWF     TRISA               ;
;------------------------------------------------
               BCF         STATUS,RP0     ;BANK-0
;------------------------------------------------
               MOVLW     01001001B       ;01001001选择:时钟时钟源为FOSC/8,允许ADC工作
               MOVWF     ADCON0             ;通道AN1,暂时不启动转换过程
               BCF         PIR1,   ADIF   ;清除A/D中断标志位
;------------------------------------------------
               MOVLW     00H                   ;
               MOVWF     PORTC               ;
               MOVLW     0FFH                 ;
               MOVWF     PORTB               ;
;*****************************************************
LOOP:
               NOP                                   ;
               NOP                                   ;
;*****************************************************
RCV:
               BTFSC           PORTB,RMT
               GOTO             LOOP                     ;是干扰退出
               MOVLW           4
               MOVWF           CNT1                     ;4*256*10us
               CLRF             CNT2
               CLRF             CNT0
RCV1:                                                         ;先检测引导码的9MS低电平
               GOTO             $+1                       ;每一个循环10US
               NOP                                             ;
               BTFSC           PORTB,RMT           ;
               INCF             CNT2,1                 ;
               BTFSS           PORTB,RMT           ;
               CLRF             CNT2                     ;
               BTFSC           CNT2,3                 ;高电平大于8*10US=80US则为有效高电平,否则是一些干扰信号
               GOTO             RCV2                     ;

               DECFSZ         CNT0,1                 ;
               GOTO             RCV1                     ;
               DECFSZ         CNT1,1                 ;
               GOTO             RCV1                     ;
               GOTO             LOOP                     ;低电平大于4*256*10US=10.24MS则是错误脉冲
RCV2:
               MOVLW           3
               SUBWF           CNT1,0                 ;低电平小于2*256*10US=5.12MS则是错误脉冲
               BTFSC           STATUS,C             ;
               GOTO             LOOP                     ;

               MOVLW             3                         ;
               MOVWF           CNT1                     ;3*256*10us
               CLRF             CNT2                     ;
               CLRF             CNT0                     ;
;*************************************************
RCV3:
               GOTO             $+1                       ;每一个循环10US
               NOP
               BTFSS           PORTB,RMT
               INCF             CNT2,1
               BTFSC           PORTB,RMT
               CLRF             CNT2
               BTFSC           CNT2,3                   ; 低电平大于8*10US=80US则为有效低电平,否则是一些干扰信号
               GOTO             RCV4
               DECFSZ         CNT0,1
               GOTO             RCV3
               DECFSZ         CNT1,1
               GOTO             RCV3
               GOTO             LOOP                       ;高电平大于3*256*10US=7.68MS则是错误的
;**************************************************
RCV4:
               MOVLW           3
               SUBWF           CNT1,0                   ;高电平小于1*256*10US=2.56MS则是错误的
               BTFSC           STATUS,C               ;
               GOTO             LOOP

               MOVLW           32
               MOVWF           CNT2                       ;接收数据共32位,16位用户码,8位控制码加8位控制码的反码
RCV5:
               CLRF             CNT3
               MOVLW           170                         ;低电平大于256-170=86*10US=860US错误
               MOVWF           CNT0
               MOVLW           56
               MOVWF           CNT1                       ;高电平大于256-56=200*10US=2MS错误
RCV5_HI:
               GOTO             $+1
               NOP
               BTFSC           PORTB,RMT
               INCF             CNT3,1
               BTFSS           PORTB,RMT
               CLRF             CNT3
               BTFSC           CNT3,2                   ;高电平大于8*10US=80US则为有效高电平
               GOTO             RCV6
               INCFSZ         CNT0,1
               GOTO             RCV5_HI                 ;低电平大于860US则是错误的
               GOTO             LOOP
RCV6:
               CLRF             CNT3
RCV6_LO:
               GOTO             $+1
               NOP
               BTFSS           PORTB,RMT
               INCF             CNT3,1
               BTFSC           PORTB,RMT
               CLRF             CNT3
               BTFSC           CNT3,3                   ;低电平大于10*8US=80US则是有效低电平
               GOTO             COMPARE
               INCFSZ         CNT1,1
               GOTO             RCV6_LO                 ;高电平大于256-56=200*10US=2MS错误
               GOTO             LOOP
COMPARE:
               MOVLW           170
               SUBWF           CNT0,1                   ;CNT0的值减初始值等于实际低电平计数值
               MOVLW           56
               SUBWF           CNT1,1                   ;CNT1的值减初始值等于实际高电平计数值
               MOVFW           CNT1
               ADDWF           CNT0,1                   ;将高低电平的计数加在一起并存入CNT0,通过比较高低电平总的时间来确定是1还是0
               BTFSC           STATUS,C               ;
               GOTO             LOOP                       ;总的值大于255(即时间大于255*10US=2.55MS)则错误
               MOVLW           70
               SUBWF           CNT0,0
               BTFSS           STATUS,C               ;
               GOTO             LOOP                       ;总的时间小于70*10US=700US则是错误的
               MOVLW           130                         ;130*10=1.3MS
               SUBWF           CNT0,0
               BTFSC           STATUS,C               ;
               GOTO             COMPARE_H             ;时间大于1.3MS转去确定是否1
               BCF               FLAGS2,BITIN       ;时间在700US-1.3MS之间则是0
               GOTO             MOVDATA                 ;送数
COMPARE_H:
               MOVLW           160
               SUBWF           CNT0,0
               BTFSS           STATUS,C               ;
               GOTO             LOOP                       ;小于160*10US=1.6MS,则错误
               MOVLW           230
               SUBWF           CNT0,0
               BTFSC           STATUS,C               ;
               GOTO             LOOP                       ;大于230*10US=2.3MS,则错误
               BSF               FLAGS2,BITIN       ;时间在1.6MS-2.3MS之间则是1
MOVDATA:
               RRF               CSR0A,1                 ;将每一位移入相应寄存器
               RRF               CSR1A,1
               RRF               CSR2A,1
               RRF               CSR3A,1
               BCF               CSR0A,7
               BTFSC           FLAGS2,BITIN       ;接收当前位送入CSR0.7
               BSF               CSR0A,7
               DECFSZ         CNT2,1                   ;是否接收完32位
               GOTO             RCV5


               MOVFW           CSR0A                     ;将临时寄存器中的数存回相应寄存器
               MOVWF           CSR0
               MOVFW           CSR1A
               MOVWF           CSR1
               MOVFW           CSR2A
               MOVWF           CSR2
               MOVFW           CSR3A
               MOVWF           CSR3

               COMF             CSR0,0                   ;比较键码的反码取反后是否等于键码
               XORWF           CSR1,0
               BTFSS           STATUS,2               ;
               GOTO             LOOP                       ;不等于则接收到的是错误的信息
                                                                     ;将键码送显示
;**********************************************
               MOVLW           03H                         ;
               SUBWF           CSR1,W                   ;
               BTFSC           STATUS,Z               ;
               GOTO             S2                           ;
              
               MOVLW           02H                         ;
               SUBWF           CSR1,W                   ;
               BTFSC           STATUS,Z               ;
               GOTO             S3                           ;
              
               MOVLW           01H                         ;
               SUBWF           CSR1,W                   ;
               BTFSC           STATUS,Z               ;
               GOTO             S4                           ;
              
               MOVLW           00H                         ;
               SUBWF           CSR1,W                   ;
               BTFSC           STATUS,Z               ;
               GOTO             S5                           ;
              
               MOVLW           07H                         ;
               SUBWF           CSR1,W                   ;
               BTFSC           STATUS,Z               ;
               GOTO             S6                           ;
              
               MOVLW           06H                         ;
               SUBWF           CSR1,W                   ;
               BTFSC           STATUS,Z               ;
               GOTO             S7                           ;
              
               MOVLW           05H                         ;
               SUBWF           CSR1,W                   ;
               BTFSC           STATUS,Z               ;
               GOTO             S8                           ;

               MOVLW           04H                         ;
               SUBWF           CSR1,W                   ;
               BTFSC           STATUS,Z               ;
               GOTO             S9                           ;

               MOVLW           08H                         ;
               SUBWF           CSR1,W                   ;
               BTFSC           STATUS,Z               ;
               GOTO             S10                         ;                                    
              
               GOTO             LOOP                       ;
S2:         BSF               PORTC,0                 ;
               GOTO             LOOP                       ;
S3:         BSF               PORTC,1                 ;
               GOTO             LOOP                       ;
S4:         BSF               PORTC,2                 ;
               GOTO             LOOP                       ;
S5:         BSF               PORTC,3                 ;
               GOTO             LOOP                       ;
S6:         BSF               PORTC,4                 ;
               GOTO             LOOP                       ;
S7:         BSF               PORTC,5                 ;
               GOTO             LOOP                       ;
S8:         BSF               PORTC,6                 ;
               GOTO             LOOP                       ;
S9:         BSF               PORTC,7                 ;
               GOTO             LOOP                       ;
S10:       CLRF             PORTC                     ;
               GOTO             LOOP                       ;                                                                            
;---------------------------------------------                                                                              
;               SWAPF           CSR1,W                   ;显示值高低位交换,先处理高位
;               ANDLW           0FH                         ;屏蔽掉高位
;               MOVWF           DISPBUF_H             ;存入寄存器
;               MOVFW           CSR1                       ;显示值低位处理
;               ANDLW           0FH                         ;屏蔽掉高位
;               MOVWF           DISPBUF_L             ;存入寄存器
;               GOTO             LOOP                       ;
;*********************************************
;******               这是清零子程式  **************
;*********************************************
RESET_:
                 BCF         STATUS,RP0               ;
                 MOVLW     90                               ;
                 MOVWF     CONT1                         ;
                 MOVLW     20H                             ;
                 MOVWF     FSR                             ;
PORTBM0: CLRF       INDF                           ;
                 CLRWDT                                       ;
                 INCF       FSR,F                         ;
                 DECFSZ   CONT1,F                     ;
                 GOTO       PORTBM0                     ;

                 MOVLW     90                               ;
                 MOVWF     CONT1                         ;
                 MOVLW     0A0H                           ;
                 MOVWF     FSR                             ;
PORTBM1: BSF         STATUS,RP0               ;
                 CLRF       INDF                           ;
                 CLRWDT                                       ;
                 INCF       FSR,F                         ;
                 BCF         STATUS,RP0               ;
                 DECFSZ   CONT1,F                     ;
                 GOTO       PORTBM1                     ;
                 RETLW     0                                 ;
;-----------------------------------------------
                 END                                             ;
;*************************************************************
;S2=FC03 0000   S3=FD02 0000   S4=FE01 0000   S5=FF00 0000         ;CSR0=FC CSR1=03 CSR2=00 CSR3=00 (S2)
;S6=F807 0000   S7=F906 0000   S8=FA05 0000   S9=FB04 0000         ;
;S10=F40B 0000   S11=F50A 0000   S12=F609 0000   S13=F708 0000 ;
;S14=F00F 0000   S15=F10E 0000   S16=F20D 0000   S17=F30C 0000 ;
;S18=EC13 0000   S19=ED12 0000   S20=EE11 0000   S21=EF10 0000 ;
;S22=E817 0000   S23=E916 0000   S24=EA15 0000   S25=EB14 0000 ;
;S26=E41B 0000   S27=E51A 0000   S28=E619 0000   S29=E718 0000 ;
;S30=E01F 0000   S31=E11E 0000   S32=E21D 0000   S33=E31C 0000 ;
;*************************************************************

我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号