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

          新聞中心

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

          單片機雙機串口通信程序設計

          作者: 時間:2012-12-05 來源:網絡 收藏
          利用方式1實現(xiàn)通信,主頻為6M,波特率為2400bps,電路見圖5-10。當兩個距離較近時,甲、乙兩機的發(fā)送端與接收端分別直接相聯(lián),兩機共地。執(zhí)行程序,甲機將亮燈信號發(fā)送給乙機,若通信正常,乙機接收到信號后點亮20個發(fā)光二極管。乙機采用查詢與中斷兩種工作方式。當然20個LED乙機可單獨控制,也可接受甲機的控制,并執(zhí)行甲機指令,還需要進一步完善程序.
          甲機發(fā)送程序:
          org 0000h
          sta:mov tmod,#20h;設置波特率
          mov tl1,#0FAh
          mov th1,#0FAh
          setb tr1
          mov scon,#40h;置工作方式1
          clr ti
          mov a,#00h
          mov sbuf,a ;發(fā)送亮燈信號
          wait: jbc ti,cont;發(fā)送成功清標志
          ajmp wait ;等待發(fā)送完畢
          cont: sjmp sta;重復發(fā)送
          end

          乙機查詢工作方式接收:

          org 0000h
          mov tmod,#20h ;設置通信波特率
          mov tl1,#0FAh
          mov th1,#0FAh
          setb tr1
          mov scon,#40h
          clr ri
          setb ren ;允許接收
          wait: jbc ri,read;接收成功清標志
          ajmp wait ;接收未完等待
          read: mov a ,sbuf
          mov p1,a;接收亮燈信號送P1口
          sjmp $
          end

          乙機中斷工作方式接收
          org 0000h
          ajmp main
          org 0023h
          ajmp zd ;轉串口中斷程序
          START: MOV TMOD,#20h
          mov tl1,#0FAh
          mov th1,#0FAh
          setb tr1
          mov scon,#50h
          clr ri
          mov ie,#90h;開中斷

          MAIN:sjmp $ 主程序
          zd:clr ri ;清接收標志
          ;==============中斷程序還要再完善==============
          mov a ,sbuf ;讀接收信號
          mov p1,a
          MOV R1,A ;將收到的信號送緩存
          reti;中斷返回
          end
          點擊瀏覽下一頁
          串口通訊原理圖>

          采用方式2 通信,數(shù)據(jù)幀格式是11位的,TB8為奇偶校驗位,接收過程要求判斷RB8,若出錯置F0標志為1,正確則置F0標志為0,然后返回。發(fā)送波特率375kbps,晶振為12MHz,所以SMOD=l。由于傳送數(shù)據(jù)的波特率與定時器無關,所以程序中無需對定時器編程. 以下程序出自http://www.51hei.com一位單片機大俠之手,借來用用,如果什么什么錯誤或者需要改進的地方請大家指出,不過我這里基本測試通過了。
          send:
          MOVSCON,#80H;設置串行口為方式2
          MOVPCON,#80H;SMOD=l
          MOV R0,#50H;設數(shù)據(jù)塊指針
          MOV R7,#20 ;設數(shù)據(jù)塊長度
          STA: MOVA,@R0;取數(shù)據(jù)給A
          MOV C,P
          MOV TB8,C ;奇偶位P送給TB8,
          MOV SBUF,A ;啟動發(fā)送
          ;====================================================
          WAIT: JBCTI,CONT ;若發(fā)完一幀數(shù)據(jù),清標志后發(fā)下一幀數(shù)據(jù)
          AJMP WAIT ;未完等待
          ;=======================================================
          CONT:INCR0 ;修改數(shù)據(jù)指針
          DJNZ R7,STA;循環(huán)發(fā)送至結束
          RET
          ;================
          ;乙機接收程序如下:
          ;在進行通信時,兩機應采用相同的工作方式和波特率。
          ;=============================================
          MOVSCON,#90H;設置串行口為方式2,REN為1,允許接收
          MOVPCON,#80H;SMOD=1
          MOVR0,#50H;設置數(shù)據(jù)塊首址
          MOVR7,#20;置數(shù)據(jù)塊長度
          ;=========================================================
          WAIT:JBCRI,READ;接收完一幀數(shù)據(jù)則RI清零并讀入數(shù)據(jù)
          AJMP WAIT;未完等待
          ;==========================================
          READ:MOV A,SBUF ;讀入數(shù)據(jù)
          JNB PSW.0,PZ ;收到數(shù)為偶數(shù)則轉
          JNB RB8,ERR;收到數(shù)為奇數(shù),發(fā)端為偶數(shù)則通信出錯
          SJMPRIGHT ;相符則正確
          PZ:JB RB8,ERR ;收到數(shù)為偶數(shù),發(fā)端為奇數(shù)則出錯
          ;========================================
          RlGHT:MOV@R0,A ;通信正確,存放數(shù)據(jù)
          INC R0;更改地址指針
          DJNZR7,WAIT;數(shù)據(jù)塊接收完否,未完繼續(xù)
          CLR PSW.5;通信正確,置F0為0
          RET ;返回
          ERROR:SETBPSW.5;通信出錯,置F0為l
          RET ;返回


          評論


          相關推薦

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