SC1621摇控器—PIC单片机解码程序

来源:本站
导读:目前正在解读《SC1621摇控器—PIC单片机解码程序》的相关信息,《SC1621摇控器—PIC单片机解码程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《SC1621摇控器—PIC单片机解码程序》的详细说明。
简介:在这里给大家提供一个SC1621摇控器—PIC单片机解码程序,希望对感兴趣的朋友有所帮助。

;*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         ;用户临时寄存器1CNT1         EQU 21H         ;用户临时寄存器2CNT2         EQU 22H         ;用户临时寄存器3CNT3         EQU 23H         ;用户临时寄存器4TABADD       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       CNT0RCV1:                             ;先检测引导码的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       LOOPRCV6:        CLRF       CNT3RCV6_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       LOOPCOMPARE:        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之间则是1MOVDATA:        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 ;;*************************************************************

提醒:《SC1621摇控器—PIC单片机解码程序》最后刷新时间 2024-03-14 01:07:33,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《SC1621摇控器—PIC单片机解码程序》该内容的真实性请自行鉴别。