新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 串行通訊(單片機)

        串行通訊(單片機)

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

        #include
        #include "config.h"

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

        #defineucharunsigned char
        #define uintunsigned int
        #define BEEPP0_5

        ucharReceiveBuf;//定義接受緩沖區
        ucharSendBuf[] = {11, 22};//將發送的數組放在數組SendBuf[]中

        // 延時函數
        void delay(uint n)
        {
        uint i, j;
        for(i = n; i > 0; i--)
        for(j = 115; j > 0; j--);
        }

        //串行口的初始化函數
        void series_init()
        {
        SCON = 0X50;//串口工作方式1,允許接收
        TMOD = 0X20;//定時器T1工作方式2
        TH1 = 0XFD; TL1 = 0XFD;//定時初值
        PCON &= 0X00;//SMOD=0
        TR1 = 1;//開啟定時器1
        EA = 1;//開總中斷
        ES = 1;//開串行中斷
        }

        void main(void)
        {
        series_init();
        for(;;){//等待中斷
        }
        }

        void series() interrupt 4
        {

        RI = 0;//接收中斷清零
        ES = 0;//暫時關閉串口中斷
        ReceiveBuf = SBUF;//將接收到得數據保存到ReceiveBuf中
        if(islower(ReceiveBuf) || isupper(ReceiveBuf) || isdigit(ReceiveBuf)){
        SBUF = ReceiveBuf;//將接收到的字符發送出去
        while(!TI);//等待發送完畢
        TI = 0;//發送完畢,TI(發送中斷標志)清0
        BEEP = 1;
        delay(100);
        BEEP = 0;
        }
        ES = 1;//打開串口中斷
        }

        串行中斷程序的編寫步驟:

        1. 設置串行口工作方式

        2. 設置定時器T1工作方式,定時器T1作為波特率發生器,一般選用方式2,因為其可以自動裝入初值功能,可以使波特率更加穩定

        3. 設置定時初值

        4. 設置波特率倍增位,不能位尋址,可以通過PCON設置,最高位就是SMOD倍增位,1時倍增

        5. 開定時器和中斷

        6. 串行中斷程序中,首先接收中斷清零,關閉串口中斷

        7. 取出接收到 的數據進行處理然后發送

        8.發送完后打開串行中斷繼續接收數據



        關鍵詞: 串行通訊單片

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 楚雄市| 临夏市| 临沭县| 江川县| 绥化市| 武安市| 海林市| 昌乐县| 延川县| 柳林县| 永康市| 萨迦县| 龙泉市| 营口市| 嵊州市| 泰顺县| 兰考县| 许昌县| 集安市| 多伦县| 且末县| 资中县| 上蔡县| 绥江县| 洪雅县| 通化市| 塘沽区| 巴南区| 鄂伦春自治旗| 柘荣县| 富宁县| 嘉善县| 蕉岭县| 梨树县| 威海市| 北海市| 黔东| 卢龙县| 瑞安市| 象山县| 郑州市|