在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 紅外接收(模擬串口接收)

            紅外接收(模擬串口接收)

            作者: 時間:2012-09-03 來源:網(wǎng)絡(luò) 收藏

            //******************************************************************
            //@FileName: UART51.C
            //@Controller AT89S52
            //@Compiler Keil
            //@Hardware: 一個普通的I/O,一個定時器T0;和TXD
            //Description: 該程序為程序,發(fā)送的數(shù)據(jù),并通過輸出顯示,
            // 判斷是否到正確數(shù)據(jù),接收程序主要在于時間的控制,
            // 說白了,就是接收數(shù)據(jù)
            // 發(fā)送程序通過TXD直接發(fā)送數(shù)據(jù),將要發(fā)出的數(shù)據(jù)與38KHZ的方波
            // 通過兩個9012三極管處理,得到要發(fā)出的波形,再通過發(fā)射管發(fā)射
            //@Data 2010-11-14
            //Version 1.0
            //*****************************************************************
            #includereg52.h> //頭文件

            本文引用地址:http://www.biyoush.com/article/170932.htm

            #define ubyte unsigned char //宏定義
            #define uword unsigned int
            #define Rx_Lg 16 //定義要接收數(shù)據(jù)的個數(shù)

            sbit HWRx=P0^0; //接收引腳聲明

            bit State1,State2; //用于暫存引腳的前兩個狀態(tài)


            ubyte Count=0; //定時器計數(shù)值
            ubyte Date_Rx=0; //接收數(shù)據(jù)
            ubyte Bit8_Rx=0; //接收的8位
            ubyte Table_Cnt=0; //緩沖區(qū)變量值
            ubyte Flag=0,Flag8=0; //16位數(shù)據(jù)接收完成標(biāo)志位,和一個數(shù)據(jù)接收完成標(biāo)志位

            ubyte Table_Rx[16]={0}; //接收數(shù)據(jù)的緩沖區(qū)

            //****************************************************************************
            //@Function: Data8_Rx()
            //@Description 接收一個八位數(shù)據(jù)
            //@ReturnValue 無
            //@Parameters 無
            //@Data 2010-11-14
            //Version 1.0
            //****************************************************************************
            void Data8_Rx() //接收8位數(shù)據(jù)的子函數(shù)
            {
              if((Bit8_Rx>=1)(Bit8_Rx=8)) //判斷接收的數(shù)據(jù)8位,是否全部接收完成
              {
               Date_Rx>>=1; //左移一位
            if(HWRx==1) //判斷接收引腳的狀態(tài)
            Date_Rx|=0x80; //是高,則將最高位置1
            Bit8_Rx--; //減一
            if(Bit8_Rx==0) //八位數(shù)據(jù)全部接收,置標(biāo)志位
            Flag8=1;
            }
            }

            //****************************************************************************
            //@Function: Init_Uart()
            //@Description 初始化,波特率為9600Bit/s
            //@ReturnValue 無
            //@Parameters 無
            //@Data 2010-11-14
            //Version 1.0
            //****************************************************************************
            void Init_Uart() //產(chǎn)生波特率的初始化函數(shù)
            {
            TMOD|=0x20; //定時器T1工作在方式2
            SCON=0x50; //開ES,工作在方式1
            TH1=0xfd; //產(chǎn)生9600
            TL1=0xfd;
            TR1=1; //啟動定時器
            }

            //****************************************************************************
            //@Function: main()
            //@Description 主函數(shù)
            //@ReturnValue 無
            //@Parameters 無
            //@Data 2010-11-14
            //Version 1.0
            //****************************************************************************
            void main()
            {
            ubyte i=0; //循環(huán)變量

            TMOD=0x01; //定時器T0工作在方式1
            TH0=0XFF; //定時260us,按理應(yīng)該是1/1200/3=278us
            TL0=0X0F;
            EA=1; //開總控
            ET0=1; //打開定時器
            TR0=1; //啟動定時器
            Init_Uart(); //調(diào)用串口初始化函數(shù)
            while(1) //等待中斷
            { }
            }

            //****************************************************************************
            //@Function: Time0()
            //@Description 定時器T0的中斷函數(shù)
            //@ReturnValue 無
            //@Parameters 無
            //@Data 2010-11-14
            //Version 1.0
            //****************************************************************************
            void Time0() interrupt 1 //定時器中斷函數(shù)
            {
            ubyte i=0; //定義一個變量
            Count++; //計算進(jìn)入中斷的次數(shù)
            TH0=0XFF; //重裝初值
            TL0=0X0F;

            if((Count==1)(Bit8_Rx==0)) //判斷數(shù)據(jù)是否發(fā)送完成
            {
            Count=0; //是,則計數(shù)變量清零
            State2=State1; //賦紅外引腳的狀態(tài)
            State1=HWRx;
            if((HWRx==0)(State1==0)(State2==1)) //判斷是否有有效數(shù)據(jù),

            即檢測到起始位
            Bit8_Rx=8; //是,賦值,準(zhǔn)備接收
            }

            if((Count>=3)((Bit8_Rx!=0))) //判斷數(shù)據(jù)是否接收完成
            {
            Count=0; //沒有,清零計數(shù)變量
            Data8_Rx(); //接收該位
            }
            if((Flag8==1)(Bit8_Rx==0)(HWRx==1)) //判斷該數(shù)據(jù)的8位是否全部

            接收完,并且檢測到停止位
            {
            Flag8=0; //把8位數(shù)據(jù)接收完的標(biāo)志位清零
            Table_Rx[Table_Cnt]=Date_Rx; //暫存該數(shù)據(jù)
            Table_Cnt++; //變量加,準(zhǔn)備下一個
            if(Table_Cnt>=Rx_Lg) //判斷16個數(shù)據(jù)是否接收完成
            {
            Table_Cnt=0; //是,則清零
            Flag=1; //置標(biāo)志位
            }
            }

            if(Flag==1) //判斷所有數(shù)據(jù)接收完成
            {
            Flag=0; //是,則該標(biāo)志位清零
            for(i=0;i16;i++) //通過串口,發(fā)送該16個數(shù)據(jù)
            {
            SBUF=Table_Rx[i]; //發(fā)送緩沖區(qū)數(shù)據(jù)
            while(!TI); //等待發(fā)送完成
            TI=0; //發(fā)送完成,清標(biāo)志位
            }
            }
            }

            紅外遙控器相關(guān)文章:紅外遙控器原理

            萬能遙控器相關(guān)文章:萬能遙控器代碼




            關(guān)鍵詞: 接收 串口 模擬 紅外

            評論


            相關(guān)推薦

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

            關(guān)閉