PIC單片機(jī)紅外遙控編碼與解碼的問(wèn)題分享
假如用中斷的話也可用時(shí)間查詢的方法,只是接收口改用帶中斷的口線;RB4--RB7,CCP1,CCP2,都可以。建議不要用RB0(他當(dāng)按鍵輸入最好用);本文引用地址:http://cafeforensic.com/article/172729.htm
還有就是解碼時(shí)的容陷和誤碼處理(有一種寫法是在解碼移位時(shí)利用進(jìn)位標(biāo)制C同時(shí)移位;我個(gè)人認(rèn)為不太好,因?yàn)橹灰钜晃粵](méi)接收到,整個(gè)接收到的都是誤碼且浪費(fèi)時(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ā)的數(shù)據(jù)(假設(shè)要發(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 ;碼頭數(shù)據(jù)發(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è)結(jié)束位
SUBWF TIME,0
BTFSS STATUS,2
GOTO SENDDIGT5
BSF PORTB,1
BSF STARTBIT
RETURN
;/////////////////////////////////////////////////////////////////////////////////////////
SENDDIGT:;;實(shí)現(xiàn)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
相應(yīng)的C代碼如下:(C5口是發(fā)送口)
#include
#include
#include
unsigned char dispcount[5];//要發(fā)送的碼值
unsigned char i,k,data,rfbit,zbit,rfgobit;
評(píng)論