新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于單片機控制的CAN與RS-232轉換器的研究與設計

        基于單片機控制的CAN與RS-232轉換器的研究與設計

        作者: 時間:2013-03-15 來源:網絡 收藏


          3.1 基于RS-232協議的數據接收與發送程序設計

          由于RS-232接口發送數據是以字節為單位,而總線接收數據以多字節組成的數據幀為單位,因此為了避免指針指向的混亂,程序中統一使用相同長度的通用幀來保存數據。RS-232協議模塊將通用的幀使用SLIP協議進行封裝后發送,并將接收到的SLIP幀轉為通用幀格式轉入緩沖區。系統啟動后,主程序調用RS232_Receive函數檢測接收緩沖區的內容,如果緩沖區內有數據,則調用RS_Read()函數讀取緩沖區中的一幀數據并將其送入RS232_Receive()函數參數buf指向的緩沖區后返回。在讀取接收緩沖區數據后會交由RS232_Send()函數發送,并將幀數據保存至臨時發送緩沖區bufRS_S。程序通過ChkEndR()函數檢測數據幀是否發送完畢。

          3.2 CAN控制器SJA1000初始化程序設計

          CAN控制器SJA1000完成CAN總線幀的發送和接收任務。程序中,使用INITCAN()函數完成對CAN接口芯片的初始化。初始化程序設計對轉換器的正常工作相當重要。它主要完成模式設置、時鐘輸出寄存器設置、接受碼寄存器ACR設置、接收屏蔽碼寄存器AMR設置、總線定時器設置和輸出控制寄存器設置。

          3.3 基于CAN總線協議的數據接收與發送程序設計

          主程序啟動后調用CAN_Recive()函數檢查CAN接收緩沖區中是否有數據存在,如果檢查到數據,則程序從緩沖區中讀取一幀數據并將其送入參數buf指定的緩沖區中。主程序如果發現RS-232接收緩沖區內有數據,則讀取該數據幀并將其交由CAN_Send()函數發送至CAN總線。這里CAN_Send()函數接收到的數據幀格式為通用幀格式,需要先將其中的DesDevID SouDevID Length 等信息從通用幀中提取出來,填入CAN總線格式幀的各個位置,再通過命令寄存器傳遞發送請求。此外,主程序通過ChkEndC()函數檢測數據幀是否發送完畢。

          4. 結論

          本設計完成了CAN總線與的電路與軟件設計。本設計的創新點是:由于CAN總線與RS-232接口數據通信速率以及通信幀格式都不同,本設計最大優點是解決了這兩點不同,從而實現了數據在CAN總線與RS-232接口之間的傳輸。在設計中由于使用了CAN總線進行數據傳輸這就使得通信方式多主性。網絡上任意節點可以任意時刻主動地向網絡上其他節點發送信息而不分主從。可以點對點,點對多點或全局廣播方式發送和接收數據。

        參考文獻:

        [1].RS-232datasheethttp://www.dzsc.com/datasheet/RS-232_584855.html.
        [2].datasheethttp://www.dzsc.com/datasheet/_810155.html.
        [3].X25045datasheethttp://www.dzsc.com/datasheet/X25045_722886.html.
        [4].MAX232datasheethttp://www.dzsc.com/datasheet/MAX232_1074207.html.
        [5].TTLdatasheethttp://www.dzsc.com/datasheet/TTL_1174409.html.
        [6].PCA82C250datasheethttp://www.dzsc.com/datasheet/PCA82C250_18.html.
        [7].SJA1000datasheethttp://www.dzsc.com/datasheet/SJA1000_609075.html.
        [8].TLP113datasheethttp://www.dzsc.com/datasheet/TLP113_652822.html.
        [9].ACRdatasheethttp://www.dzsc.com/datasheet/ACR_2278911.html.


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 吴江市| 蓬溪县| 界首市| 榕江县| 山阴县| 金寨县| 瑞金市| 桑植县| 镇宁| 合肥市| 濮阳市| 镇远县| 湘潭县| 临朐县| 翁牛特旗| 沙湾县| 金堂县| 桐城市| 高雄县| 建始县| 阿拉善左旗| 三江| 金门县| 岚皋县| 九龙城区| 新干县| 金阳县| 临猗县| 东海县| 天全县| 抚宁县| 互助| 宣武区| 沁源县| 金门县| 永泰县| 内丘县| 卢龙县| 大方县| 株洲县| 北京市|