新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機模擬串口的三種方法

        51單片機模擬串口的三種方法

        作者: 時間:2013-02-26 來源:網絡 收藏

        //從串口接收一個字節

        uchar RByte(void)

        {

        uchar Output=0;

        uchar i=8;

        uchar temp=RDDYN;

        //接收8位數據位

        Delay2cp(RDDYN*1.5); //此處注意,等過起始位

        while(i--)

        {

        Output >>=1;

        if(RXD) Output |=0x80; //先收低位

        Delay2cp(35); //(96-26)/2,循環共占用26個指令周期

        }

        while(--temp) //在指定的時間內搜尋結束位。

        {

        Delay2cp(1);

        if(RXD)break; //收到結束位便退出

        }

        return Output;

        }

        /****************************************************

        方法二: 計數法

        分 析: 51的計數器在每指令周期加1,直到溢出,同時硬件置溢出標志位。這樣我們就可以通過預置初值的方法讓機器每96個指令周期產生一次溢出,程序不斷的查詢溢出標志來決定是否發送或接收下一位。接收的程序,可以參考下一種方法,不再寫出。這種辦法個人感覺不錯,接收和發送都很準確,另外不需要計算每條語句的指令周期數。**************************************************************/

        //計數器初始化

        void S2INI(void)

        {

        TMOD |=0x02; //計數器0,方式2

        TH0=0xA0; //預值為256-96=140,十六進制A0

        TL0=TH0;

        TR0=1; //開始計數

        TF0=0;

        }

        //查詢計數器溢出標志位

        void WaitTF0( void )

        {

        while(!TF0);

        TF0=0;

        }

        //向串口發送一個字節數據

        void WByte(uchar input)

        {

        //發送啟始位

        uchar i=8;

        TR0=1;

        TXD=(bit)0;

        WaitTF0();

        //發送8位數據位

        while(i--)

        {

        TXD=(bit)(input0x01);//先傳低位

        WaitTF0();

        input=input>>1;

        }

        //發送校驗位(無)

        //發送結束位

        TXD=(bit)1;

        WaitTF0();

        TR0=0;

        }

        51單片機相關文章:51單片機教程




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 资兴市| 古丈县| 铜山县| 文登市| 太谷县| 鄂托克旗| 宝鸡市| 大姚县| 阿拉善左旗| 泸水县| 库车县| 五大连池市| 郓城县| 温州市| 临潭县| 博爱县| 长治县| 潮州市| 融水| 绍兴县| 灌阳县| SHOW| 瑞金市| 安岳县| 辽宁省| 连城县| 即墨市| 蓬安县| 泽库县| 木里| 舒兰市| 曲沃县| 磐安县| 罗源县| 万载县| 调兵山市| 福海县| 香格里拉县| 凌云县| 丹江口市| 梅河口市|