中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 模擬串口自動測量波特率的單片機程序

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

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

        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)閉