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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51單片機的簡介——串行口、SCON

          51單片機的簡介——串行口、SCON

          作者: 時間:2016-11-23 來源:網(wǎng)絡 收藏
          51單片機有一個全雙工串行通訊口,它即可作為UART(Universal Asynchronous Receiver/Transmitter),也可作為一個同步移位寄存器。而且作為UART時,其具有多機通訊能力。
          51單片機串行口由發(fā)送控制、接收控制、波特率輸入管理和發(fā)送/接收緩沖區(qū)SBUF(地址為99H)組成。SBUF作為發(fā)送和接收緩沖區(qū)其實際是分開的兩個器件,數(shù)據(jù)不會相互覆蓋,但在對其尋址時都是99H,51單片機會根據(jù)讀或者寫指令操作相應的器件。
          站在匯編角度來看,51單片機的串行口通訊操作體現(xiàn)為累加器Acc(地址E0H)和發(fā)送/接收緩沖區(qū)SBUF之間的數(shù)據(jù)傳遞。當我們要發(fā)送數(shù)據(jù)時,對串行口完成初始化設置后,數(shù)據(jù)由累加器A傳入SBUF,然后在發(fā)送控制器的控制下組成幀結構,并自動從TXD端口發(fā)出,發(fā)送結束后置位TI(TI是特殊功能寄存器SCON的可獨立尋址位,參見SCON介紹),如果要繼續(xù)發(fā)送就在指令中將TI清0。接收數(shù)據(jù)時,相當于對串口完成初始化設置后,數(shù)據(jù)由SBUF傳入累加器Acc,在置位允許位(即設置SCON的獨立尋址位REN為1)后才開始進行串行接收操作,在接收控制器控制下,通過移位寄存器將串行數(shù)據(jù)輸入SBUF,接收結束后將RI(SCON中可獨立尋址位)置位,最后將數(shù)據(jù)送累加器Acc。
          特殊功能寄存器SCON是串行口控制寄存器,用于存放串行口的控制和狀態(tài)信息,其地址為98H,具有位尋址功能,其各位的結構如下圖所示:
          其中各個位的功能及含義如下:
          SM0、SM1:串行口工作方式選擇位,其組合含義如下圖所示:

          SM2:多機通訊控制位。在方式2和方式3中用于多機通訊控制,在方式2、方式3的接收狀態(tài)中,若SM2=1,當接收到的第9位(同時系統(tǒng)將第9位值賦予RB8)為0時,舍棄接收到的數(shù)據(jù),RI置0;若第9位為1時,將接收到的數(shù)據(jù)送入接收SBUF中,并將RI置1;而對于方式1,接收到有效的停止位時,將RI置1。對于方式0,SM2應該置0。
          REN:允許接收位。REN置1時允許接收數(shù)據(jù),REN由指令置位或者復位。
          TB8:第9位發(fā)送的數(shù)據(jù)。多機通訊時(即方式2、方式3)TB8表示主機發(fā)送的是地址還是數(shù)據(jù),TB8=0表示發(fā)送的是數(shù)據(jù),TB8=1表示發(fā)送的是地址。TB8由指令置位或者復位。
          RB8:第9位接收的數(shù)據(jù)。用來存儲接收到的第9位數(shù)據(jù),用于標明接收到的數(shù)據(jù)特征或者用于校驗。對于方式0,不使用RB8。
          TI:發(fā)送中斷標志,由硬件設置,由軟件清0。方式0串行發(fā)送完8位數(shù)據(jù)后置位,其它方式串行發(fā)送停止位后置位。
          RI:接收中斷標志,由硬件設置,由軟件清0。方式0接收完8位數(shù)據(jù)后置位,其它方式接收到停止位時置位。
          51單片機借用了PCON的D7位作為串行波特率系數(shù)SMOD控制位,PCON不可位尋址,其地址為87H,當SMOD=1時,波特率加倍。SMOD在PCON中的位置如下圖所示:



          評論


          技術專區(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); })();