?? sja_bcanfunc.lst
字號:
C51 COMPILER V7.01 SJA_BCANFUNC 04/05/2003 10:31:32 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE SJA_BCANFUNC
OBJECT MODULE PLACED IN SJA_BCANFUNC.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE SJA_BCANFUNC.c REGFILE(.\testcan.ORC) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*
2 **********************************************************************************************************
-**********
3 **描述: 獨立的CAN 控制器SJA1000基本硬件頭文件定義(BasicCAN 工作方式)
4 **文件名: SJA_BcanFunc.H
5 **應(yīng)用語言: KEIL C51
6 **版本 : V1.0
7 **廣州周立功單片機發(fā)展有限公司 保留所有的版權(quán)
8 **********************************************************************************************************
-**********
9 */
10
11 /*$page*/
12
13
14 #include "SJA_BCANCONF.H"
15 #include <string.h>
16
17
18
19
20 /************************************************************************
21 *以下為基本的函數(shù)說明(BasicCAN) *
22 ************************************************************************/
23
24 /************************************************************************
25 *函數(shù)原型: bit BCAN_CREATE_COMMUNATION(void) *
26 *參數(shù)說明: 無 *
27 *返回值: *
28 * 0 ; 表示SJA1000接口正常 *
29 * 1 ; 表示SJA1000與處理器接口不正常 *
30 * *
31 *說明:該函數(shù)用于檢測CAN控制器的接口是否正常 *
32 ************************************************************************/
33 bit BCAN_CREATE_COMMUNATION(void)
34 {
35 1 SJA_BCANAdr=REG_TEST; //訪問測試寄存器
36 1
37 1 *SJA_BCANAdr =0xaa; //寫入測試值
38 1 if(*SJA_BCANAdr == 0xaa)
39 1 {
40 2 return 0; //讀測試正確
41 2 }
42 1 else
43 1 {
44 2 return 1;
45 2 }
46 1 }
47
48 /************************************************************************
49 *函數(shù)原型: bit BCAN_ENTER_RETMODEL(void) *
50 *參數(shù)說明: 無 *
51 *返回值: *
52 * 0 ; 表示成功進入復(fù)位工作模式 *
53 * 1 ; 表示不能進入復(fù)位工作模式 *
C51 COMPILER V7.01 SJA_BCANFUNC 04/05/2003 10:31:32 PAGE 2
54 * *
55 *說明: CAN控制器進入復(fù)位工作模式 *
56 ************************************************************************/
57 bit BCAN_ENTER_RETMODEL(void)
58 {
59 1 unsigned char TempData;
60 1 SJA_BCANAdr = REG_CONTROL; //訪問地址指向控制寄存器
61 1 TempData= *SJA_BCANAdr; //保存原始值
62 1 *SJA_BCANAdr=(TempData|0x01); //置位復(fù)位請求
63 1 if((*SJA_BCANAdr&0x01) == 1)
64 1 {
65 2 return 0;
66 2 }
67 1 else
68 1 {
69 2 return 1;
70 2 }
71 1
72 1 }
73
74 /************************************************************************
75 *函數(shù)原型: bit BCAN_QUIT_RETMODEL(void) *
76 *參數(shù)說明: 無 *
77 *返回值: *
78 * 0 ; 表示成功退出復(fù)位工作模式 *
79 * 1 ; 表示不能退出復(fù)位工作模式 *
80 * *
81 *說明: CAN控制器退出復(fù)位工作模式 *
82 ************************************************************************/
83 bit BCAN_QUIT_RETMODEL(void)
84 {
85 1 unsigned char TempData;
86 1 SJA_BCANAdr = REG_CONTROL; //訪問地址指向控制寄存器
87 1 TempData = *SJA_BCANAdr; //保存原始值
88 1 *SJA_BCANAdr=(TempData&0xfe); //清除復(fù)位請求
89 1 if((*SJA_BCANAdr&0x01) == 0)
90 1 {
91 2 return 0; //
92 2 }
93 1 else
94 1 {
95 2 return 1; //退出成功
96 2 }
97 1
98 1 }
99
100 /************************************************************************
101 ;*函數(shù)原型: bit BCAN_SET_BANDRATE(unsigned char CAN_ByteRate) *
102 ;*參數(shù)說明: R7 波特率(Kbit/s) BTR0 BTR1 *
103 ;* 0 20 053H, 02FH *
104 ;* 1 40 087H, 0FFH *
105 ;* 2 50 047H, 02FH *
106 ;* 3 80 083H, 0FFH *
107 ;* 4 100 043H, 02fH *
108 ;* 5 125 03H, 01cH *
109 ;* 6 200 081H, 0faH *
110 ;* 7 250 01H, 01cH *
111 ;* 8 400 080H, 0faH *
112 ;* 9 500 00H, 01cH *
113 ;* 10 666 080H, 0b6H *
114 ;* 11 800 00H, 016H *
115 ;* 12 1000 00H, 014H *
C51 COMPILER V7.01 SJA_BCANFUNC 04/05/2003 10:31:32 PAGE 3
116 ;*返回值: *
117 ;* 0 ;波特率設(shè)置成功 *
118 ;* 1 ;波特率設(shè)置失敗 *
119 ;* *
120 ;*說明:設(shè)置CAN控制器SJA1000通訊波特率.SJA1000的晶振為必須為16MHZ, *
121 ;* 其它晶體的頻率的值的波特率,需自己計算 。該子程序只能用于 *
122 ;* 復(fù)位模式 *
123 ;************************************************************************/
124 unsigned char code SJA_BTR_CODETAB[]={
125 0x53,0x2F, // ;20KBPS的預(yù)設(shè)值
126 0x87,0xFF, //;40KBPS的預(yù)設(shè)值
127 0x47,0x2F, //;50KBPS的預(yù)設(shè)值
128 0x83,0xFF, //;80KBPS的預(yù)設(shè)值
129 0x43,0x2f, //;100KBPS的預(yù)設(shè)值
130 0x03,0x1c, //;125KBPS的預(yù)設(shè)值
131 0x81,0xfa, //;200KBPS的預(yù)設(shè)值
132 0x01,0x1c, //;250KBPS的預(yù)設(shè)值
133 0x80,0xfa, //;400KBPS的預(yù)設(shè)值
134 0x00,0x1c, //;500KBPS的預(yù)設(shè)值
135 0x80,0xb6, //;666KBPS的預(yù)設(shè)值
136 0x00,0x16, //;800KBPS的預(yù)設(shè)值
137 0x00,0x14 //;1000KBPS的預(yù)設(shè)值
138
139 };
140
141 bit BCAN_SET_BANDRATE(unsigned char CAN_ByteRate)
142 {
143 1 unsigned char BTR0_num,BTR1_num;
144 1 BTR0_num = SJA_BTR_CODETAB[CAN_ByteRate*2];
145 1 BTR1_num = SJA_BTR_CODETAB[CAN_ByteRate*2+1];
146 1 //將波特率的的預(yù)設(shè)值裝入sja1000的總線定時器
147 1 SJA_BCANAdr=REG_BTR0; //訪問地址指向總線定時寄存器0
148 1 *SJA_BCANAdr=BTR0_num; //寫入?yún)?shù)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -