在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > AVR紅外發(fā)送和接收的頭文件

            AVR紅外發(fā)送和接收的頭文件

            作者: 時(shí)間:2016-11-18 來(lái)源:網(wǎng)絡(luò) 收藏
            *函數(shù)庫(kù)說(shuō)明:包含了紅外通訊常用收發(fā)函數(shù)和工具*
            *版本說(shuō)明:1.0Bate*
            *作者:xky183*
            *日期:2003年7月*
            *修改:GorgonMeducer*
            *日期:2005年4月21日*
            *平臺(tái):RC8M*
            **
            *說(shuō)明:紅外通訊使用的格式為字節(jié)直接發(fā)送模式,提供4位自校驗(yàn)的函數(shù)*
            *通訊時(shí)記錄載波寬度。未使用串口幀格式。軟件載波。*
            **
            *硬件連接說(shuō)明:PC5發(fā)送數(shù)據(jù)(可以修改宏定義)外中斷0接收數(shù)據(jù)*
            **
            *使用說(shuō)明:添加必要的代碼到定時(shí)器中斷,并且使用頭函數(shù)中的定時(shí)器初*
            *始化程序。使用程序中的外中斷初始化程序,添加必要的部分*
            *到外中斷處理程序中。*
            *發(fā)送數(shù)據(jù)的時(shí)候,調(diào)用函數(shù)RaySend(),也可以調(diào)用KeyDeal()*
            *來(lái)處理并發(fā)送4位的控制信號(hào)。*
            *對(duì)于接收信號(hào),直接從Ordar或者RayDataIn中讀取收到的字節(jié)*
            *請(qǐng)自己清空RayDataIn變量*
            *接受到的數(shù)據(jù)保存在變量ray_ordar*
            *開啟紅外線接收時(shí)要開外中斷0:GICR=0x40;*
            ********************************************************************/


            /*------------------------------------------------------------------*
            *紅外發(fā)射程序*
            *------------------------------------------------------------------*/


            #defineray_IO_onPORTC|=0B00100000;
            #defineray_IO_offPORTC&=0B11011111;
            #defineT1I_onTIMSK|=0B00000001;
            #defineT1I_offTIMSK&=0B11111110;
            /*---------------------*/
            /*紅外發(fā)射全局變量*/
            /*---------------------*/
            charray_Flag=0;
            charray_Sign=0;

            /*---------------------*/
            /*函數(shù)聲明區(qū)*/
            /*---------------------*/
            charKeyDeal(charTempData);//數(shù)據(jù)編碼發(fā)送函數(shù)
            voidRaySend(unsignedcharDataTemp);//數(shù)據(jù)紅外發(fā)送函數(shù)
            voiddelay_1ms(void);
            voidDelay_Ms(unsignedintn);
            voidTimer0_init(void);
            voidray_send_init(void);

            /***********紅外線發(fā)射*****************
            voidray_send_init(void)*
            {*
            Timer0_init();*
            }*
            **************************************/

            /********************************************************************
            *函數(shù)說(shuō)明:1MS延時(shí)程序*
            ********************************************************************/
            voiddelay_1ms(void)
            {
            unsignedinti;
            for(i=1;i<(unsignedint)(8*143-2);i++)
            ;
            }

            /********************************************************************
            *函數(shù)說(shuō)明:MS延時(shí)程序*
            *輸入:需要延時(shí)的時(shí)長(zhǎng)*
            ********************************************************************/
            voidDelay_Ms(unsignedintn)
            {
            unsignedinti=0;
            while(i
            {
            delay_1ms();
            i++;
            }
            }
            /*-------------------------------------------------------------------
            *發(fā)射程序需要定時(shí)器0的支持,請(qǐng)粘貼以下代碼到主程序*
            --------------------------------------------------------------------/
            /********************************************************************
            *函數(shù)說(shuō)明:定時(shí)器0中斷處理程序,用來(lái)產(chǎn)生40MHz的載波*
            *********************************************************************
            #pragmainterrupt_handlertimer0_ovf_isr:10
            voidtimer0_ovf_isr(void)//需要定時(shí)器0的中斷支持本函數(shù)庫(kù)
            {
            TCNT0=0xa5;
            ray_Flag++;
            ray_Sign=1;
            }
            /********************************************************************
            *函數(shù)說(shuō)明:定時(shí)器0初始化程序*
            *********************************************************************
            voidTimer0_init(void)
            {
            TCCR0=0x01;//CK
            TCNT0=0x9b;

            }
            -------------------------------------------------------------------*/

            /*******************************************************************
            *函數(shù)說(shuō)明:紅外發(fā)送程序*
            *輸入:要發(fā)送的數(shù)據(jù)*
            *******************************************************************/
            voidRaySend(unsignedcharDataTemp)
            {
            unsignedchari=0,DataBit=0;

            ray_Flag=0;
            ray_Sign=0;
            T1I_off;

            for(i=0;i<8;i++)
            {
            DataBit=DataTemp&0x01;
            if(DataBit==0)
            {
            T1I_on;
            while(ray_Flag<40)
            {
            ray_IO_on;//產(chǎn)生高電平
            ray_Sign=0;
            while(ray_Sign!=1);
            ray_IO_off;//產(chǎn)生低電平
            ray_Sign=0;

            while(ray_Sign!=1);
            }
            ray_Flag=0;
            ray_Sign=0;
            ray_IO_off;//產(chǎn)生低電平
            //13.125us的時(shí)間
            while(ray_Flag<=40);//50
            T1I_off;
            ray_Flag=0;
            ray_Sign=0;

            DataTemp=DataTemp>>1;
            }
            else
            {
            T1I_on;
            while(ray_Flag<80)
            {ray_IO_on;//產(chǎn)生高電平
            ray_Sign=0;
            while(ray_Sign!=1);
            ray_IO_off;//產(chǎn)生低電平
            ray_Sign=0;

            while(ray_Sign!=1)
            ;
            }
            ray_Flag=0;
            ray_Sign=0;
            ray_IO_off;//產(chǎn)生低電平
            //13.125us的時(shí)間
            while(ray_Flag<=40);//50
            T1I_off;
            ray_Flag=0;
            ray_Sign=0;
            DataTemp=DataTemp>>1;
            }
            }

            ray_Flag=0;
            ray_IO_off;//為低電平
            i=0;
            T1I_off;

            Delay_Ms(6);//兩個(gè)字節(jié)的數(shù)據(jù)之間間隔
            }

            charKeyDeal(charTempData)
            /********************************************************************
            *函數(shù)說(shuō)明:數(shù)據(jù)格式轉(zhuǎn)換(4位數(shù)據(jù)加上自己的反碼作交驗(yàn))*
            *輸入:需要轉(zhuǎn)換和發(fā)送的信息*
            *輸出:轉(zhuǎn)換好的數(shù)據(jù),并自動(dòng)發(fā)送數(shù)據(jù)*
            ********************************************************************/
            {
            charTempReturn=0;
            chari=0;
            TempReturn=~TempData&0x0f;
            TempReturn<<=4;
            TempReturn|=0x0f&TempData;
            for(i=0;i<10;i++)
            {
            RaySend(TempReturn);
            Delay_Ms(6);
            }
            returnTempReturn;
            }




            /*------------------------------------------------------------------*
            *紅外接受程序*
            *------------------------------------------------------------------*/

            /*---------------------*/
            /*紅外接收全局變量*/
            /*---------------------*/
            charray_singal_num=0;//接受信號(hào)
            charray_data_in=0;//ray_data_in為接收的數(shù)據(jù)
            charray_symbol=0;
            charray_count_array[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//Bit位數(shù)組
            charray_ordar=0;//最終得到的命令(雞肋)

            /*---------------------*/
            /*函數(shù)聲明區(qū)*/
            /*---------------------*/
            voidray_judger(void);
            voidint0_init(void);
            voidTimer1_init(void);

            /*******紅外線接收**********
            voidray_receive_init(void)
            {
            int0_init();
            Timer1_init();
            }
            ***************************/


            /*-------------------------------------------------------------------
            *發(fā)射程序需要定時(shí)器1和外中斷0的支持,請(qǐng)粘貼以下代碼到主程序*
            --------------------------------------------------------------------/
            /********************************************************************
            *函數(shù)說(shuō)明:定時(shí)器1初始化程序*
            *********************************************************************
            voidTimer1_init(void)
            {
            TCNT1=0;
            TCCR1B=0x03;
            }
            /********************************************************************
            *函數(shù)說(shuō)明:外中斷0初始化程序*
            *********************************************************************
            voidint0_init(void)
            {
            MCUCR=0x02;//開中斷0、下降沿觸發(fā)脈沖
            GIFR=0Xff;
            }
            #pragmainterrupt_handlerext_int0:2//M8參考外中斷向量
            /********************************************************************
            *函數(shù)說(shuō)明:外中斷0中斷處理程序*
            *********************************************************************
            voidext_int0(void)
            {
            chartemp=0;
            temp=TIMSK;
            TIMSK=0;
            if(ray_symbol==0)
            {
            if(TCNT1>=0x00ff)//大于4MS則重置指針
            {
            ray_singal_num=0;
            }
            TCNT1=0X00;//0.5ms記數(shù)值為31
            MCUCR=0X03;//INT0上升沿觸發(fā)
            ray_symbol=1;
            }
            else
            {
            if((TCNT1H==0)&&(TCNT1<=0x00ff))
            {
            ray_count_array[ray_singal_num]=TCNT1L;
            ray_singal_num++;
            if(ray_singal_num==8)
            {
            ray_singal_num=0;
            ray_judger();
            }
            ray_symbol=0;
            }
            else
            {

            ray_singal_num=0;
            }

            MCUCR=0X02;//INT0下降沿觸發(fā)
            TCNT1=0;
            }
            TIMSK=temp;
            }
            /*******************************************************************/

            /********************************************************************
            *函數(shù)說(shuō)明:紅外信號(hào)處理程序*
            ********************************************************************/
            voidray_judger(void)
            {
            chari=0;
            ray_data_in=0;

            for(i=0;i<8;i++)//加入適當(dāng)?shù)娜咤e(cuò)處理
            {
            if(ray_count_array[i]<0x38)//0.5ms為低電平
            {
            , ;ray_data_in&=~(1<
            }
            if(ray_count_array[i]>=0x38)//1ms為高電平
            {
            ray_data_in|=(1<
            }
            }
            ray_ordar=ray_data_in;
            }


            評(píng)論


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

            關(guān)閉