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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > RS-232轉(zhuǎn)CAN通信適配卡設(shè)計

          RS-232轉(zhuǎn)CAN通信適配卡設(shè)計

          作者: 時間:2011-12-04 來源:網(wǎng)絡(luò) 收藏
          1.3 A/D轉(zhuǎn)換模塊

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

            PIC16F877A單片機自帶有8路模擬通道,轉(zhuǎn)換精度為10位。本卡選擇RA0為模擬通道。板卡將A/D轉(zhuǎn)換后的數(shù)據(jù)通過總線上傳給上位機。

            1.4 數(shù)據(jù)流

            -的數(shù)據(jù)流圖見圖4。

            2 系統(tǒng)軟件

            軟件分為兩大塊:板卡底層軟件和PC機上串口操作軟件設(shè)計。板卡底層軟件設(shè)計主要是對PIC16F877A編程,用于把從PC機通過串口輸人給單片機的數(shù)據(jù)按照協(xié)議幀結(jié)構(gòu)進行打包處理,并操作CAN控制器把數(shù)據(jù)發(fā)送到CAN總線;把從CAN總線上輸入的數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù)輸出給PC機:PC機上串口操作軟件設(shè)計主要是對串口的操作和通過串口收發(fā)數(shù)據(jù)。

            2.1單片機編程

            開發(fā)工具使用的是MPLAB集成開發(fā)環(huán)境(IDE),它是綜合的編輯器、項目管理器和設(shè)計平臺,適用于使用Microchip的PICmicro系列單片機進行嵌入式設(shè)計的應(yīng)用開發(fā);編程語言用的是C語言,將HITECH 公司的PICC編譯器直接掛接在MPLAB-IDE集成開發(fā)平臺下,實現(xiàn)一體化的編譯連接和原代碼調(diào)試。

            CAN控制器SJA1000T片內(nèi)有模式寄存器MOD、命令寄存器CMR、狀態(tài)寄存器SR、中斷寄存器IR、中斷使能寄存器IER、接收緩沖器RXB、發(fā)送緩沖器TXB、仲裁丟失捕捉寄存器ALC、錯誤代碼捕捉寄存器ECC、錯誤報警限額寄存器EWLR、錯誤計數(shù)寄存器ERR、驗收代碼寄存器ACR、驗收屏蔽寄存器AMR、總線時序寄存器BTR、輸出控制寄存器OCR和時鐘分頻寄存器CDR等,單片機就是通過讀寫這些寄存器來實現(xiàn)對SJA1000T的控制,從而實現(xiàn)CAN報文的接收和發(fā)送。文后給出CAN控制器SJA1000T初始化和接收子程序的流程圖。下面給出CAN初始化程序,其中WRCAN是自定義的一段對SJAIO00T寫數(shù)據(jù)的子程序。

            2.2 串口操作程序設(shè)計

            在各種開發(fā)工具中間,VC由于功能強大和靈活,所以本實驗系統(tǒng)使用VC作為開發(fā)工具。串口通訊目前流行的方法主要有3種:一是利用Microsoft提供的CMSCOMM控件進行通訊,通過插入ActiveX控件的方式實現(xiàn);二是利用WIN API函數(shù)進行編程,這種編程的難度較高,要掌握較多的API函數(shù);三是利用現(xiàn)在網(wǎng)絡(luò)上面提供的一些串口通訊控件進行編寫,比如CSerial類等。本程序采用WINAPI函數(shù)進行串口的開發(fā),程序在PC機上用來收發(fā)串口數(shù)據(jù)運行正確穩(wěn)定。



          關(guān)鍵詞: 設(shè)計 適配 通信 CAN RS-232

          評論


          相關(guān)推薦

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