<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PIC單片機(jī)紅外遙控編碼與解碼的問題分析

          PIC單片機(jī)紅外遙控編碼與解碼的問題分析

          作者: 時(shí)間:2012-09-02 來源:網(wǎng)絡(luò) 收藏

          假如用中斷的話也可用時(shí)間查詢的方法,只是接收口改用帶中斷的口線;RB4--RB7,CCP1,CCP2,都可以。建議不要用RB0(他當(dāng)按鍵輸入最好用);

          本文引用地址:http://www.ex-cimer.com/article/170942.htm

          還有就是時(shí)的容陷和誤碼處理(有一種寫法是在移位時(shí)利用進(jìn)位標(biāo)制C同時(shí)移位;我個(gè)人認(rèn)為不太好,因?yàn)橹灰钜晃粵]接收到,整個(gè)接收到的都是誤碼且浪費(fèi)時(shí)間)

          原理是接收的逆過程

          例程如下(用來發(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;
          #pragma interrupt_level 1
          interrupt adint(void)
          {
          if(TMR1IF==1)
          {
          TMR1IF=0;
          TMR1H=0b11111100;
          TMR1L=0b00010111;
          rfbit=rfbit+1;//發(fā)送指針加一
          send( );
          }
          }
          //////////////////////////////////////////
          send( )
          {
          if(rfgobit==0)
          {
          switch(rfbit)
          {
          case 1 :
          RC5=0;
          break;
          case 6 :
          RC5=1;
          break;
          case 7 :
          RC5=0;
          rfgobit=1;//制發(fā)送完標(biāo)制
          rfbit=0;
          break;
          default :
          break;
          }
          }
          if(rfgobit==1)
          {
          zbit=dispcount[i]0b00000001;
          switch(rfbit)
          {
          case 1:
          RC5=1;
          break;
          case 2 :
          if(zbit==0)
          {
          RC5=0;
          rfbit=0;
          rf( );
          }
          break;
          case 3 :
          if(zbit==1)
          {
          RC5=0;
          rfbit=0;
          rf( );
          }
          break;
          default :
          break;
          }
          }
          }
          //////////////////////////////////////////////
          rf( )
          {
          k=k+1;
          if(k==8)
          {
          i=i+1;
          k=0;
          if(i==6)
          {
          i=1;
          rfgobit=0;
          TMR1H=0;
          TMR1L=0;
          RC5=1;
          dispcount[1]=0xaa;
          dispcount[2]=0xbb;
          dispcount[3]=0xcc;
          dispcount[4]=0xdd;
          dispcount[5]=0xee;
          }
          return;
          }
          dispcount[i]=dispcount[i]>>1;
          }
          //////////////////////////////////////
          main( )
          {
          di( );
          TRISC=0b11011111;
          TRISA=0b111111;
          TRISB=0b11111111;
          i=1;
          k=0;
          TMR1H=0b11111100;
          TMR1L=0b00010111;
          T1CON=1;
          TMR1IE=1;
          RC5=1;
          PEIE=1;
          ei( );
          dispcount[1]=0xaa;
          dispcount[2]=0xbb;
          dispcount[3]=0xcc;
          dispcount[4]=0xdd;
          dispcount[5]=0xee;
          while( 1 )
          {
          ;
          }
          }
          這兩個(gè)程序只是一個(gè)演示例程

          在實(shí)際運(yùn)用中可變通的把這種發(fā)送與接受用于兩機(jī)之間的通訊(好處是移植性好,抗干擾好且一發(fā)一收只要兩根線或一根線)另外如要產(chǎn)生載波(38KHZ)的話可用其輸出口去調(diào)制38KHZ發(fā)生源(比如555電路,PWM)來得到,或干脆用軟件來實(shí)現(xiàn)(不過難度較大;不如用帶38KHZ的來做)

          紅外遙控器相關(guān)文章:紅外遙控器原理

          上一頁 1 2 3 下一頁

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();