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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51系列單片機之串口通信

          51系列單片機之串口通信

          作者: 時間:2016-11-20 來源:網(wǎng)絡 收藏
          單片機串口通信看起來是很復雜的,主要是因為他用到了更多的寄存器,與前面的知識相比他更具綜合能力,寫起來考慮的問題自然也變多了.而前面學習過的定時器與中斷將是單片機通信的基礎.
          單片機的中斷系統(tǒng)中第4個中斷就是串口中斷,要進行串口通信首先就要打開CPU總中斷EA,還要打開串口通信中斷ES,這是串口通信的前堤,而串口通信也跟計時器一樣有很多的模式,因此我們還要設置SCON寄存器來指定采用哪一種方式進行通信,而在通信的過程中,我們還要設定通信的波特率,不然的話,單片機是沒辦法進行采樣的,這樣也不會得到正確的結果了.我在實驗過程中用到的是1號定時器來設定的波特率,用到了計時器方式2,也就是8位自動重裝,這樣可以簡化編程,她的實現(xiàn)思想就是將常數(shù)放入TH,而TL中則是初始化參數(shù),當溢出時,單片機會自動將TH中的常數(shù)裝入TL中.



          再來說說波特率,我們?yōu)槭裁匆O定波特率,因為單片機會以16倍波特率的速度進行采樣,而在實驗中我們用的是10位異步收發(fā)方式,因此要將SM0置0,SM1置1.而其中的10位有8位數(shù)據(jù)位,第一位和最后一位是發(fā)送數(shù)據(jù)的起始與結束.采用高的皮特率就不會出錯啦.而波特率是有一個公式的:
          方式0的波特率 = fosc/12
          方式2的波特率 =(2SMOD/64)· fosc
          方式1的波特率 =(2SMOD/32)·(T1溢出率)
          方式3的波特率 =(2SMOD/32)·(T1溢出率)
          T1 溢出率 = fosc /{12×[256 -(TH1)]}
          根據(jù)公式我們很容易就算出當晶振為110592HZ時,要達到9600的波特率,我們只需要將TL1置FDH即可,如下圖:


          除此之外,你還要將SCON中的REN位置1,不然的話,單片機是不會接收數(shù)據(jù)的.
          還有不要忘了選擇定時器的工作方式,設置TMOD為0x20既是工作方式2,8位自動重裝定時器.
          這樣一來,初始批工作算是差不多了.而串口通信分為中斷方式,和查詢方式,如果你想用查詢方式你也不用設置IE寄存器了.
          在串口通信中,還有一個很重要的寄存器SBUF,其實也不是一個,是兩個,只是它們共用同一個地址,再熱氣表達式的不同,單片機會自動選擇使用哪一個SBUF.


          評論


          技術專區(qū)

          關閉
          看屁屁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); })();