新聞中心

        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 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 庆城县| 辽中县| 漳浦县| 贞丰县| 健康| 揭阳市| 瑞金市| 寿宁县| 皋兰县| 仙居县| 灌阳县| 三台县| 绥德县| 中西区| 大埔县| 内乡县| 宜章县| 易门县| 华容县| 钟祥市| 福清市| 故城县| 怀柔区| 宜兰市| 板桥市| 新兴县| 九江县| 延长县| 株洲县| 安达市| 措美县| 平江县| 英吉沙县| 龙井市| 沿河| 西乌珠穆沁旗| 肇州县| 灵川县| 台中县| 藁城市| 吉安县|