;*APPLICATION NOTE E6000 ICEXPLORER ****************** ;* Title: ; ;SC6121的遙控器發(fā)射碼依次為:同步頭(引導(dǎo)碼)+32位數(shù)據(jù)碼 ; ;(用戶(hù)碼低8位+用戶(hù)碼高8位+鍵碼+鍵碼的反碼) ; ;引導(dǎo)碼是由9MS的高電平加4.5MS的低電平構(gòu)成, ; ;我們接收到的剛好反相為9MS的低電平加4.5MS的高電平. ; ;數(shù)據(jù)碼0是由560US的高電平加560US的低電平構(gòu)成 ; ;接收時(shí)反相為560US的低電平加560US的高電平構(gòu)成=1.125mS ; ;數(shù)據(jù)碼1是由560US的高電平加1.69MS的高電平構(gòu)成 ; ;接收時(shí)反相為560US的低電平加1.69MS的高電平構(gòu)成=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 ;遙控接收數(shù)據(jù)位位標(biāo)志 ;------------------------------------------------- CNT0 EQU 20H ;用戶(hù)臨時(shí)寄存器1 CNT1 EQU 21H ;用戶(hù)臨時(shí)寄存器2 CNT2 EQU 22H ;用戶(hù)臨時(shí)寄存器3 CNT3 EQU 23H ;用戶(hù)臨時(shí)寄存器4 TABADD EQU 24H ;數(shù)碼管顯示碼取碼用寄存器 FLAGS EQU 25H ;顯示位選標(biāo)志位 DISPBUF_H EQU 26H ;顯示器高位 DISPBUF_L EQU 27H ;顯示器低位
FLAGS2 EQU 28H ;臨時(shí)寄存器
W_TEMP EQU 2AH ;W現(xiàn)場(chǎng)保護(hù)寄存器 STATUS_TEMP EQU 2BH ;STATUS現(xiàn)場(chǎng)保護(hù)寄存器
CSR0 EQU 2CH ;遙控鍵碼反碼寄存器 CSR1 EQU 2DH ;遙控器鍵碼寄存器 CSR2 EQU 2EH ;遙控器用戶(hù)碼高8位寄存器 CSR3 EQU 2FH ;遙控器用戶(hù)碼低8位寄存器
CSR0A EQU 30H ;遙控接收32位數(shù)據(jù)暫存寄存器 CSR1A EQU 31H ;遙控接收32位數(shù)據(jù)暫存寄存器 CSR2A EQU 32H ;遙控接收32位數(shù)據(jù)暫存寄存器 CSR3A EQU 33H ;遙控接收32位數(shù)據(jù)暫存寄存器 ;************************************************** CONT1 EQU 7FH ; ;************************************************** ORG 0000H GOTO MAIN ORG 0004H RETFIE ; ORG 0008H ;************************************************ MAIN: CALL RESET_ ;BANK0--BANK1清0
CLRF STATUS ;清狀態(tài)寄存器口 BSF STATUS,RP0 ;BANK-1 ;------------------------------------------------ MOVLW 0FH ;00001111設(shè)定:RB口不用上拉,分頻器配給WDT MOVWF OPTION_ ;分頻比設(shè)為1:256 MOVLW 02H ;00000010轉(zhuǎn)換結(jié)果左對(duì)齊,只選3個(gè)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選擇:時(shí)鐘時(shí)鐘源為FOSC/8,允許ADC工作 MOVWF ADCON0 ;通道AN1,暫時(shí)不啟動(dòng)轉(zhuǎn)換過(guò)程 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 4 MOVWF CNT1 ;4*256*10us CLRF CNT2 CLRF CNT0 RCV1: ;先檢測(cè)引導(dǎo)碼的9MS低電平 GOTO $+1 ;每一個(gè)循環(huán)10US NOP ; BTFSC PORTB,RMT ; INCF CNT2,1 ; BTFSS PORTB,RMT ; CLRF CNT2 ; BTFSC CNT2,3 ;高電平大于8*10US=80US則為有效高電平,否則是一些干擾信號(hào) GOTO RCV2 ;
DECFSZ CNT0,1 ; GOTO RCV1 ; DECFSZ CNT1,1 ; GOTO RCV1 ; GOTO LOOP ;低電平大于4*256*10US=10.24MS則是錯(cuò)誤脈沖 RCV2: MOVLW 3 SUBWF CNT1,0 ;低電平小于2*256*10US=5.12MS則是錯(cuò)誤脈沖 BTFSC STATUS,C ; GOTO LOOP ;
MOVLW 3 ; MOVWF CNT1 ;3*256*10us CLRF CNT2 ; CLRF CNT0 ; ;************************************************* RCV3: GOTO $+1 ;每一個(gè)循環(huán)10US NOP BTFSS PORTB,RMT INCF CNT2,1 BTFSC PORTB,RMT CLRF CNT2 BTFSC CNT2,3 ; 低電平大于8*10US=80US則為有效低電平,否則是一些干擾信號(hào) GOTO RCV4 DECFSZ CNT0,1 GOTO RCV3 DECFSZ CNT1,1 GOTO RCV3 GOTO LOOP ;高電平大于3*256*10US=7.68MS則是錯(cuò)誤的 ;************************************************** RCV4: MOVLW 3 SUBWF CNT1,0 ;高電平小于1*256*10US=2.56MS則是錯(cuò)誤的 BTFSC STATUS,C ; GOTO LOOP
MOVLW 32 MOVWF CNT2 ;接收數(shù)據(jù)共32位,16位用戶(hù)碼,8位控制碼加8位控制碼的反碼 RCV5: CLRF CNT3 MOVLW 170 ;低電平大于256-170=86*10US=860US錯(cuò)誤 MOVWF CNT0 MOVLW 56 MOVWF CNT1 ;高電平大于256-56=200*10US=2MS錯(cuò)誤 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則是錯(cuò)誤的 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錯(cuò)誤 GOTO LOOP COMPARE: MOVLW 170 SUBWF CNT0,1 ;CNT0的值減初始值等于實(shí)際低電平計(jì)數(shù)值 MOVLW 56 SUBWF CNT1,1 ;CNT1的值減初始值等于實(shí)際高電平計(jì)數(shù)值 MOVFW CNT1 ADDWF CNT0,1 ;將高低電平的計(jì)數(shù)加在一起并存入CNT0,通過(guò)比較高低電平總的時(shí)間來(lái)確定是1還是0 BTFSC STATUS,C ; GOTO LOOP ;總的值大于255(即時(shí)間大于255*10US=2.55MS)則錯(cuò)誤 MOVLW 70 SUBWF CNT0,0 BTFSS STATUS,C ; GOTO LOOP ;總的時(shí)間小于70*10US=700US則是錯(cuò)誤的 MOVLW 130 ;130*10=1.3MS SUBWF CNT0,0 BTFSC STATUS,C ; GOTO COMPARE_H ;時(shí)間大于1.3MS轉(zhuǎn)去確定是否1 BCF FLAGS2,BITIN ;時(shí)間在700US-1.3MS之間則是0 GOTO MOVDATA ;送數(shù) COMPARE_H: MOVLW 160 SUBWF CNT0,0 BTFSS STATUS,C ; GOTO LOOP ;小于160*10US=1.6MS,則錯(cuò)誤 MOVLW 230 SUBWF CNT0,0 BTFSC STATUS,C ; GOTO LOOP ;大于230*10US=2.3MS,則錯(cuò)誤 BSF FLAGS2,BITIN ;時(shí)間在1.6MS-2.3MS之間則是1 MOVDATA: RRF CSR0A,1 ;將每一位移入相應(yīng)寄存器 RRF CSR1A,1 RRF CSR2A,1 RRF CSR3A,1 BCF CSR0A,7 BTFSC FLAGS2,BITIN ;接收當(dāng)前位送入CSR0.7 BSF CSR0A,7 DECFSZ CNT2,1 ;是否接收完32位 GOTO RCV5
MOVFW CSR0A ;將臨時(shí)寄存器中的數(shù)存回相應(yīng)寄存器 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 ;不等于則接收到的是錯(cuò)誤的信息 ;將鍵碼送顯示 ;********************************************** 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 ; ;************************************************************* |