• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > CAN總線/RS232智能電平轉換器的設計

    CAN總線/RS232智能電平轉換器的設計

    作者: 時間:2010-12-30 來源:網絡 收藏


    4 軟件程序設計

    系統軟件程序設計包括:主程序、CAN節點初始化子程序、RS232報文發送子程序、RS232報文接收子程序、CAN報文接收子程序以及CAN報文發送子程序。其主程序流程圖如圖4所示。



    4.1 CAN節點初始化

    獨立CAN控制器SJAl000必須在上電或硬件復位后設置CAN通訊。上電后SJAl000的17引腳得到一個復位電平(低電平),使其進入復位模式。初始化包括設置工作方式、接收濾波方式、接收屏蔽寄存器和接收代碼寄存器、波特率參數和中斷允許寄存器。初始化設置完成后,SJAl000則進入工作狀態,開始執行通訊任務。

    SJAl000寄存器初始化,首先要將其模式寄存器(MOD)復位模式位置為l,再通過時鐘分頻寄存器(CDR)選擇PeliCAN工作模式,同時關閉時鐘輸出(CLOCKOUT);通過中斷允許寄存器(IER)開啟發送中斷、溢出中斷和錯誤警告中斷;向接收屏蔽寄存器(AMR)和接收代碼(ACR)寄存器賦初值;通過總線定時寄存器0 (BTR0)和總線定時寄存器1(BTRl)設置波特率;為輸出控制寄存器(OCR)賦初值;通過接收緩沖器起始地址寄存器(RBSA)來設置接收緩沖器FIF0的起始地址;清除發送錯誤計數寄存器(TXERR);清除錯誤代碼捕捉寄存器(ECC),最后再次選擇方式寄存器(MOD),設置單濾波,并返回工作狀態。

    4.2 RS232報文發送

    AT89C52內含一組全雙工串行傳輸界面,可同時接收或傳輸外部數據,其信號為TTL電平。由于與標準的RS232界面不兼容,須加電平準轉換IC才可與RS232相連。AT89C52串行發送及接收數據均是通過特殊功能暫存器SBUF完成,在設定通訊協議模式后,通過指令“MOV SUBF,A”就可將存儲在SBUF暫存器內的數據由引腳TXD串行傳輸。

    4.3 RS232報文接收

    AT89C52串行傳輸控制暫存器是由特殊控制暫存器SCON控制,SCON設定串行傳輸工作模式,發送接收時其第9位及發送接收時中斷指示工作。通過指令“MOV A,SBUF”則將外界串行信號經由RXD引腳讀入,并轉換成并列數據存入暫存器A。

    4.4 CAN報文發送

    根據CAN協議,報文傳輸是由獨立CAN控制器SJAl000完成。主控制器必須將要發送的數據按特定格式組合成一幀報文傳輸到發送緩沖器,將命令寄存器中的“發送請求”置1,然后啟動SJAl000發送即可。

    4.5 CAN報文接收

    CAN報文接收子程序負責節點的報文接收和其他情況的處理。接收子程序在結構上要比發送子程序復雜一些,因為在接收報文時,要對同處理諸如總線關閉、錯誤報警、接收溢出等情況。SJAl000報文接收和發送有兩種方式:中斷方式和查詢方式。查詢方式應禁止接收中斷使能,而中斷方式一般用于實時性要求較高的情況。

    在中斷方式下,如果SJAl000已接收一個報文,而且報文通過驗收濾波器并存入接收FIFO,則產生一個接收中斷。因此主控制器立刻工作,將收到的報文發送到報文存儲器中,再通過置位命令寄存器的相應標志“RRB”發送一個釋放接收緩沖器命令。接收FIF0里的更多報文將產生一個新的接收中斷,因此不能將所有接收FIF0中的有效信息在一個中斷周期內讀出。接收緩沖器釋放后,SJAl000會檢查狀態寄存器中接收緩沖器狀態(RBS)是否有更多報文,所有有效信息都將循環讀出。

    5 結語

    本系統設計采用SJAl000作為CAN獨立控制器,以CAN/RS232智能電平轉換器為實例,論述了CAN總線與單片機之間的接口連接,對CAN總線的實際應用具有一定的參考價值。

    本文引用地址:http://www.czjhyjcfj.com/article/151139.htm

    上一頁 1 2 下一頁

    關鍵詞: 收發器

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 镇安县| 定结县| 通城县| 开远市| 彭州市| 万安县| 体育| 浠水县| 浙江省| 常山县| 阿图什市| 新昌县| 明溪县| 光泽县| 双鸭山市| 普陀区| 封开县| 县级市| 莒南县| 和林格尔县| 乌兰浩特市| 徐水县| 卢龙县| 炎陵县| 福海县| 中超| 澜沧| 德昌县| 岑溪市| 龙川县| 伽师县| 灵台县| 资兴市| 大庆市| 霍州市| 阳西县| 和龙市| 延安市| 金乡县| 天等县| 太仆寺旗|