M50462AP搖控器-PIC解碼程序(已測試OK)
;*APPLICATION NOTE E6000 ICEXPLORER ******************
;* Title: ;
;M50462的遙控器發(fā)射碼依次為:16位數(shù)據(jù)碼(用戶碼8位+鍵碼 ;
;+前后兩個碼的間隔為22.5ms) ;
;數(shù)據(jù)碼'0'是由560US的高電平加560US的低電平構(gòu)成 ;
;接收時反相為500US的低電平加500US的高電平構(gòu)成=1.0mS ;
;數(shù)據(jù)碼'1'是由500US的高電平加1.5MS的高電平構(gòu)成 ;
;接收時反相為500US的低電平加1.5MS的高電平構(gòu)成=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---7FHSTATUS RP0=0,RP1=0 ;
;** BANK1=A0H---FFHSTATUS 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 ;遙控接收數(shù)據(jù)位位標(biāo)志
;-------------------------------------------------
CNT0 EQU 20H ;用戶臨時寄存器1
CNT1 EQU 21H ;用戶臨時寄存器2
CNT2 EQU 22H ;用戶臨時寄存器3
CNT3 EQU 23H ;用戶臨時寄存器4
TABADD EQU 24H ;數(shù)碼管顯示碼取碼用寄存器
FLAGS EQU 25H ;顯示位選標(biāo)志位
DISPBUF_H EQU 26H ;顯示器高位
DISPBUF_L EQU 27H ;顯示器低位
FLAGS2 EQU 28H ;臨時寄存器
W_TEMP EQU 2AH ;W現(xiàn)場保護(hù)寄存器
STATUS_TEMP EQU 2BH ;STATUS現(xiàn)場保護(hù)寄存器
CSR0 EQU 2CH ;遙控用戶碼8位寄存器
CSR1 EQU 2DH ;遙控器鍵碼8位寄存器
CSR0A EQU 30H ;遙控接收16位數(shù)據(jù)暫存寄存器
CSR1A EQU 31H ;遙控接收16位數(shù)據(jù)暫存寄存器
;**************************************************
CONT1 EQU 7FH ;
;**************************************************
ORG 0000H
GOTO MAIN
ORG 0004H
RETFIE ;
ORG 0008H
;************************************************
MAIN:
CALL RESET_ ;BANK0--BANK1清0
CLRFSTATUS ;清狀態(tài)寄存器口
BSF STATUS,RP0 ;BANK-1
;------------------------------------------------
MOVLW 0FH ;00001111設(shè)定:RB口不用上拉,分頻器配給WDT
MOVWF OPTION_ ;分頻比設(shè)為1:256
MOVLW 02H ;00000010轉(zhuǎn)換結(jié)果左對齊,只選3個A/D通道RA0/AN0,RA1,RA3
MOVWF ADCON1 ;選擇VDD和VSS作參考源
;------------------------------------------------
MOVLW 00H
MOVWF TRISC ;PORTC所有管腳設(shè)為輸出
MOVLW 01H ;
MOVWF TRISB ;RB0=輸入
MOVLW 0FFH ;
MOVWF TRISA ;
;------------------------------------------------
BCF STATUS,RP0 ;BANK-0
;------------------------------------------------
MOVLW 01001001B ;01001001選擇:時鐘時鐘源為FOSC/8,允許ADC工作
MOVWF ADCON0 ;通道AN1,暫時不啟動轉(zhuǎn)換過程
BCF PIR1, ADIF ;清除A/D中斷標(biāo)志位
;------------------------------------------------
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 ;每一個循環(huán)10US
NOP
BTFSS PORTB,RMT
INCF CNT2,1
BTFSC PORTB,RMT
CLRF CNT2
BTFSC CNT2,3 ;低電平大于8*10US=80US則為有效低電平,否則是一些干擾信