<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)和PC串口異步通信

          51單片機(jī)和PC串口異步通信

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

          一.51單片機(jī)的串行通信管腳

          本文引用地址:http://www.ex-cimer.com/article/201611/318575.htm

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

          通過TXD管腳可以將CPU要發(fā)送的數(shù)據(jù)輸出,RXD管腳可以將串行數(shù)據(jù)線傳來的數(shù)據(jù)讀入。

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

          SCON:


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

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

          其中工作方式1在使用當(dāng)中比較多。

          SM2為多機(jī)通信控制位,SM2=1,允許多機(jī)通信,=0不允許,實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)通信。這里先不討論。

          TB8用于儲(chǔ)存發(fā)送數(shù)據(jù)的第9位。在方式2和方式3中,發(fā)送數(shù)據(jù)除了起始位,數(shù)據(jù)位,停止位外,還有一位校驗(yàn)位,存儲(chǔ)在TB8中。

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

          TI為發(fā)送中斷請(qǐng)求標(biāo)志。當(dāng)發(fā)送數(shù)據(jù)緩沖區(qū)為空的時(shí)候,TI通過硬件置1,通知CPU數(shù)據(jù)發(fā)送完畢,需要有軟件清零。

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

          PCON中只有最高位SMOD與串行通信有關(guān)。

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

          否則,不加倍。

          三.波特率的計(jì)算

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

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

          對(duì)于方式1,由晶振決定,為固定值。

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

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

          所以可以列出右邊為我們所要波特率的方程。同時(shí)網(wǎng)上也有許多波特率的計(jì)算工具,也可以拿來使用。

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

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

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

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

          4.啟動(dòng)T1定時(shí)器,也就是令TR1=1;

          5.如果使用中斷查詢的話,編寫中斷服務(wù)函數(shù)

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



          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();