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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 利用MSP430 TimerA的CCR1捕獲模式進(jìn)行紅外解碼的實例

          利用MSP430 TimerA的CCR1捕獲模式進(jìn)行紅外解碼的實例

          作者: 時間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
          利用MSP430 TimerACCR1捕獲模式對紅外遙控芯片M50560-008P進(jìn)行紅外解碼的實例。注:定義的測量時間都是經(jīng)過實際調(diào)試后調(diào)整得到,可能與芯片手冊會有出入。

          //紅外遙控芯片M50560-008P,其編碼格式和M50560-001P一致,可參閱數(shù)據(jù)手冊。

          本文引用地址:http://www.ex-cimer.com/article/201611/316541.htm
          #define UserCode 0xC2
          #define LeadCodeOrSeprateTime 4000 //4ms,對應(yīng)1MHz的計數(shù)時鐘
          #define Bit0Time1 600 //0.600ms,對應(yīng)1MHz的計數(shù)時鐘
          #define Bit0Time2 520 //0.520ms,對應(yīng)1MHz的計數(shù)時鐘
          #define Bit1Time1 600 //0.600ms,對應(yīng)1MHz的計數(shù)時鐘
          #define Bit1Time2 1600 //1.600ms,對應(yīng)1MHz的計數(shù)時鐘
          #define DataCount 8 //8位的用戶碼或數(shù)據(jù)碼
          void ParaSet(uchar DataCode)//紅外遙控輸入處理
          {
          //處理代碼
          }
          void SysInit(void)
          {
          //系統(tǒng)參數(shù)初始化代碼
          }
          void main(void)//主函數(shù)
          {
          SysInit();//系統(tǒng)參數(shù)初始化
          P1DIR=0xFB;//初始化P1.2(紅外接收頭)為輸入
          P1IE=0x04;//使能P1.2的中斷
          P1IES=0x04;//下降沿觸發(fā)P1.2中斷(紅外接收頭反相輸出)
          }
          #pragma vector=PORT1_VECTOR
          __interrupt void PORT1()//紅外遙控輸入中斷處理
          {
          uint LeadBitTime[2],BitTime[3],LastBitTime;
          uchar i,j,k,Data[2];
          P1IE=0x00;//關(guān)閉P1.2中斷
          _EINT();//進(jìn)入中斷后,系統(tǒng)自動關(guān)總中斷允許,因此需再開總中斷允許
          if((P1IFG&0x04)==BIT2)//紅外遙控輸入
          {
          P1IFG&=0xFB;//中斷標(biāo)志位復(fù)位
          P1SEL|=0x04;//P1.2第二功能選擇,進(jìn)入TimerA的CCR1捕獲模式
          TACTL|=MC_2+TACLR;//啟動TA計數(shù)器的連續(xù)計數(shù)模
          TACCTL1&=~CCIFG;//復(fù)位捕獲標(biāo)志
          for(k=0;k<2;k++)
          {
          while((TACCTL1&BIT0)!=CCIFG);//等待上升沿
          LeadBitTime[0]=CCR1;
          TACCTL1&=~CCIFG;
          while((TACCTL1&BIT0)!=CCIFG);//等待下降沿
          LeadBitTime[1]=CCR1;
          TACCTL1&=~CCIFG;
          if(LeadBitTime[1]-LeadBitTime[0]>LeadCodeOrSeprateTime+500||LeadBitTime[1]-LeadBitTime[0] {
          TACTL|=MC_0+TACLR; //停止TA計數(shù)
          P1SEL&=0xFB;//P1.2恢復(fù)選擇第一功能即為I/O口
          return;
          }//如果引導(dǎo)碼不符則退出
          LastBitTime=LeadBitTime[1];
          for(i=0;i {
          BitTime[0]=LastBitTime;//位碼開始時刻賦初值
          for(j=1;j<3;j++)
          {
          while((TACCTL1&BIT0)!=CCIFG);//等待上升沿或下降沿跳變
          BitTime[j]=CCR1;//讀取捕獲計時值
          TACCTL1&=~CCIFG;//復(fù)位捕獲標(biāo)志
          }
          LastBitTime=BitTime[2];//為下一個位碼保存開始時刻初值
          Data[k]>>=1;//得到的用戶碼和數(shù)據(jù)碼右移1位,高位填0,準(zhǔn)備接收碼位碼值
          if(BitTime[2]-BitTime[1]>Bit0Time2-200&&BitTime[2]-BitTime[1] if(BitTime[2]-BitTime[1]>Bit1Time2-200&&BitTime[2]-BitTime[1] }
          }
          if(Data[0]!=UserCode)
          {//如果用戶碼不為0xC2則退出
          TACTL|=MC_0+TACLR; //停止TA計數(shù)
          P1SEL&=0xFB;//P1.2恢復(fù)選擇第一功能即為I/O口
          return;
          }
          TACTL|=MC_0+TACLR; //停止TA計數(shù)
          ParaSet(Data[1]);//參數(shù)設(shè)置
          TACTL|=MC_0+TACLR; //停止TA計數(shù)
          P1SEL&=0xFB;//P1.2恢復(fù)選擇第一功能即為I/O口
          }
          P1IE=0x04;//使能P1.2的中斷
          }


          評論


          技術(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); })();