新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機和PC串口異步通信

        51單片機和PC串口異步通信

        作者: 時間:2016-11-19 來源:網絡 收藏
        單片機和PC機間的通信有很多方式,下面的程序主要用到的是51單片機的異步串行通信。

        一.51單片機的串行通信管腳

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

        P3.1為單片機的TXD管腳(Transfer Data),P3.2為單片機的RXD管腳(Receive Data)。

        通過TXD管腳可以將CPU要發送的數據輸出,RXD管腳可以將串行數據線傳來的數據讀入。

        二.51單片機的串行通信控制寄存器SCON,電源控制寄存器PCON

        SCON:


        其中,SM0,SM1控制著串行通信的工作方式。

        SM0SM1工作方式說明波特率
        000移位寄存器fosc/12
        01110位異步收發器(8位數據)可變
        10211位異步收發器(9位數據)fosc/64或fosc/32
        11311位異步收發器(9位數據)可變

        其中工作方式1在使用當中比較多。

        SM2為多機通信控制位,SM2=1,允許多機通信,=0不允許,實現點對點通信。這里先不討論。

        TB8用于儲存發送數據的第9位。在方式2和方式3中,發送數據除了起始位,數據位,停止位外,還有一位校驗位,存儲在TB8中。

        RB8用于存儲接收數據的第9位。接收到傳來的代碼后,數據位存儲在SBUF中,而校驗位就存儲在RB8中。通過分析,可以判別接受的數據是否正確。

        TI為發送中斷請求標志。當發送數據緩沖區為空的時候,TI通過硬件置1,通知CPU數據發送完畢,需要有軟件清零。

        RI為接收中斷請求標志。總線上的數據通過RXD引腳串行送入單片機內,通過移位寄存器將串行數據變成并行數據,送入SBUF中。若接收的SBUF已經滿,通過硬件置1,通知CPU一幀數據已經接收完畢,可以進行讀取。同樣需要軟件清零。

        PCON中只有最高位SMOD與串行通信有關。

        SMOD=1,波特率在原來的基礎上加倍;

        否則,不加倍。

        三.波特率的計算

        對于方式1和方式3,波特率計算公式為:(2^SMOD/32)*(T1的溢出率);

        對于方式2,為fosc*(2^SMOD/64);

        對于方式1,由晶振決定,為固定值。

        T1也就是定時器1,做波特率發生器時,一般典型用法為工作在方式2,也就是自動裝載的8位計數模式。TH,TL各8位,但只有TL部分計數,故最大計數值為255。溢出后,TH中的數自動裝載到TL中。

        所以,T1溢出率=fosc/{12x(256-TH1)};

        所以可以列出右邊為我們所要波特率的方程。同時網上也有許多波特率的計算工具,也可以拿來使用。

        最后總結起來,串行通信大致要有這樣幾步:

        1.確定定時器T1工作方式,也就是編程TMOD寄存器;

        2.裝載T1的初值,也就是給TH1,TL1賦值;

        3.確定串行口工作方式,也就是編程SCON和PCON寄存器;

        4.啟動T1定時器,也就是令TR1=1;

        5.如果使用中斷查詢的話,編寫中斷服務函數

        上面這些大概就是串口通信的基本知識了。有了這些知識,就可以編寫程序來實踐了。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 灵武市| 莎车县| 濉溪县| 西和县| 乐昌市| 高阳县| 麟游县| 霍邱县| 华亭县| 金秀| 忻州市| 金乡县| 德江县| 炉霍县| 简阳市| 砚山县| 儋州市| 平武县| 万盛区| 奉新县| 于都县| 曲阳县| 蓝田县| 鹤山市| 同江市| 正镶白旗| 泾川县| 夹江县| 宁晋县| 揭东县| 明光市| 呼玛县| 通山县| 五寨县| 封丘县| 德阳市| 陆良县| 噶尔县| 黔西| 手游| 东丰县|