




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、CAN網絡通訊實驗板課程設計目 錄1 前言 . 12 系統設計 . 22.1硬件設計. 2硬件方案比較. 2硬件方案論證. 3硬件方案選擇. 42.2硬件設計. 42.1軟件設計方案. 73系統硬件設計 . 83.1 CAN總線介紹. 83.2從站CAN總線接口電路. 83.3硬件模塊說明. 93.4 CAN電路接線. 103.5 CAN總線控制器SJA1000. 103.6 CAN控制器接口PCA82C250. 104系統軟件設計 . 114.1程序流程圖. 11 主程序流程圖.11 初始化子程序流程圖.11 發送數據子程序流程圖. 12 接收數據子程序流程圖. 134.2 軟件實現過程.
2、134.2核心源程序. 155系統調試 . 215.1 PC機與下位機的通訊調試. 215.2 CAN總線調試. 215.3 單片機最小系統電路的調試. 215.4 綜合調試. 225.5 最終實現效果. 225.6 測試儀器. 226結果分析及心得體會 . 236.1 結果分析. 236.2 心得體會. 23 CAN總線的其他應用. 237 參考文獻 . 25附錄:系統設計原理圖. 261 前言現場總線是當今自動化領域技術發展的熱點之一,被譽為自動化領域的計算機局域網。它的出現為分布式控制系統實現各節點之間實時、可靠的數據通信提供了強有力的技術支持。CAN(Controller Area N
3、etwork)屬于現場總線的范疇,是一種多主方式的串 行通訊總線,數據通信實時性強。與其它現場總線比較而言,CAN總線具有通信速率高、容易實現、可靠性高、性價比高等諸多特點。本系統要在單片機中實現CAN總線的接口,通過CAN總線,實現兩個模塊之間的數據通訊。系統主要由四部分所構成:PC機、微控制器80C51、獨立CAN通信控制器SJA1000和CAN總線收發器PCA82C250。微處理器80C51負責SJA1000的初始化,通過控制SJA1000實現數據的發送和接收等通信任務。CAN總線節點的軟件設計主要包括三大部分:CAN節點初始化、報文發送和報文接收。本系統通過擴展CAN總線控制器SJA1
4、000,在單片機系統中實現了CAN總線的接口,并且編寫了SJA1000的驅動程序,通過讀寫其的內部寄存器,完成工作方式的設置、接收濾波方式的設置、接收屏蔽寄存器(AMR)和接收代碼寄存器(ACR)的設置、波特率參數設置和中斷允許寄存器(IER)的設置等基本操作;利用各基本操作,完成了對SJA1000的初始化,并且實現了數據發送和接收。2 系統設計要實現一個系統的某些功能往往不只一種方法和途徑,我們可以通過不同的方法實 現相同的功能,因此我們需要從各個角度進行綜合考慮,如各個方案的可行性、實用性、穩定性、實現的難度等。從而選擇較好的一種方案進行設計。下面對本設計的各個模塊進行方案對比,以選擇較為
5、合理的設計方案。2.1硬件設計硬件方案比較方案一:本方案是基于三星公司的ARM微處理器S3C2440與PHILIPS公司的CAN控制器SJA1000的嵌入式控制系統,在本系統中,S3C2440直接與SJA10000相連接,由S3C2440控制CAN收發器。S3C2440是高速的微處理器,其最高的工作頻率可以達到533MHz,且內部資源十分豐富,十分適合嵌入式便攜式產品的應用和開發,該方案的框架圖如圖2.1所示。但由于S3C2440的硬件電路連接十分復雜,對于繪制PCB板有很大的難度,且加工工藝要求比較高,一般是六層板加工工藝,對于單個加工來說加工成本非常高,且使用起來也比80C51要復雜很多,
6、對于本設計來說很浪費資源和成本。SJA1000的設計是基于早期的8051單片機的應用,對于從站控制器可以直接與單片機的總線相連接,但不能直接與s3c2440連接,因為s3c2440的地址總線和數據總線完全是分開的,所以還需要模擬出類似80C51單片機的外部存儲器時序才能使用,這樣接口連接也不能夠直接對應。SJA1000一般是5V電壓供電,而s3c2440一般為3.3V供電,其接口電壓最高只能達到3.3V,所以電平也不兼容,要用特殊的轉接電路才能實現連接。這樣在硬件和軟件都增加了很大的難度,因此很難實現功能。方案二:本方案通過PC機進行上位機控制,80C51與PC機串行通信,設置SJA1000工
7、作于Intel模式,由PC機發送的數據寫入SJA1000并通過CAN收發器發送。接收數據是通過中斷進行的,CAN 總線傳輸過來的數據經CAN接口芯片PCA82C250接收并寫入SJA1000的RXFIFO,然后通過中斷提請CPU讀取,讀取的數據上傳送給PC機。試驗表明,CAN總線的結構簡潔、數據傳輸穩定可靠、抗干擾能力強、傳輸速率可達1Mbit/s同時能有128個從站系統,能滿足現場的實時性要求。其系統的結構框圖如圖2.2所示。 這種方案的好處在于硬件結構相對簡單,SJA1000的設計是基于早期的8051單片機的應用,其接口完全與80C51的外部總線接口兼容,電平也完全兼容,都為5V供電。上位
8、機界面可以通過常見的編程軟件,其主要的編寫平臺有Microsoft公司的Visual Basic與Visual C+,Borland公司的Delphi,Sybase公司的Power Builder等,上位機控制界面通過串口傳輸數據到主站的控制器,主控器再通過CAN網絡與各個從站控制器相連接,實現相互間通訊,交換相應的數據,這樣便可以采集到遠處的實用信息。操作簡單,界面設計更加容易。硬件方案論證方案一:由圖2.1可以看出,該方案采用嵌入式系統,S3C2440為32位的高速微處理器,其內部和外部資源豐富,能夠很好地支持多種操作系統,如:WinCE,uCos,linux等,通過操作系統能夠很方便地對
9、系統進行管理和操作,給我們的程序編寫帶來了很大的方便,本方案采用的是linux 操作系統,該系統最大優點在于可移植性很強,支持多種不同平臺的MCU,對S3C2440有很好的支持,其源代碼開源。系統用嵌入式QT(Embedded QT)做界面設計,界面更加友好,可通過觸摸屏、鼠標和鍵盤對系統進行操作,但由于 S3C2440的硬件電路連接十分復雜,對于繪制PCB板有很大的難度,且加工工藝要求比較高,一般是六層板加工工藝,對于單個加工來說加工成本非常高,且使用起來也比80C51要復雜很多,對于本設計來說很浪費資源和成本。SJA1000的設計是基于早期的8051單片機的應用,對于從站控制器可以直接與單
10、片機的總線相連接,但不能直接與s3c2440連接,因為s3c2440的地址總線和數據總線完全是分開的,所以還需要模擬出類似80C51單片機的外部存儲器時序才能使用,這樣接口連接也不能夠直接對應。SJA1000一般是5V電壓供電,而s3c2440一般為3.3V供電,其接口電壓最高只能達到3.3V,所以電平也不兼容,要用特殊的轉接電路才能實現連接,硬件和軟件都增加了很大的難度,因此很難實現功能。方案二:由圖2.2可以看出,這種方案的硬件實現較為容易,結構也比較簡單,整個系統的控制方式為PC機作為人機交互的接口,硬件結構相對簡單,SJA1000的設計是基于早期的8051單片機的應用,其接口完全與80
11、C51的外部總線接口兼容,電平也完全兼容,都為5V供電。上位機界面可以通過常見的編程軟件,界面設計容易,且操作簡便。硬件方案選擇通過以上兩種方案的論證比較,結合本題,選擇方案二。方案二通過PC機進行上位機控制,80C51與PC機串行通信,設置SJA1000工作于Intel模式,由PC機發送的數據寫入SJA1000并通過CAN收發器發送。接收數據是通過中斷進行的,CAN 總線傳輸過來的數據經CAN接口芯片PCA82C250接收并寫入SJA1000的RXFIFO,然后通過中斷提請CPU讀取,讀取的數據上傳送給PC機。試驗表明,CAN總線的結構簡潔、數據傳輸穩定可靠、抗干擾能力強、傳輸速率可達1Mb
12、it/s同時能有128個從站系統,能滿足現場的實時性要求。2.2硬件設計1. 芯片介紹SJA1000:SJA1000 是一種獨立控制器 用于移動目標和一般工業環境中的區域網絡控制 CAN 它是 PHILIPS半導體 PCA82C200 CAN 控制器 BasicCAN 的替代產品 而且 它增加了一種新的工作模式 PeliCAN ,這種模式支持具有很多新特性的 CAN 2.0B 協議。其特性如下: 和 PCA82C200 獨立 CAN 控制器引腳兼容 和 PCA82C200 獨立 CAN 控制器電氣兼容 PCA82C200 模式 即默認的 BasicCAN 模式 擴展的接收緩沖器 64 字節 先
13、進先出 FIFO 和 CAN2.0B 協議兼容 PCA82C200 兼容模式中的 同時支持 11 位和 29 位識別碼 位速率可達 1Mbits/s PeliCAN 模式擴展功能 -可讀/寫訪問的錯誤計數器 -可編程的錯誤報警限制 -最近一次錯誤代碼寄存器 -對每一個 CAN 總線錯誤的中斷 -具體控制位控制的仲裁丟失中斷 -單次發送 無重發-只聽模式 無確認 無活動的出錯標 志-支持熱插拔 軟件位速率檢測-驗收濾波器擴展 4 字節代碼 4 字節屏蔽-自身信息接收 自接收請求 24MHz時鐘頻率 對不同微處理器的接口 可編程的 CAN 輸出驅動器配置 增強的溫度適應 -40+1256N137:
14、高速光隔,最高速度10Mbs,用于保護CAN控制器。PCA82C250:CAN總線收發器,是CAN控制器與CAN總線的接口器件,對CAN總線差分式發送。2. CAN控制器與CPU接口設計對于CPU來說,CAN控制器是確保雙方獨立工作的存貯器映象外圍設備。CAN控制器與外部CPU的接口是通過控制器接口邏輯(CIL)實現的,80C51 的CPU通過將地址總線(AB)和數據總線(DB)連接到CIL上來完成與CAN控制器之間的信息交換,不需要專門的控制總線(CB),CPU與PCA82C250之間的狀態、控制和命令信號的交換在CAN控制器中完成。SJA1000與單片機的接口電路如圖2.3所示。3. CA
15、N控制器工作電路的連接為了增強CAN總線節點的抗干擾能力,SJA1000的TX0和RX0并不是直接與PCA82C250的TXD和RXD相連,而是通過高速光隔6N137后與PCA82C250相連,這樣就很好的實現了總線上各CAN節點間的電氣隔離。若PCA82C250處于CAN總線的網絡終端,總線接口部分需加一個120歐姆的匹配電阻。CAN控制器工作電路如下圖所示:2.1軟件設計方案CAN 總線節點的軟件設計主要包括三大部分:CAN節點初始化、報文發送和報文接收。熟悉這三部分程序的設計就能編寫出利用CAN總線進行通信的一般應用程序。當然要將CAN總線應用于通信任務比較復雜的系統中,還需詳細了解有關
16、CAN總線錯誤處理、總線脫離處理、接收濾波處理、波特率參數設置和自動檢測以及CAN總線通信距離和節點數的計算等方面的內容。SJA1000的初始化只有在復位模式下才可以進行,初始化主要包括工作方式的設置、接收濾波方式的設置、接收屏蔽寄存器(AMR)和接收代碼寄存器(ACR)的設置、波特率參數設置和中斷允許寄存器(IER)的設置等。在完成SJA1000的初始化設置以后,SJA1000就可以回到工作狀態,進行正常的通信任務。發送子程序負責節點報文的發送。發送時用戶只需將待發送的數據按特定格式組合成一幀報文,送入SJA1000發送緩存區中,然后啟動SJA1000 發送即可。接收子程序負責節點報文的接收
17、以及其它情況處理。接收子程序比發送子程序要復雜一些,因為在處理接收報文的過程中,同時要對諸如總線脫離、錯誤報警、接收溢出等情況進行處理。SJA1000報文的接收主要有兩種方式:中斷接收方式和查詢接收方式,兩種接收方式編程的思路基本相同,如果對通信的實時性要求不是很強,一般采用查詢接收方式。3系統硬件設計3.1 CAN總線介紹CAN全稱為“Controller Area Network”, 即控制器局域網,是國際上應用最廣泛的現場總線之一。最初CAN被設計作為汽車環境中的微控制器通訊,在車載各電子控制裝置ECU之間交換信息,形成汽車電子控制網絡。比如發動機管理、系統變速箱控制器、儀表裝備中,均嵌
18、入CAN控制裝置。一個由CAN總線構成的單一網絡中,理論上可以掛接無數個節點。實際應用中,節點數目受網絡硬件的電氣特性所限制。例如當使用Philips PCA82C250作為CAN收發器時,同一網絡中允許掛接110個節點。CAN 可提供高達1Mbit/s的數據傳輸速率,這使實時控制變得非常容易,另外硬件的錯誤檢定特性也增強了CAN的抗電磁干擾能力。CAN是一種多主方式的串行通訊總線。基本設計規范要求有高的位速率,高抗電磁干擾性,而且能夠檢測出產生的任何錯誤。當信號傳輸距離達到10Km 時,CAN仍可提供高達50Kbit/s 的數據傳輸速率。由于CAN 總線具有很高的實時性能,因此CAN已經在汽
19、車工業、航空工業、工業控制、安全防護等領域中得到了廣泛應用。3.2從站CAN總線接口電路目前廣泛流行的 CAN總線器件有兩大類:一類是獨立的CAN控制器,如82200、SJA1000及Intel82526/82527等,另一類是帶有在片CAN的微控制器,如P8SC582及16位微控制器87C196CA/CB等。我們選用PHILIPS公司的SJA1000CAN控制器以及82C250總線收發器,見圖1。主要是考慮到SJA1000支持CAN2.0/規約。而82C250可以支持110個CAN節點,并且國內市場上PHILIPS的產品型號比較多,購買比較方便。PHILIPS公司的SJA1000是符合CAN
20、2.0協議的總線控制器,它是應用于汽車和一般工業環境的獨立CAN 總線控制器。由于硬件和軟件的兼容它將會替代PCA82C200,它與PCA82C200 相比具有更先進的特征因此特別適合于轎車內的電子模塊傳感器制動器的連接和通用工業應用中特別是系統優化系統診斷和系統維護時特別重要。SJA1000具有完成CAN通信協議所要求的全部特性。經過簡單總線連接的SJA1000可完成CAN總線的物理層和數據鏈路層的所有功能。其硬件與軟件設計可兼容基本 CAN模式(BasicCAN)和新增加的增強CAN模式(PeliCAN)CAN2.0B協議。CAN總線的硬件連接圖如圖3.2所示3.3硬件模塊說明CAN總線模
21、塊由一個CAN總線控制器SJA1000和一個CAN收發器PCA82C250組成,它們共同構成一個CAN節點。模塊的電源由接口掛箱上的接口插座提供。模塊上的RESET、INT、TX0、RX0插孔分別對應于SJA1000芯片上的相應引腳。模塊上帶有上電復位電路,也可通過RESET插孔進行手動復位,只需在RESET上加上負脈沖。 模塊上提供兩個RJ45接口和一組“CANH、CANL”插孔接口,這三組接口是完全一致的。對于近距離CAN模塊之間的通訊,可將各模塊的“CANH、CANL”插孔用導線連接;對于遠距離CAN模塊之間的通訊,則可用雙絞線連接各RJ45接口。每個CAN模塊上都有一組終端電阻接口,即
22、“A、B”插孔。當總線上只有兩個CAN節點時,終端電阻可不接。如總線上的CAN節點數為3個或3個以上時,必須有一個而且只能有一個CAN模塊接上終端電阻。具體接法為:將A插孔和CANL插孔、B插孔和CANH插孔分別用導線連接。3.4 CAN電路接線兩個CAN模塊分別接在兩個實驗臺上,第一個模塊(發送)跳線接LCS2,第二個模塊(接收)跳線接LCS3,用雙絞線連接兩個模塊的RJ45接口,將第一個CAN模塊接上終端電阻。3.5 CAN總線控制器SJA1000SJA1000是一種獨立的CAN控制器,主要用于移動目標和一般工業環境中的區域網絡控制。它是Philips半導體公司PCA82C200 CAN控
23、制器(BasicCAN)的替代產品,增加了一種新的操作模式PeliCAN,這種模式支持具有很多新特性的CAN2.0B協議。3.6 CAN控制器接口PCA82C250PCA82C250是CAN協議控制器和物理總線間的接口,它主要是為汽車中高速通訊(高達1Mbps)應用而設計。此器件對總線提供差動發送能力,對CAN控制器提供差動接收能力,與ISO11898標準完全兼容。PCA82C250芯片由接收器、驅動器、基準電壓產生電路、工作模式選擇電路及保護電路等組成。PCA82C250內部的限流電路可以防止發送輸出級對電池電壓的正端和負端短路。雖然在這種故障條件出現時,功耗將增加,但這種特性可以阻止發送器
24、輸出級的破壞。在節點溫度大約超過160時,兩個發送器輸出端的極限電流將減少。由于發送器是功耗的主要部分,因此芯片溫度會迅速降低。PCA82C50芯片的其他部分將繼續工作。當總線短路時,熱保護十分重要。CANH和CANL兩條線也可以防止在汽車環境下可能發生的電氣瞬變現象。4系統軟件設計4.1程序流程圖4.1.1 主程序流程圖程序開始運行后,先調用初始化子程序,分別對兩個CAN模塊中的SJA1000進行初始化,然后把要發送的數據寫入CPU的存儲器中,然后循環調用發送數據子程序和接收數據子程序。具體流程如圖3-1所示。4.1.2 初始化子程序流程圖初始化子程序先設置MOD選擇復位模式,然后分別設置C
25、DR選擇工作模式;設置IER選擇中斷類型;設置BTR0、BTR1設定傳輸速率;設置OCR選擇輸出模式;設置ACR、AMR設定接收數據類型;RBSA、TXERR、ECC均清零,最后設置MOD進入工作模式。具體流程如圖3-2所示。4.1.3 發送數據子程序流程圖發送數據子程序先把三個控制字節寫入發送緩沖區,然后把等待發送的數據也寫入發送緩沖區,最后設置CMR,發出發送請求、啟動SJA1000發送數據。具體流程如圖3-3所示。4.1.4 接收數據子程序流程圖接收數據子程序首先要讀SR和IR,判斷工作狀態及中斷類型并做相應處理,若RXFIFO有數據,應判斷幀類型并做相應處理,若數據正確則送至CPU的內
26、部存儲器。具體流程如圖3-4所示。4.2 軟件實現過程兩個實驗臺運行程序CAN.ASM(程序見附錄),發送實驗臺全速運行程序,接收實驗臺要在主程序中調用接收數據子程序后設置斷點,等待接收到數據后送至CPU的存儲器,然后查看CPU的內部存儲器30H37H中的數據與程序中發送的數據是否一致。 4.2核心源程序#include STC_NEW_8051.H#include #include #include #include #include USART_MODE.hvoid main(void)init_mcu(); init_sja1000(); Init_usart(9600); while(
27、1) rxd_deal(); txd_deal();/將接收到的數據除以4在紅綠燈上顯示 if(Rxd_data % 4)=0) LED_blue = 0; LED_red = 0; if(Rxd_data % 4)=1) LED_blue = 0; LED_red = 1;if(Rxd_data % 4)=2) LED_blue = 1; LED_red = 0;if(Rxd_data % 4)=3) LED_blue = 1; LED_red = 1; void init_mcu(void)LED_red = 1; LED_blue = 1;LED_3 = 1; LED_4 = 1; LE
28、D_5 = 1; LED_6 = 1; SJA_RST = 0; /CAN總線復位管腳復位有效SJA_RST = 1; /CAN總線復位管腳復位無效SJA_CS = 0; /CAN總線片選有效EX1 = 1; /開MCU外部中斷INT1IT1 = 1; /MCU外部中斷INT1設置為下降沿觸發IT0 = 0; /MCU外部中斷INT0設置為電平觸發,該中斷口連接CAN總線接收中斷口EX0 = 1; /開MCU外部中斷INT0EA = 1; /開MCU總中斷/ SJA_CS = 1; /CAN總線片選無效,使得對數據總線的操作不會影響SJA1000。void init_sja1000(void)
29、uchar state;uchar ACRR4;uchar AMRR4;/ 接收代碼寄存器ACRR0 = 0 x11;ACRR1 = 0 x22;ACRR2 = 0 x33;ACRR3 = 0 x44;/ 接收屏蔽寄存器,只接收主機發送的信息AMRR0 = 0 xff;AMRR1 = 0Xff;AMRR2 = 0 xff;AMRR3 = 0 xff;/ 使用do-while語句確保進入復位模式doMODR = 0 x01; / 設置MOD.0=1-進入復位模式,以便設置相應寄存器state = MODR;while( !(state & 0 x01) );/ 對SJA1000部分寄存器進行初始
30、化設置CDR = 0 x88; / CDR為時鐘分頻器,CDR.3=1-時鐘關閉, CDR.7=0-basic CAN, CDR.7=1-Peli CAN BTR0 = 0 x00; / 總線定時寄存器0 ;總線波特率設定BTR1 = 0 x1c; / 總線定時寄存器1 ;總線波特率設定IER = 0 x01; / IER.0=1-接收中斷使能; IER.1=0-關閉發送中斷使能OCR = 0 xaa; / 配置輸出控制寄存器CMR = 0 x04; / 釋放接收緩沖器/ 初始化接收代碼寄存器ACR0 = ACRR0;ACR1 = ACRR1;ACR2 = ACRR2;ACR3 = ACRR3
31、;/ 初始化接收屏蔽寄存器AMR0 = AMRR0;AMR1 = AMRR1;AMR2 = AMRR2;AMR3 = AMRR3;/ 使用do-while語句確保進入自接收模式doMODR = 0 x04; /MOD.2=1-進入自接收模式,MOD.3=0-雙濾波器模式state = MODR;while( !(state & 0 x04) );void rxd_deal(void)if( RXD_flag ) /RXD_flag=0說明無數據可以接收,/RXD_flag=1說明有數據可以接收EA = 0; /關閉CPU中斷RXD_flag = 0; /RXD_flag清零,以便下次查詢Rxd
32、_data = RX_buffer5; /CAN總線要接收的數據,也是要在數碼管3-4位置顯示的數據EA = 1; /重新開啟CPU中斷void txd_deal(void)if( TXD_flag = 1 ) /若TXD_flag=1,要求進行數據的發送處理TXD_flag = 0; /RXD_flag清零,以便下次查詢can_txd(); /發送數據幀 /發送數據幀后,SJA1000將產生接收中斷void can_txd(void)uchar state;uchar TX_buffer N_can ; /N_can=13,TX_buffer數組為待傳送的數據幀/初始化標示碼頭信息TX_bu
33、ffer0 = 0 x88;/.7=0-擴展幀;.6=0-數據幀; .0-.3=100-數據長度為8字節TX_buffer1 = 0 xaa;/本節點地址TX_buffer2 = 0 xbb;TX_buffer3 = 0 xcc;TX_buffer4 = 0 xdd;/初始化發送數據單元TX_buffer5 = Txd_data;/發送的第1個字節數據,也是數碼管要顯示的數據(計數結果) TX_buffer6 = 15; /2TX_buffer7 = 16; /3TX_buffer8 = 17; /4TX_buffer9 = 18; /5TX_buffer10 = 19; /6TX_buffe
34、r11 = 20; /7TX_buffer12 = 21; /8/初始化數據信息 EA = 0; /關中斷/查詢SJA1000是否處于接收狀態,當SJA1000不處于接收狀態時才可繼續執行dostate = SR; /SR為SJA的狀態寄存器while( state & 0 x10 ); /SR.4=1 正在接收,等待/查詢SJA1000是否處于發送完畢狀態dostate = SR;while(!(state & 0 x08); /SR.3=0,發送請求未處理完,等待直到SR.3=1/查詢發送緩沖器狀態dostate = SR;while(!(state & 0 x04); /SR.2=0,發
35、送緩沖器被鎖。等待直到SR.2=1/將待發送的一幀數據信息存入SJA1000的相應寄存器中TBSR0 = TX_buffer0;TBSR1 = TX_buffer1;TBSR2 = TX_buffer2;TBSR3 = TX_buffer3;TBSR4 = TX_buffer4;TBSR5 = TX_buffer5;TBSR6 = TX_buffer6;TBSR7 = TX_buffer7;TBSR8 = TX_buffer8;TBSR9 = TX_buffer9;TBSR10 = TX_buffer10;TBSR11 = TX_buffer11;TBSR12 = TX_buffer12;CM
36、R = 0 x10; /置位自發送接收請求EA = 1; /重新開啟中斷void inter0_key(void) interrupt 2 using 0EA = 0; /關閉中斷Txd_data+; /計數結果增1,即待發送的數據增1If(Txd_data=255) Txd_data=0;TXD_flag = 1; /發送數據標志位置位,即重新發送數據以更新數碼管的顯示數值EA = 1; /重新開啟中斷void inter1_can_rxd( void ) interrupt 0 using 2uchar state,tem;EA = 0; /關CPU中斷IE1 = 0; /由于是中斷INT
37、1是電平觸發方式,所以需要軟件將INT1的中斷請求標志IE0清零state = IR; /IR為SJA1000的中斷寄存器if( state & 0 x01) /若IR.0=1-接收中斷 /接收數據幀RX_buffer0 = RBSR; RX_buffer1 = RBSR1;RX_buffer2 = RBSR2; RX_buffer3 = RBSR3; RX_buffer4 = RBSR4; RX_buffer5 = RBSR5; RX_buffer6 = RBSR6; RX_buffer7 = RBSR7; RX_buffer8 = RBSR8; RX_buffer9 = RBSR9; RX
38、_buffer10 = RBSR10; RX_buffer11 = RBSR11; RX_buffer12 = RBSR12;for(tem = 0;tem 13;tem+) Usart_putchar(RX_buffertem); RXD_flag = 1; /接收標志置位,以便進入接收處理程序 CMR = 0X04; /CMR.2=1-接收完畢,釋放接收緩沖器 state = ALC; /釋放仲裁隨時捕捉寄存器(讀該寄存器即可)state = ECC; /釋放錯誤代碼捕捉寄存器(讀該寄存器即可) IER = 0 x01; / IER.0=1-接收中斷使能EA = 1; /重新開啟CPU中斷
39、5系統調試一個完整的系統一般需要對各個模塊的功能進行相應的硬件和軟件調試,常用的方法是將軟件和硬件結合起來進行調試,在無實際的硬件平臺下可以通過相應的仿真軟件搭建一個虛擬的平臺,然后對硬件和軟件進行綜合調試。5.1 PC機與下位機的通訊調試首先搭建單片機的最小系統,將單片機與PC機通過串口進行連接,用單片機開發編程軟件Keil uVision3編寫單片機程序,編寫完成后在搭建的最小系統中進行硬件調試,利用單片機的串口和串口調試助手軟件,在PC機上打印相應的數據和調試信息,觀察數據和調試信息是否正確,在調試過程中注意在程序的關鍵處加入相應的調試信息,以供查詢程序是否運行正常,如果程序運行不正確,
40、結合硬件,檢查硬件是否連接正確,傳感器的時序否滿足要求等,不斷調試查出發現的問題,并不斷地改進,PC機與下位機通訊成功。5.2 CAN總線調試CAN總線的調試稍微比較難,首先將CAN總線與單片機相連接,參考SJA1000的技術文檔,編寫CAN通訊的程序,編寫完初步的CAN收發程序后,將SJA1000設置為字收發模式,然后將程序下載到單片機內運行,通過串口調試助手,查看程序運行的過程是否正確,以判斷SJA1000是否通訊成功,如果自收發模式通訊不成功,則更具打印信息查看程序出錯的地方,以便進行修改,直到將自收發模式調試成功,調試成功后將自收發模式切換為正常通訊模式,查看是否能夠正常通訊,一般自收
41、發模式能夠成功通訊則正常通訊模式也能夠正常通訊。5.3 單片機最小系統電路的調試為確保電路焊接無誤后,接通5V電源,用數字萬用表直流電壓20V檔測量單片機以下管腳的電壓。40腳(VCC):4.98V 31腳(/EA/VPP):4.98V20腳(VSS):0V 19腳(XTAL1):2.09V18腳(XTAL2):2.27V 9腳(RST/VPD):0.01V通過以上數據可以判斷出單片機正常工作。5.4 綜合調試綜合調試所涉及的功能部分是很多的,但只要每一部分功能的單獨調試是很成功的,在綜合調試時就不會很復雜了。在綜合調試時,我們會遇到了很多的問題,如CAN總線通訊不成功,CAN驅動程序不能有效
42、控制SJA1000,上位機與下位機通訊不正常等,但經過仔細的分析和細心的檢查,并一步步發現了問題的所在,在調試的過程中,調試方法特別的重要,通過不同方式進行調試,最終找到問題的癥結所在,這樣的調試方法讓我們順利地完成了這次設計。5.5 最終實現效果經過綜合調試,本設計的系統基本能達到設計的預期要求,能實現CAN總線的穩定通訊,主控制器的控制界面友好,操作方便、靈活。5.6 測試儀器示波器:YB4324 萬用表:DT9205 電感表:DT6243函數信號發生器:DF1641B16結果分析及心得體會6.1 結果分析本試驗通過擴展CAN總線控制器,在單片機系統中實現了CAN總線的接口,通過CAN總線,實現了兩個模塊之間的數據通訊,在第一個模塊中發送1幀數據,在第二個模塊中收到這幀數據并送至了CPU的內部存儲器30H37H。如果要修改發送數據,只需修改程序中“TXDATA”后8個字節的數據即可。6.2 心得體會通過本次設計對CAN總線的工作原理及其與CPU的接口方式有了一定程度的理解。基于
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 養豬場建設前景及可行性研究報告
- 生活垃圾處理廠的社會效益與可行性研究報告(范文)
- 《雪橇》(教學設計)-2024-2025學年人教版(2012)音樂二年級上冊
- 中小學用電安全安全教育
- 工商儲能項目的資源配置與可行性研究報告(僅供參考)
- 河道護路施工方案
- 二零二五版出租車經營權出租合同書
- 學校與家長的協議書范例二零二五年
- 簡單租賃倉庫合同書范例二零二五年
- 路肩處施工方案
- 貫徹落實清理規范非融資性擔保方案指導意見
- 工程甩項合同協議
- 期中模擬卷(新疆專用)-2024-2025學年八年級英語下學期核心素養素質調研模擬練習試題(考試版)A4
- 2025廣東省深圳市中考數學復習分類匯編《函數綜合題》含答案解析
- 金融工程重點總結
- 漁業資源與漁場學課件藍點馬鮫學習資料
- 2025年度毛絨玩具采購合同
- (T8聯考)2025屆高三部分重點中學3月聯合測評生物試卷(含答案詳解)河北版
- 2024年四川成都農業科技中心招聘筆試真題
- 胸腔積液課件
- 《內河運輸船舶重大事故隱患判定標準》知識培訓
評論
0/150
提交評論