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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 用AT89C52單片機實現(xiàn)RS422到CAN總線的轉換

          用AT89C52單片機實現(xiàn)RS422到CAN總線的轉換

          作者: 時間:2009-08-31 來源:網絡 收藏

          引言
          是串行通訊中應用較廣的標準。他能很方便地把各種計算機、外部設備、測量儀器有機地連接起來,構成一個測量、控制系統(tǒng)。但是,他傳輸速率低、傳輸距離短并且接口處信號間易產生串擾,因此不能直接應用于工業(yè)控制。

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

          剛好以其高性能、高可靠性及獨特的設計贏得了工業(yè)界的高度重視。例如,奔馳S型轎車上采用的就是系統(tǒng),美國商用車輛制造商們也將注意力轉向了總線,美國一些企業(yè)已將CAN作為內部總線應用在生產線和機床上。同時,由于CAN總線可以提供較高的安全性,因此在醫(yī)療領域、紡織機械及電梯控制中也得到了廣泛應用??梢?,總線和CAN總線之間的非常有必要。

          2硬件設計
          2.1總體設計分析

          在該系統(tǒng)中,采用總線傳輸過來的信號經過收發(fā)器后進入89C52,處理后送到CAN控制器中,然后到收發(fā)器,最后由CAN出口發(fā)出。為了保證系統(tǒng)的安全工作,在CAN控制器上加了一個“看門狗”??傮w設計框圖如圖1所示。

          2.2CAN控制器與CPU接口設計
          對于CPU來說,CAN控制器是確保雙方獨立工作的存貯器映象外圍設備。CAN控制器與外部CPU
          的接口是通過控制器接口邏輯(CIL)的, CPU通過將地址總線(AB)和數(shù)據(jù)總線(DB)連接到CIL上來完成與CAN控制器之間的信息交換,不需要專門的控制總線(CB),CPU與82C200之間的狀態(tài)、控制和命令信號的交換在CAN控制器中完成。
          2.3電子看門狗設計
          為了提高系統(tǒng)的抗干擾性能,采用X25045來做一個電子看門狗。X25045把3種常用的功能:看門狗定時器、電壓監(jiān)視和 E2PROM組合在單個封裝之內。這種組合降低了系統(tǒng)成本,并減少了對電路板空間的要求??撮T狗定時器對微控制器提供了獨立的保護系統(tǒng)。當系統(tǒng)出現(xiàn)故障時,在可選的超時周期( timeout interval )之后, X25045 看門狗將以 RESET 信號作出響應。
          3軟件設計
          CAN總線系統(tǒng)的初始化設計是軟件設計的關鍵,在初始化之前,應設置輸出控制寄存器(OCR)的復位請求位為高,再設置其他寄存器。命令寄存器(CMR)控制緩存器的收發(fā)狀態(tài);中斷寄存器(IR)、狀態(tài)寄存器(SR)查詢82C200的工作狀態(tài);接收碼寄存器(ACR)設定工作地址;接收屏蔽寄存器(AMR)設定工作形式;總線定時寄存器(BTR0、BTR1)設定工作頻率、采樣頻率;輸出控制寄存器(OCR)一般為正常輸出方式,最后應使復位請求位從高變低,使CAN控制器進入正常工作狀態(tài)。主程序框圖如圖2。


          上一頁 1 2 下一頁

          評論


          相關推薦

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