📄 sja_basiccan.lst
字号:
C51 COMPILER V7.06 SJA_BASICCAN 05/11/2006 15:34:24 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE SJA_BASICCAN
OBJECT MODULE PLACED IN SJA_BasicCan.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SJA_BasicCan.c LARGE BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //----------------------------------------------------------------------
2 // FileName : SJA_BasicCan.c
3 // Description: BasicCan 功能实现文件
4 // DateTime : 2005-08-31 Create
5 // Author : jztx-liuweiming
6 // Version : TxCmsPrj Ver1.0
7 //----------------------------------------------------------------------
8 // SJA1000, 16M晶振 BasicCan模式, 2005年8月31日调试完成, 参考周立功源代码
9 // 锦州拓新电力电子公司 刘伟明
10 //----------------------------------------------------------------------
11
12 /************************************************************************
13 **描述: 独立的CAN 控制器SJA1000基本硬件头文件定义(BasicCAN 工作方式)
14 **文件名: SJA_BcanFunc.H
15 **应用语言: KEIL C51
16 **版本 : V1.0
17 **广州周立功单片机发展有限公司 保留所有的版权
18 *************************************************************************/
19
20 #include "SJA_BasicCan.H"
21 #include <string.h>
22
23 /************************************************************************
24 *以下为基本的函数说明(BasicCAN) *
25 ************************************************************************/
26
27 /************************************************************************
28 *函数原型: bit BCan_SelfTest(void) *
29 *参数说明: 无 *
30 *返回值: *
31 * 0 ; 表示SJA1000接口正常 *
32 * 1 ; 表示SJA1000与处理器接口不正常 *
33 * *
34 *说明: 该函数用于检测CAN控制器的接口是否正常 *
35 ************************************************************************/
36 bit BCan_SelfTest(void)
37 {
38 1 Sja_BasicCan = REG_TEST; //访问测试寄存器
39 1 *Sja_BasicCan = 0xAA; //写入测试值
40 1 if ( *Sja_BasicCan == 0xAA )
41 1 {
42 2 return 0; //读测试正确
43 2 }
44 1 else
45 1 {
46 2 return 1;
47 2 }
48 1 }
49
50 /************************************************************************
51 *函数原型: bit BCan_Enter_RstModel(void) *
52 *参数说明: 无 *
53 *返回值: *
54 * 0 ; 表示成功进入复位工作模式 *
55 * 1 ; 表示不能进入复位工作模式 *
C51 COMPILER V7.06 SJA_BASICCAN 05/11/2006 15:34:24 PAGE 2
56 * *
57 *说明: CAN控制器进入复位工作模式 *
58 ************************************************************************/
59 bit BCan_Enter_RstModel(void)
60 {
61 1 unsigned char TempData;
62 1 Sja_BasicCan = REG_CONTROL; //访问地址指向控制寄存器
63 1 TempData = *Sja_BasicCan; //保存原始值
64 1 *Sja_BasicCan = (TempData | 0x01); //置位复位请求
65 1 if ( (*Sja_BasicCan&0x01) == 1 )
66 1 {
67 2 return 0;
68 2 }
69 1 else
70 1 {
71 2 return 1;
72 2 }
73 1 }
74
75 /************************************************************************
76 *函数原型: bit BCan_Quit_RstModel(void) *
77 *参数说明: 无 *
78 *返回值: *
79 * 0 ; 表示成功退出复位工作模式 *
80 * 1 ; 表示不能退出复位工作模式 *
81 * *
82 *说明: CAN控制器退出复位工作模式 *
83 ************************************************************************/
84 bit BCan_Quit_RstModel(void)
85 {
86 1 unsigned char TempData;
87 1 Sja_BasicCan = REG_CONTROL; //访问地址指向控制寄存器
88 1 TempData = *Sja_BasicCan; //保存原始值
89 1 *Sja_BasicCan = (TempData & 0xfe); //清除复位请求
90 1 if ( (*Sja_BasicCan&0x01) == 0 )
91 1 {
92 2 return 0; //退出成功
93 2 }
94 1 else
95 1 {
96 2 return 1; //退出失败
97 2 }
98 1 }
99
100 /************************************************************************
101 ;*函数原型: bit BCan_Set_BandRateE(unsigned char CAN_ByteRate) *
102 ;*参数说明: CAN_ByteRate 波特率(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 *
116 ;*以上设置CAN控制器SJA1000通讯波特率. SJA1000的晶振为必须为16MHZ, *
117 /////////////////////////////////////////////////////////////////////////
C51 COMPILER V7.06 SJA_BASICCAN 05/11/2006 15:34:24 PAGE 3
118 ;*参数说明: CAN_ByteRate 波特率(Kbit/s) BTR0 BTR1 *
119 ;* 0 5 0EFH 0FFH *
120 ;* 1 10 0D7H 0FFH *
121 ;* 2 20 0CBH 0FFH *
122 ;* 3 40 0C5H 0FFH *
123 ;* 4 50 0C9H 0A7H *
124 ;* 5 80 0C2H 0FFH *
125 ;* 6 100 04H 0A7H *
126 ;* 7 200 02H 025H *
127 ;* 8 250 01H 045H *
128 ;* 9 300 01H 025H *
129 ;* 10 500 01H 012H *
130 ;* 11 600 00H 025H *
131 ;* 12 1000 00H 012H *
132 ;* *
133 ;*以上设置CAN控制器SJA1000通讯波特率. SJA1000的晶振为必须为12MHZ, *
134 /////////////////////////////////////////////////////////////////////////
135 ;*返回值: *
136 ;* 0 ;波特率设置成功 *
137 ;* 1 ;波特率设置失败 *
138 ;* *
139 ;*说明:其它晶体的频率的值的波特率,需自己计算 。该子程序只能用于 *
140 ;* 复位模式 *
141 ;************************************************************************/
142
143 unsigned char code SJA_BTR_CODETAB[]={
144 0x53,0x2F, //;(晶振16MHZ) 20KBPS的预设值
145 0x87,0xFF, //;(晶振16MHZ) 40KBPS的预设值
146 0x47,0x2F, //;(晶振16MHZ) 50KBPS的预设值
147 0x83,0xFF, //;(晶振16MHZ) 80KBPS的预设值
148 0x43,0x2f, //;(晶振16MHZ) 100KBPS的预设值
149 0x03,0x1c, //;(晶振16MHZ) 125KBPS的预设值
150 0x81,0xfa, //;(晶振16MHZ) 200KBPS的预设值
151 0x01,0x1c, //;(晶振16MHZ) 250KBPS的预设值
152 0x80,0xfa, //;(晶振16MHZ) 400KBPS的预设值
153 0x00,0x1c, //;(晶振16MHZ) 500KBPS的预设值
154 0x80,0xb6, //;(晶振16MHZ) 666KBPS的预设值
155 0x00,0x16, //;(晶振16MHZ) 800KBPS的预设值
156 0x00,0x14 //;(晶振16MHZ) 1000KBPS的预设值
157 };
158
159 bit BCan_Set_BandRate(unsigned char CAN_ByteRate)
160 {
161 1 //载入标准波特率的的预设值
162 1 unsigned char BTR0_num, BTR1_num;
163 1 BTR0_num = SJA_BTR_CODETAB[CAN_ByteRate*2];
164 1 BTR1_num = SJA_BTR_CODETAB[CAN_ByteRate*2 + 1];
165 1
166 1 Sja_BasicCan = REG_BTR0; //访问地址指向总线定时寄存器0
167 1 *Sja_BasicCan = BTR0_num; //写入参数
168 1 if ( *Sja_BasicCan != BTR0_num ) //校验写入值
169 1 {
170 2 return 1;
171 2 }
172 1
173 1 Sja_BasicCan = REG_BTR1; //访问地址指向总线定时寄存器0
174 1 *Sja_BasicCan = BTR1_num; //写入参数
175 1 if ( *Sja_BasicCan != BTR1_num ) //校验写入值
176 1 {
177 2 return 1;
178 2 }
179 1
C51 COMPILER V7.06 SJA_BASICCAN 05/11/2006 15:34:24 PAGE 4
180 1 return 0;
181 1 }
182
183 /************************************************************************
184 ;*函数原型: bit BCan_Set_Object(unsigned char BCAN_ACR, *
185 unsigned char BCAN_AMR) *
186 *参数说明: *
187 * BCAN_ACR:存放验收代码寄存器(ACR)的参数设置 *
188 * BCAN_AMR:存放接收屏蔽寄存器(AMR)的参数设置 *
189 ;*返回值: *
190 ;* 0 ;通信对象设置成功 *
191 ;* 1 ;通信对象设置失败 *
192 ;* *
193 ;*说明:设置CAN节点的通讯对象,允许接收的报文ID号的高8位(D10--D3) 。 *
194 ;* 允许接收的报文,是由AMR和ACR共同决定的. *
195 ;* 满足以下条件的ID号的报文才可以被接收 *
196 ;*[(ID.10-ID.3)≡(AC.7-AC.0)]||(AM.7-AM.0)≡11111111 *
197 ;* 该子程序只能用于复位模式 *
198 ;************************************************************************/
199 bit BCan_Set_Object(unsigned char BCAN_ACR, unsigned char BCAN_AMR)
200 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -