久久久久久久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,這個程序還沒有加校驗.

關閉窗口

相關文章

主站蜘蛛池模板: 成人小视频在线 | 国产黄色在线播放 | 黄色成人免费视频 | 特级西西444www大精品视频 | 欧美日韩一区二区三区视频 | 自拍偷拍亚洲 | 免费观看全黄做爰大片视频美国 | 色综合天天综合网国产成人网 | 国产网站免费 | 中文字幕不卡在线观看 | 欧美福利影院 | 亚洲精品成人网 | 少妇视频网站 | 五月婷婷影院 | 日本黄色免费看 | 欧美一区二 | 久久精品一区二区三区四区 | 快播少女爱欢乐 | 欧美性生活网站 | 一区二区三区精品 | 欧美jizz19性欧美 | 精品视频在线观看 | 欧美一级片 | 久草青青草| 欧美性视频在线 | 在线观看日韩 | 激情五月综合网 | 九九超碰 | 四虎在线免费观看 | 国产黄色小说 | 国产一区二区视频在线 | 欧美黄色一级 | 91精品在线免费观看 | 成人小视频在线 | 精品欧美一区二区三区久久久 | 高清免费av| 成人在线观看网站 | 久久久不卡 | 一级片中文字幕 | 亚洲免费专区 | 欧美日韩视频一区二区 |