在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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è)計應用 > 模擬串口自動測量波特率的單片機程序

            模擬串口自動測量波特率的單片機程序

            作者: 時間:2012-08-02 來源:網(wǎng)絡 收藏

            void WByte(BYTE out)
            {
            //發(fā)送啟始位
            BYTE i=8;
            BYTE tmp=out;
            TR1=1;//開定時器
            TX1=0;
            WaitTF1();
            //發(fā)送8位數(shù)據(jù)位
            while(i--)
            {
            TX1=(tmp0x01); //先傳低位
            tmp=tmp>>1;
            WaitTF1();
            }
            //發(fā)送校驗位(無)
            //發(fā)送結(jié)束位
            TX1=1;
            WaitTF1();
            TR1=0;
            }
            void putchar(char ch)
            {
            WByte(ch);
            }
            BYTE RByte()
            {
            BYTE in=0;
            BYTE cnt;
            while(RX1==1);//等待RXD變低,啟動定時器,這個是阻塞模式
            TR1=1;//同步開定時器//這里……
            //while(!TF1);
            //TF1=0;
            WaitTF1();
            if(min_mode !=0)
            {
            while(!TF1);//注意這里的周期稍微長。要補償
            TF1=0;
            }
            for(cnt=0;cnt8;cnt++)
            {
            in=in >>1;//從高移到低
            if(RX1==1) in = in | 0x80;//如果RXD=1,則最高置位
            WaitTF1();//等待一位過去
            }
            while(!TF1);//注意這里的周期稍微長。要補償
            TF1=0;
            TR1=0;//關(guān)閉定時器
            return in;
            }

            UINT f_Test(void)//測試脈寬
            {
            TMOD=0x10;//設(shè)置計數(shù)器1為方式一計數(shù)器模式
            TH1=0;
            TL1=0;//定時器CLR
            while(!RX1);//等待頻率腳變高,這個是測低電平的
            while(RX1);//等待腳變低,更換符號可以測正脈沖
            TR1=1;//開啟定時器
            while(!RX1);//等待變高
            TR1=0;//停止計數(shù)
            //cyc=TH08;
            //cyc=cyc+TL0;
            return (TH18)+TL1;
            }
            void baud_t()
            {
            BYTE k;//復用變量
            ULONG frq=0; //周期變量
            for(k=0;k5;k++)// 變量復用大法
            {
            frq=frq+f_Test();//測試
            }//測量5次取平均
            frq=frq/5;
            if(frq0xff)
            {
            k=0x100-(frq0xff);
            min_mode=MIS_0;
            }
            else
            {
            if(frq / 2 0xff)
            {//2400baud
            k=0x100-((frq/2)0xff); //2分頻
            min_mode=MIS_2;
            }
            else if(frq / 4 0xff)
            {//1200baud
            k=0x100-((frq/4)0xff);//4分頻
            min_mode=MIS_4;
            }
            else if(frq / 8 0xff)
            {//1200baud
            k=0x100-((frq/8)0xff);//8分頻
            min_mode=MIS_8;
            }
            else if(frq / 16 0xff)
            {//1200baud
            k=0x100-((frq/16)0xff);//16分頻
            min_mode=MIS_16;
            }
            }
            if(k > 0x50)
            {
            k=k+6;//加補償,因為if語句讓機器周期加長
            //如果對于STC的新MCU,這里要按照情況調(diào)整
            }
            TMOD=0x20;//設(shè)置定時器1為自動裝載模式
            TH1=k;//載入新
            TL1=k;
            }
            void main()
            {
            while(1)
            {
            baud_t();//測量,阻塞模式
            printf("Hello world!n");
            printf("Here:mode=%d,T1=0x%Xrn",min_mode,TH1);//這里如果你要使用keil請自己寫字符串發(fā)送函數(shù),和sprintf配合使用
            printf("Could you please test another baudrate?rn");
            printf("But I think that I couldn't to do.....rn");
            }
            }


            上一頁 1 2 下一頁

            關(guān)鍵詞: 模擬串口 自動測量 波特率

            評論


            相關(guān)推薦

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

            關(guān)閉