M50462AP摇控器-PIC解码程序(已测试OK)

发布者:黑白之间最新更新时间:2017-12-10 来源: eefocus关键字:M50462AP  摇控器  PIC解码 手机看文章 扫描二维码
随时随地手机看文章

;*APPLICATION NOTE  E6000 ICEXPLORER ******************
;* Title:                                             ;

;M50462的遥控器发射码依次为:16位数据码(用户码8位+键码 ;
;+前后两个码的间隔为22.5ms)                           ;
;数据码'0'是由560US的高电平加560US的低电平构成        ;
;接收时反相为500US的低电平加500US的高电平构成=1.0mS   ;
;数据码'1'是由500US的高电平加1.5MS的高电平构成        ;
;接收时反相为500US的低电平加1.5MS的高电平构成=2.0mS   ;
;* Version:         00                                ;
;* Last Updated:    2006.06.12                        ;
;* 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         ;遥控用户码8位寄存器
CSR1         EQU 2DH         ;遥控器键码8位寄存器

CSR0A        EQU 30H         ;遥控接收16位数据暂存寄存器
CSR1A        EQU 31H         ;遥控接收16位数据暂存寄存器
;**************************************************
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      10
        MOVWF      CNT1           ;10*256*10us
        CLRF       CNT2
        CLRF       CNT0
RCV1:
        MOVLW      170            ;低电平大于256-170=86*10US=860US错误
        MOVWF      CNT0
RCV1_HI:
        GOTO       $+1
        NOP
        BTFSC      PORTB,RMT
        INCF       CNT3,1
        BTFSS      PORTB,RMT
        CLRF       CNT3
        BTFSC      CNT3,2          ;高电平大于8*10US=80US则为有效高电平
        GOTO       RCV11
        INCFSZ     CNT0,1
        GOTO       RCV1_HI         ;低电平大于700US则是错误的
        GOTO       LOOP
;*************************************************
RCV11:
        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       RCV11
        DECFSZ     CNT1,1
        GOTO       RCV11
        GOTO       LOOP            ;高电平大于10*256*10US=25.6MS则是错误的
;**************************************************
RCV4:
        MOVLW      4
        SUBWF      CNT1,0          ;高电平小于6*256*10US=15.36MS则是错误的
        BTFSC      STATUS,C        ;
        GOTO       LOOP
;-----------------------------------------
        MOVLW      16
        MOVWF      CNT2            ;接收数据共16位,8位用户码,8位控制码
RCV5:
        CLRF       CNT3
        MOVLW      170             ;低电平大于256-170=86*10US=860US错误
        MOVWF      CNT0
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
        MOVLW      60
        MOVWF      CNT1            ;高电平大于256-60=196*10US=1.96MS错误
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-60=196*10US=1.96MS错误
        GOTO       LOOP
;-------------------------------------
COMPARE:
        MOVLW      170
        SUBWF      CNT0,1          ;CNT0的值减初始值等于实际低电平计数值
        MOVLW      60
        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    ;时间在860US-1.3MS之间则是0
        GOTO       MOVDATA         ;送数
;----------------------------------------
COMPARE_H:
        MOVLW      150
        SUBWF      CNT0,0
        BTFSS      STATUS,C        ;
        GOTO       LOOP            ;小于150*10US=1.5MS,则错误
        MOVLW      230
        SUBWF      CNT0,0
        BTFSC      STATUS,C        ;
        GOTO       LOOP            ;大于230*10US=2.3MS,则错误
        BSF        FLAGS2,BITIN    ;时间在1.5MS-2.3MS之间则是1
;----------------------------------------
MOVDATA:
        RLF        CSR0A,1         ;将每一位移入相应寄存器
        RLF        CSR1A,1
        BCF        CSR0A,0
        BTFSC      FLAGS2,BITIN    ;接收当前位送入CSR0.0
        BSF        CSR0A,0
        DECFSZ     CNT2,1          ;是否接收完16位
        GOTO       RCV5
;----------------------------------------

        MOVFW      CSR1A           ;将临时寄存器中的数存回相应寄存器
        MOVWF      CSR0            ;
        MOVFW      CSR0A           ;
        MOVWF      CSR1            ;
;**********************************************
        MOVLW      00H             ;
        SUBWF      CSR1,W          ;
        BTFSC      STATUS,Z        ;
        GOTO       S2              ;

        MOVLW      10H             ;
        SUBWF      CSR1,W          ;
        BTFSC      STATUS,Z        ;
        GOTO       S3              ;

        MOVLW      08H             ;
        SUBWF      CSR1,W          ;
        BTFSC      STATUS,Z        ;
        GOTO       S4              ;

        MOVLW      80H             ;
        SUBWF      CSR1,W          ;
        BTFSC      STATUS,Z        ;
        GOTO       S5              ;

        MOVLW      90H             ;
        SUBWF      CSR1,W          ;
        BTFSC      STATUS,Z        ;
        GOTO       S6              ;

        MOVLW      88H             ;
        SUBWF      CSR1,W          ;
        BTFSC      STATUS,Z        ;
        GOTO       S7              ;

        MOVLW      40H             ;
        SUBWF      CSR1,W          ;
        BTFSC      STATUS,Z        ;
        GOTO       S8              ;

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

        MOVLW      48H             ;
        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                       ;
;*************************************************************
;5-13=E200  5-14=E210  5-15=E208  5-16=E218 ;
;5-17=E204  5-18=E214  5-19=E20C  5-20=E21C ;
;6-13=E280  6-14=E290  6-15=E288  6-16=E298 ;
;6-17=E284  6-18=E294  6-19=E28C  6-20=E29C ;
;7-13=E240  7-14=E250  7-15=E248  7-16=E258 ;
;7-17=E244  7-18=E254  7-19=E24C  7-20=E25C ;
;8-13=E2C0  8-14=E2D0  8-15=E2C8  8-16=E2D8 ;
;8-17=E2C4  8-18=E2D4  8-19=E2CC  8-20=E2DC ;
;9-13=E220  9-14=E230  9-15=E228  9-16=E238 ;
;9-17=E224  9-18=E254  9-19=E22C  9-20=E23C ;
;10-13=E2A0  10-14=E2B0  10-15=E2A8  10-16=E2B8 ;
;10-17=E2A4  10-18=E2B4  10-19-E2AC  10-20=E2BC ;
;11-13=E260  11-14=E270  11-15=E268  11-16=E278 ;
;11-17=E264  11-18=E274  11-19=E26C  11-20=E27C ;
;12-13=E2E0  12-14=E2F0  12-15=E2E8  12-16=E2F8 ;
;12-17=E2E4  12-18=E2F4  12-19=E2EC  12-20=E2FC ;
;*************************************************************


关键字:M50462AP  摇控器  PIC解码 引用地址:M50462AP摇控器-PIC解码程序(已测试OK)

上一篇:SC1621摇控器-PIC单片机解码程序(已测试OK)
下一篇:PIC16C57C初始化头文件

小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved