久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

PIC16F887紅外解碼程序

作者:佚名   來源:本站原創   點擊數:  更新時間:2011年03月16日   【字體:
//----------------------------------------------------------------
//PIC16F887 紅外解碼程序
//指令周期1us,
#include <htc.h>                // header file with compiler macros, for
                                // example __CONFIG
                                // the processor header file, with register 
                                // and bit definitions (pic16f887.h) is
                                // automatically included
#define uchar unsigned char
#define uint unsigned int
// __CONFIG sets the PIC16F887 Configuration Words.  See bottom of the header
// file pic16f887.h for fuse option constants.
    __CONFIG(INTCLK & WDTDIS & PWRTDIS & MCLRDIS & UNPROTECT & DUNPROTECT & BORDIS & IESODIS & FCMDIS & LVPDIS);
    __CONFIG(BORV40); // 2nd config word
////// ///////////////////////////////////////////////////////////////////////////
uint shuju[3]={0};   //存放數據
uint temp="0";     //臨時變量
uchar i,j;     //數組及移位計數用
uchar biaozhi="0";   //起始碼標志位
uchar flag="1";    //有鍵按下,打開定時器
void init_io(void)   //初始化函數
{
    TRISC = 0xFF;   //置CCP1口為輸入態
    TRISD = 0x00;   //置D口為輸出態
 CCP1CON=0x04;   //CCP1模塊工作于捕捉方式
 CCP1IE=1;    //開中斷
 CCP1IF=0;    //清捕捉標志位
 PEIE=1;     //開外部中斷

 T1CON=0;    //配置定時器T1不分頻,使用內部時鐘,且先禁止T1
    ei();                   // enable global interrupts
 TMR1H=0;    //計數值清0
 TMR1L=0;
 PORTD=0;    //輸出清0
}
main()
{
init_io();     //初始化函數
while(1);     //等待CCP1模塊中斷產生
}

void interrupt interrupt_service(void)  //中斷
{
    if (CCP1IE && CCP1IF)     //判斷是否為CCP1模塊中斷,當在一個系統中時會用
        {
  if(flag==1)          
   {
   TMR1H=0;
   TMR1L=0;
   TMR1ON=1;      //開定時器
   flag=0;
   }
  else
   {
   TMR1ON=0;       //先停定時器
   temp=TMR1L+TMR1H*256;   //取數據并判斷
   TMR1H=0;      //清0計數值
   TMR1L=0;
   TMR1ON=1;      //開定時器等待下一個脈沖到來
    if(temp>12600&&temp<14600&&biaozhi==0)     //起始碼
     {
     biaozhi=1;          //當檢測到起始碼時,下次直接進行入數據判斷
     i=0;
     j=0;
     }
    else         //數據判斷區
     {
     if((temp < 3200)&&(temp > 1200)) //時間在2.2ms左右的為數碼0
      {shuju[i]=shuju[i]<<1;j++;}
     else
      if((temp < 5000)&&(temp > 3000)) //時間在4ms左右的為為數碼1
       {shuju[i]=(shuju[i]<<1)+1;j++;}
      else
       biaozhi=0;      //否則為終止碼,清0起始碼標志位,準備下一次按鍵的接收
     }
    if(j==16&&i<2)      //數組遞加,當第一個數組接收滿后,開始對下一個數組進行接收
     {i++;j=0;}
    else
     {
     if(j==16&&i==2)     //當接收滿后(共48位),對數據輸出
      {
      if(shuju[0]==0xeb14)  //為對應的某一按鍵值
      PORTD=0x10;     //相應端口輸出
      if(shuju[0]==0xee11)  //另一鍵值
      PORTD=0xa0;     //輸出
      biaozhi=0;     //接收完成,復位相應標志位
      flag=1;
      i=0;
      j=0;
      }
     
     }
   }    
         TMR1IF = 0;             // clear Timer0 interrupt flag
   CCP1IF=0;        //每次必須對CCP1IF位軟件清0
  }
}

注:本程序使用的是TOYO空調的遙控器,起始碼為13.6ms,0碼為2.2ms,1碼為4ms,停止碼為9ms.共48位數據,單片機的指令周期為1us,這個程序還沒有加校驗.

關閉窗口

相關文章

主站蜘蛛池模板: 精品久久精品 | 亚洲精彩视频在线观看 | 久久精品亚洲欧美日韩精品中文字幕 | 91精品国产91久久久久久不卞 | 午夜精品福利视频 | 午夜电影在线播放 | 欧美一区二 | 伊人青青久久 | 在线国产视频 | 超碰在线网站 | 亚洲欧美一区二区三区国产精品 | 在线视频亚洲 | 91精品国产综合久久久密闭 | 亚洲一区二区三区久久久 | 亚洲国产一区二区视频 | 999久久久| 欧美一级免费片 | 在线国产一区二区 | 国产一区二区三区视频免费观看 | 天天操 夜夜操 | 久久九 | 免费久 | 日本粉嫩一区二区三区视频 | 精产嫩模国品一二三区 | 久久婷婷麻豆国产91天堂 | 国产日韩欧美精品一区二区三区 | 日本天堂视频 | 欧美一区二区大片 | 麻豆一区二区三区精品视频 | 影视一区 | 91观看 | jizjizjiz中国护士18| 成人在线观看免费爱爱 | 国产精品99久久免费观看 | 中文字幕三区 | 亚洲精品视频观看 | 亚洲一区二区视频 | 超碰人人艹 | 日韩不卡一区二区 | 一级a性色生活片久久毛片 午夜精品在线观看 | 国产精品揄拍一区二区久久国内亚洲精 |