新聞中心

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

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

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

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

        方法三:

        分 析:中斷的方法和計數器的方法差不多,只是當計算器溢出時便產生一次中斷,用戶可以在中斷程序中置標志,程序不斷的查詢該標志來決定是否發送或接收下一位,當然程序中需對中斷進行初始化,同時編寫中斷程序。本程序使用Timer0中斷。也是我推薦的方法,和計數法大同小異。發送程序參考計數法,相信是件很容易的事。另外還需注明的是本文所說的串口就是通常的三線制異步通信串口(UART),只用

        RXD、TXD、GND。

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

        #define TM0_FLAG P1_2 //設傳輸標志位

        //計數器及中斷初始化

        void S2INI(void)

        {

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

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

        TL0=TH0;

        TR0=0; //在發送或接收才開始使用

        TF0=0;

        ET0=1; //允許定時器0中斷

        EA=1; //中斷允許總開關

        }

        //接收一個字符

        uchar RByte()

        {

        uchar Output=0;

        uchar i=8;

        TR0=1; //啟動Timer0

        TL0=TH0;

        WaitTF0(); //等過起始位

        //接收8位數據位

        while(i--)

        {

        Output >>=1;

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

        WaitTF0(); //位間延時

        }

        while(!TM0_FLAG) if(RXD) break;

        TR0=0; //停止Timer0

        return Output;

        }

        //中斷1處理程序

        void IntTimer0() interrupt 1

        {

        TM0_FLAG=1; //設置標志位。

        }

        //查詢傳輸標志位

        void WaitTF0( void )

        {

        while(!TM0_FLAG) ;

        TM0_FLAG=0; //清標志位

        }

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



        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 藁城市| 托克逊县| 沙坪坝区| 呈贡县| 社旗县| 金阳县| 怀柔区| 德化县| 岱山县| 工布江达县| 新野县| 冷水江市| 郑州市| 汝州市| 望奎县| 山东| 绵竹市| 南汇区| 陆良县| 金寨县| 色达县| 郓城县| 平安县| 浙江省| 清远市| 焉耆| 临漳县| 长寿区| 桃园市| 榆树市| 建宁县| 桐城市| 竹溪县| 洛宁县| 汝阳县| 牡丹江市| 枞阳县| 张家口市| 平陆县| 宜川县| 贵港市|