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

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

;*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 ;
;*************************************************************

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

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

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