獨立CAN控制器SJA1000的C語言編程_第1頁
獨立CAN控制器SJA1000的C語言編程_第2頁
獨立CAN控制器SJA1000的C語言編程_第3頁
獨立CAN控制器SJA1000的C語言編程_第4頁
獨立CAN控制器SJA1000的C語言編程_第5頁
已閱讀5頁,還剩10頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、CANCAN現場總線系統現場總線系統的設計與應用的設計與應用SJA1000獨立獨立CAN控制器編程控制器編程SJA1000獨立獨立CAN控制器控制器C語言編程語言編程 v基于基于51單片機的單片機的SJA1000獨立獨立CAN控制器的軟件控制器的軟件設計主要包括三部分:設計主要包括三部分:SJA1000的初始化,報文的初始化,報文的發送和接收。熟悉這三部分的軟件設計,是使的發送和接收。熟悉這三部分的軟件設計,是使用用SJA1000組建組建CAN通訊網絡的基礎。通訊網絡的基礎。v要想將要想將SJA1000用于比較復雜的用于比較復雜的CAN通訊中,除通訊中,除了考慮通訊距離,節點數對波特率的影響外

2、,還了考慮通訊距離,節點數對波特率的影響外,還需要在程序中對需要在程序中對CAN總線的各種錯誤,總線關閉總線的各種錯誤,總線關閉等情況進行處理,還需要支持自動檢測。等情況進行處理,還需要支持自動檢測。SJA1000地址定義文件地址定義文件sj1000reg.h編寫編寫 vSJA1000獨立獨立CAN控制器內部寄存器的地址是控制器內部寄存器的地址是8位的,其地址位的,其地址/數據復用總線管腳(數據復用總線管腳(AD0AD7)只與只與51單片機的單片機的P0口相連。口相連。v而而51單片機的地址單片機的地址/數據復用總線由數據復用總線由P0和和P2口組口組成,在使用成,在使用51單片機的地址單片機

3、的地址/數據復用總線對片外數據復用總線對片外數據存儲器進行操作時,使用數據存儲器進行操作時,使用MOVX指令對其進指令對其進行存取操作,操作數的地址存放于行存取操作,操作數的地址存放于DPTR寄存器寄存器(16位地址)或位地址)或R0、R1寄存器中(寄存器中(8位地址)。位地址)。 8051 特有的內存型態特有的內存型態 vcode 以以 MOVC A+DPTR 讀取的程序內存讀取的程序內存vdata 可以直接存取的內部數據存儲器可以直接存取的內部數據存儲器vidata 以以 MOV Rn 存取的內部數據存儲器存取的內部數據存儲器vbdata 可以位尋址(可以位尋址(Bit Addressab

4、le)的內部)的內部存儲器存儲器vxdata 以以 MOVX DPTR 存取的外部數據存儲存取的外部數據存儲器器vpdata 以以 MOVX Rn 存取的外部數據存儲器存取的外部數據存儲器ABSACC.H 提供的宏(提供的宏(Macro)定義)定義 v#define CBYTE (unsigned char volatile code *) 0)v#define DBYTE (unsigned char volatile data *) 0)v#define PBYTE (unsigned char volatile pdata *) 0)v#define XBYTE (unsigned ch

5、ar volatile xdata *) 0)v#define CWORD (unsigned int volatile code *) 0)v#define DWORD (unsigned int volatile data *) 0)v#define PWORD (unsigned int volatile pdata *) 0)v#define XWORD (unsigned int volatile xdata *) 0)SJA1000使用使用8位地址位地址 #ifndef _SJA1000REG_H_#define _SJA1000REG_H_#define PBYTE (unsig

6、ned char volatile pdata *) 0)#defineMOD PBYTE0 x00/模式寄存器#define CMR PBYTE0 x01/命令寄存器#defineCDR PBYTE0 x1f /時鐘分頻寄存器#endifSJA1000使用使用16位地址位地址 #ifndef _SJA1000REG_H_#define _SJA1000REG_H_#define XBYTE (unsigned char volatile xdata *) 0)#define MOD XBYTE0 x?00 /模式寄存器#define CMR XBYTE0 x?01 /命令寄存器#define

7、 CDR XBYTE0 x?1f /時鐘分頻寄存器#endif獨立獨立CAN控制器的初始化控制器的初始化 vSJA1000的初始化必須在復位狀態下進行,初始的初始化必須在復位狀態下進行,初始化的主要工作有:化的主要工作有:再次設置進入復位狀態(模式寄存器再次設置進入復位狀態(模式寄存器MOD設置)設置)CAN模式的選擇(時鐘分頻寄存器模式的選擇(時鐘分頻寄存器CDR的設置)的設置)輸出方式的選擇(輸出控制寄存器輸出方式的選擇(輸出控制寄存器OCR的設置)的設置)波特率的設置(總線定時器波特率的設置(總線定時器BTR0和和BTR1的設置)的設置)驗收代碼寄存器(驗收代碼寄存器(ACR)設置和驗收

8、屏蔽寄存器)設置和驗收屏蔽寄存器(ARM)設置)設置清零錯誤寄存器清零錯誤寄存器中斷使能寄存器(中斷使能寄存器(IER)設置)設置進入工作模式進入工作模式SJA1000初始化程序初始化程序void sja1000_init( )MOD=0 x09; /單方向驗收濾波器正常模式, /復位狀態CDR=0 xc8; /時鐘分頻寄存器PeliCAN模 /式,棄用RX1和TX1,關閉時鐘輸出OCR=0 x1a; /輸出控制寄存器BTR0=0 x?; /總線定時寄存器0 波特率BTR1=0 x?; /總線定時寄存器1ACR0=0 x?; /驗收代碼寄存器0ACR1=0 x?; /驗收代碼寄存器1ACR2=

9、0 x?; /驗收代碼寄存器2ACR3=0 x?; /驗收代碼寄存器3SJA1000初始化程序初始化程序AMR0=0 x?; /驗收屏蔽寄存器0AMR1=0 x?; /驗收屏蔽寄存器1AMR2=0 x?; /驗收屏蔽寄存器2AMR3=0 x?; /驗收屏蔽寄存器3ECC=0 x00;/清0錯誤代碼捕捉寄存器RXERR=0 x00;/清0接收錯誤計數器TXERR=0 x00;/請0發送錯誤計數器IER=0 x01:/接收中斷使能MOD=0 x80;/單方向驗收濾波器正常模式,/進入工作狀態SJA1000發送程序發送程序 v非中斷發送的過程為:非中斷發送的過程為:檢測發送緩沖器狀態檢測發送緩沖器狀

10、態把要發送的數據寫入發送緩沖區把要發送的數據寫入發送緩沖區判斷是否處于接收狀態判斷是否處于接收狀態判斷上一個報文是否發送完畢,請求發送。判斷上一個報文是否發送完畢,請求發送。SJA1000非中斷發送程序(帶參數)非中斷發送程序(帶參數) void send(sbit rtr, unsigned int ide, unsigned char len, unsigned char data8)/rtr:RTR位,位,ide:識別碼:識別碼 /len:數據長度,:數據長度,data8:存放數據的數組:存放數據的數組unsigned char i;unsigned char *p;while(SR&0 x04)=0 x00); /等待發送緩沖區為空等待發送緩沖區為空p=&ide;ide=ide3;/識別碼在發送緩沖區左對齊識別碼在發送緩沖區左對齊TXEFF4=*p;P+;TXEFF3=*p;P+;TXEFF2=*p;P+;TXEFF1=*p;P+;SJA1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論