PIC單片機紅外遙控編碼與解碼的問(wèn)題分享
假如用中斷的話(huà)也可用時(shí)間查詢(xún)的方法,只是接收口改用帶中斷的口線(xiàn);RB4--RB7,CCP1,CCP2,都可以。建議不要用RB0(他當按鍵輸入最好用);本文引用地址:http://dyxdggzs.com/article/172729.htm
還有就是解碼時(shí)的容陷和誤碼處理(有一種寫(xiě)法是在解碼移位時(shí)利用進(jìn)位標制C同時(shí)移位;我個(gè)人認為不太好,因為只要差一位沒(méi)接收到,整個(gè)接收到的都是誤碼且浪費時(shí)間)
原理是接收的逆過(guò)程
例程如下(用來(lái)發(fā)6221;分頻比為256)
;///////////////////////////////////////////////////////////////////////////////////////////////
READDIGT:
MOVF SENDLOOP,0
ADDWF PC,1
GOTO SENDC4
GOTO SENDC3
GOTO SENDC2
GOTO SENDC1
GOTO SENDC0
;///////////////////////////////////
SENDC0:
MOVF C4COUNT,0;;讀要發(fā)的數據(假設要發(fā)5個(gè)字)
RETURN
SENDC1:
MOVF C3COUNT,0
RETURN
SENDC2:
MOVF C2COUNT,0
RETURN
SENDC3:
MOVF C1COUNT,0
RETURN
SENDC4:
MOVF C0COUNT,0
RETURN
;///////////////////////////////////
SENDBIT:
CLRF TIME
BCF PORTB,1
SENDBIT1:
CLRWDT
MOVLW .35
SUBWF TIME,0
BTFSS STATUS,2
GOTO SENDBIT1
CLRF TIME
BSF PORTB,1
SENDBIT2:
CLRWDT
MOVLW .18
SUBWF TIME,0
BTFSS STATUS,2
GOTO SENDBIT2
CLRF SENDLOOP ;碼頭數據發(fā)送
//////////////////////////////////////////////
SENDBIT3:
CLRWDT
BCF INTCON,7
CALL READDIGT
MOVWF SENDCOUNT
BSF INTCON,7
CALL SENDDIGT
INCF SENDLOOP,1
MOVLW .5
SUBWF SENDLOOP,0
BTFSS STATUS,2
GOTO SENDBIT3
CLRF TIME
BCF PORTB,1
SENDDIGT5:
CLRWDT
MOVLW .2;;加發(fā)一個(gè)結束位
SUBWF TIME,0
BTFSS STATUS,2
GOTO SENDDIGT5
BSF PORTB,1
BSF STARTBIT
RETURN
;/////////////////////////////////////////////////////////////////////////////////////////
SENDDIGT:;;實(shí)現0和1的發(fā)送
MOVLW .8
MOVWF LOOPSENDCOUNT
SENDDIGTGO:
BTFSS SENDCOUNT,7
GOTO ZERSEND
CLRF TIME
SENDDIGT1:
CLRWDT
BCF PORTB,1
MOVLW .2
SUBWF TIME,0
BTFSS STATUS,2
GOTO SENDDIGT1
CLRF TIME
SENDDIGT2:
CLRWDT
BSF PORTB,1
MOVLW .6
SUBWF TIME,0
BTFSS STATUS,2
GOTO SENDDIGT2
GOTO SENDOVER
ZERSEND:
CLRF TIME
SENDDIGT3:
CLRWDT
BCF PORTB,1
MOVLW .2
SUBWF TIME,0
BTFSS STATUS,2
GOTO SENDDIGT3
CLRF TIME
SENDDIGT4:
CLRWDT
BSF PORTB,1
MOVLW .2
SUBWF TIME,0
BTFSS STATUS,2
GOTO SENDDIGT4
SENDOVER:
RLF SENDCOUNT,1
DECFSZ LOOPSENDCOUNT
GOTO SENDDIGTGO
RETURN
相應的C代碼如下:(C5口是發(fā)送口)
#include
#include
#include
unsigned char dispcount[5];//要發(fā)送的碼值
unsigned char i,k,data,rfbit,zbit,rfgobit;
評論