日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

用定时中断来接收红外遥控信号

發布時間:2025/1/21 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用定时中断来接收红外遥控信号 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//====紅外接收相關定義============================= #define IrDatHigh (P_IrRec == 1) //接收數據高 #define IrDatLow (P_IrRec == 0) //接收數據低 #define Ir_EdgeDown ((RStatus_IR&0x03) == 0x02)//IR下降沿 1--0 #define Ir_EdgeUp ((RStatus_IR&0x03) == 0x01) //IR上升沿 0--1//紅外數據長度 N個字節 可自定義 #define IrDatLong (uint8)20 //--------------起始 #define TST_LOW (uint8)107 //起始低脈寬 5.35MS #define TST_LOW_L (TST_LOW - 20) //起始低判斷范圍 #define TST_LOW_H (TST_LOW + 20) //12 #define TST_HIGH (uint8)145 //起始高脈寬 7.25MS #define TST_HIGH_L (TST_HIGH - 20) //起始高判斷范圍 #define TST_HIGH_H (TST_HIGH + 20) // //---------------數據 #define TDAT_LOW (uint8)28 //數據低脈寬 1.4MS #define TDAT_LOW_L (TDAT_LOW - 19) //數據 #define TDAT_LOW_H (TDAT_LOW + 19) //10 #define TDAT_HIGH (uint8)66 //數據高脈寬 3.3MS #define TDAT_HIGH_L (TDAT_HIGH - 19) //數據 #define TDAT_HIGH_H (TDAT_HIGH + 19) //void interrupt ser(void)//中斷服務程序 {static uint8 PIR = 0 ;static uint8 RStatus_IR = 0 ;static uint8 ByteNum=0,BitNum=0;TIM6_SR1 = 0x00; // 清除更新標志 50u 中斷一 次TconIr ++ ; //脈沖計數if(TconIr == 0) //溢出{RMIR = MIR_RST ; //退出接收狀態 }PIR <<= 1 ;if(IrDatHigh) //讀IR接收管腳的狀態{PIR |= 0x01 ;}//對接收管腳的數據進行濾波處理RStatus_IR <<= 1 ;if((PIR & 0x07) == 0x07)//111{ RStatus_IR |= 0X01 ;}else if((PIR & 0x07) == 0X00)//000{RStatus_IR &= ~0X01 ; }else {if(RStatus_IR & 0x02)RStatus_IR |= 0x01 ;}if(F_IrRecOk) return ; //數據未取出 不再接收數據//--上升沿或下降沿到來-------------if(Ir_EdgeDown || Ir_EdgeUp) {//-------1111--空閑--------------------if(RMIR == MIR_RST) //{if(Ir_EdgeUp) {RMIR = MIR_RST ; //退出接收狀態}else //起始接收下降沿{TconIr = 0 ;RMIR = MIR_P1 ;//接收起始F_IrStatus = 0 ;// 接收起始低}}//----22222--接收起始碼-----------------else if(RMIR == MIR_P1)//{if(!F_IrStatus)//起始狀態0 只接收上升沿{if(Ir_EdgeUp){ //接收起始碼低電平脈寬if((TconIr >= TST_LOW_L) && (TconIr <= TST_LOW_H)){F_IrStatus = 1 ; //起始低驗證成功TconIr = 0 ;}else {RMIR = MIR_RST ; //退出接收狀態}}}else //if(F_IrStatus)//起始狀態1 只收下升沿{if(Ir_EdgeDown){//接收起始碼高電平脈寬if((TconIr >= TST_HIGH_L) && (TconIr <= TST_HIGH_H)){RMIR = MIR_P2 ; //起始高驗證成功TconIr = 0 ;ByteNum = 0;BitNum = 0;}else {RMIR = MIR_RST ; //退出接收狀態}} }}//----33333--接收數據碼--------------else if(RMIR == MIR_P2) //{if(Ir_EdgeUp)//濾過低電平{TconIr = 0 ;return ;}else //if(){ //接收到數據低if((TconIr >= TDAT_LOW_L)&&(TconIr <= TDAT_LOW_H)){ IrDatRce[ByteNum] &= ~(1<<BitNum) ; }//接收到數據高else//if((TconIr >= TDAT_LOW_L) && (TconIr <= TDAT_LOW_H)){IrDatRce[ByteNum] |= (1<<BitNum) ;}BitNum ++ ;if(BitNum > 7){BitNum = 0 ;ByteNum ++ ;if(ByteNum >= IrDatLong){ByteNum = 0 ;RMIR = MIR_RST ;//結束完成 退出F_IrRecOk = 1 ;//可以取數據}}}}} }


總結

以上是生活随笔為你收集整理的用定时中断来接收红外遥控信号的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。