新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 89C52串口通信

        89C52串口通信

        作者: 時間:2016-11-24 來源:網絡 收藏
        #include

        unsigned char flag,a;
        void main()
        {

        本文引用地址:http://www.104case.com/article/201611/320634.htm

        TMOD=0x20;//設置定時器1為工作方式2
        TH1=0xfd; //

        TL1=0xfd; //用T1定時器設置波特率
        TR1=1; //定時器1工作
        REN=1; //串口允許接收
        SM0=0; //
        SM1=1; //串行口工作方式1
        EA=1; //CPU中斷允許
        ES=1; //串行口中斷允許
        while(1)
        {

        if(flag==1) //中斷法串口通信
        {
        ES=0; //單片機向PC發數據時應關掉串口中斷,因為發數據時
        //也會引起中斷,會進入中斷服務程序,從而引起死循環,這一步很重要
        flag=0;
        SBUF=1;//發字符1
        while(!TI); //等待TI是否為1,TI=1時說明發送數據完成
        TI=0;//手動清零TI
        SBUF=a; //把a的值放入發送緩沖器;
        while(!TI);
        TI=0;
        ES=1; //開串口中斷
        }
        }
        }

        void ser() interrupt 4 //用中斷方式接收串行數據,當RI=1或者TI=1時進入此中斷服務程序
        {
        RI=0; //手動清零RI
        a=SBUF; //把接受緩沖器的值賦給變量a
        flag=1; //自己定義的標志位
        }

        上面給出了兩種串口通信方法:查詢法和中斷法,一般用中斷法(中斷多好用啊!),注意用中斷法時一定要注意軟件清零 RI和 TI寄存器,因為串口中斷服務程序進入的條件是RI=1或者TI=1,而只要接受完一幀數據后RI會自動置1(發送完一幀數據后TI會自動置1),RI,TI只能手動軟件清零,如果不清零則會反復進入中斷服務程序,從而使程序進入循環發送或者接受的狀態。



        關鍵詞: 89C52串口通

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 泽州县| 拜泉县| 孝感市| 彭州市| 于都县| 澎湖县| 衡山县| 建平县| 东乡| 广昌县| 马尔康县| 东辽县| 乐安县| 博爱县| 延安市| 榆林市| 台南县| 密云县| 平谷区| 延边| 格尔木市| 宣城市| 沈阳市| 龙游县| 五河县| 曲周县| 淳化县| 南陵县| 阜新| 仁化县| 佳木斯市| 洛浦县| 云霄县| 岚皋县| 新民市| 鄂州市| 延长县| 尉犁县| 株洲市| 伊吾县| 桓仁|