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

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > 基于CAN總線的溫室測控系統(tǒng)的研究與設(shè)計

          基于CAN總線的溫室測控系統(tǒng)的研究與設(shè)計

          作者: 時間:2011-07-14 來源:網(wǎng)絡(luò) 收藏


          3 軟件
          的軟件程序是在Freescale公司的集成開發(fā)環(huán)境——Freescale Codewarrior 5.1下完成的。該的軟件由控制器軟件和應(yīng)用層通信協(xié)議構(gòu)成。
          3.1 驅(qū)動層軟件實現(xiàn)
          控制器軟件主要包括器件初始化、數(shù)據(jù)發(fā)送和接收。初始化工作主要是對QG8微處理器、SPI接口和MCP2515CAN控制器的初始化。其中微處理器初始化主要包括定時器、變量和外部中斷的初始化。需要特別注意的是飛思卡爾單片機的定時器與其他單片機(如51系列單片機)不太一樣,QG8微處理器的定時器是不能預(yù)置某個數(shù)值的,而且是只讀的,因此必須要有輔助寄存器才能實現(xiàn)該定時器的功能,本文采用的是QG8微處理器的16位的定時器模塊TPM:SPI接口的初始化主要包括對控制寄存器SPIC1和SPIC2、波特率寄存器SPIBR、狀態(tài)寄存器SPIS、數(shù)據(jù)寄存器SPID的設(shè)置。MCP2515的初始化為復(fù)位MCP2515、寄存器配置。只有對MCP2515初始化后,進入了配置模式才能對相關(guān)的寄存器進行初始化,初始化工作完成后進入工作模式,進行報文發(fā)送。為了能使節(jié)點穩(wěn)定的通信,CAN上所有的節(jié)點都必須有相同的波特率。對于振蕩器時鐘頻率不同的器件,可以通過對波特率預(yù)分頻比和每一個時間段中時間份額數(shù)量的設(shè)置來調(diào)整比特率。
          QG8是通過使用標(biāo)準(zhǔn)SPI讀/寫命令對寄存器進行讀/寫操作。外部數(shù)據(jù)和命令式通過SI引腳在SCK時鐘信號上升沿傳送到器件中。MCP25 15在SCK下降沿通過SO引腳發(fā)送數(shù)據(jù)。本文采用狀態(tài)查詢方式發(fā)送報文。首先應(yīng)該禁止CAN發(fā)送中斷產(chǎn)生,以保證報文發(fā)送不被中斷。為了啟動報文發(fā)送,必須將相應(yīng)緩沖器的TxBnCTRL TxREQ位置1,文中是通過調(diào)用RTS2515()請求發(fā)送來實現(xiàn)的。緩沖器中TxBnCTRL TxP1:0>優(yōu)先級最高的報文在空閑時首先被發(fā)送。如果發(fā)送成功將產(chǎn)生中斷來通知接收,否則TxBnC TRL TxRR和CANINIF.MERRF將被置位,產(chǎn)生發(fā)送錯誤狀態(tài),同時INT引腳置位,產(chǎn)生中斷請求。具體報文發(fā)送流程如圖4所示。

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

          e.JPG



          評論


          相關(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); })();