sja_pelican.lst
来自「参考周立功的basic模式的CAN通讯」· LST 代码 · 共 572 行 · 第 1/3 页
LST
572 行
173 0x43,0x2f, //;(晶振16MHZ) 100KBPS的预设值
C51 COMPILER V7.06 SJA_PELICAN 05/16/2006 10:19:37 PAGE 4
174 0x03,0x1c, //;(晶振16MHZ) 125KBPS的预设值
175 0x81,0xfa, //;(晶振16MHZ) 200KBPS的预设值
176 0x01,0x1c, //;(晶振16MHZ) 250KBPS的预设值
177 0x80,0xfa, //;(晶振16MHZ) 400KBPS的预设值
178 0x00,0x1c, //;(晶振16MHZ) 500KBPS的预设值
179 0x80,0xb6, //;(晶振16MHZ) 666KBPS的预设值
180 0x00,0x16, //;(晶振16MHZ) 800KBPS的预设值
181 0x00,0x14 //;(晶振16MHZ) 1000KBPS的预设值
182 };
183
184 bit PCan_Set_BandRate(unsigned char CAN_ByteRate)
185 {
186 1 //载入标准波特率的的预设值
187 1 unsigned char BTR0_num, BTR1_num;
188 1 BTR0_num = SJA_BTR_CODETAB[CAN_ByteRate*2];
189 1 BTR1_num = SJA_BTR_CODETAB[CAN_ByteRate*2 + 1];
190 1
191 1 Sja_PeliCan = REG_BTR0; //访问地址指向总线定时寄存器0
*** ERROR C202 IN LINE 191 OF SJA_PELICAN.C: 'REG_BTR0': undefined identifier
192 1 *Sja_PeliCan = BTR0_num; //写入参数
193 1 if ( *Sja_PeliCan != BTR0_num ) //校验写入值
194 1 {
195 2 return 1;
196 2 }
197 1
198 1 Sja_PeliCan = REG_BTR1; //访问地址指向总线定时寄存器0
*** ERROR C202 IN LINE 198 OF SJA_PELICAN.C: 'REG_BTR1': undefined identifier
199 1 *Sja_PeliCan = BTR1_num; //写入参数
200 1 if ( *Sja_PeliCan != BTR1_num ) //校验写入值
201 1 {
202 2 return 1;
203 2 }
204 1
205 1 return 0;
206 1 }
207
208 /************************************************************************
209 ;*函数原型: bit PCan_Set_Object(unsigned char PCan_ACR0, *
210 unsigned char PCan_ACR1, *
211 unsigned char PCan_ACR2, *
212 unsigned char PCan_ACR3, *
213 unsigned char PCan_AMR0, *
214 unsigned char PCan_AMR1, *
215 unsigned char PCan_AMR2, *
216 unsigned char PCan_AMR3) *
217 *参数说明: *
218 * PCan_ACR:存放验收代码寄存器(ACR)的参数设置 *
219 * PCan_AMR:存放接收屏蔽寄存器(AMR)的参数设置 *
220 ;*返回值: *
221 ;* 0 ;通信对象设置成功 *
222 ;* 1 ;通信对象设置失败 *
223 ;* *
224 ;*说明:设置CAN节点的通讯对象 *
225 ;* 该子程序只能用于复位模式 *
226 ;************************************************************************/
227 bit PCan_Set_Object(unsigned char PCan_ACR0,
228 unsigned char PCan_ACR1,
229 unsigned char PCan_ACR2,
230 unsigned char PCan_ACR3,
231 unsigned char PCan_AMR0,
232 unsigned char PCan_AMR1,
233 unsigned char PCan_AMR2,
C51 COMPILER V7.06 SJA_PELICAN 05/16/2006 10:19:37 PAGE 5
234 unsigned char PCan_AMR3)
235 {
236 1 Sja_PeliCan = REG_AcceptCode0; //访问地址指向验收代码寄存器(ACR1)
*** ERROR C202 IN LINE 236 OF SJA_PELICAN.C: 'XBYTE': undefined identifier
237 1 *Sja_PeliCan = PCan_ACR0; //写入参数
238 1 if ( *Sja_PeliCan != PCan_ACR0 ) //校验写入值
239 1 {
240 2 return 1;
241 2 }
242 1
243 1 Sja_PeliCan = REG_AcceptCode1; //访问地址指向验收代码寄存器(ACR2)
*** ERROR C202 IN LINE 243 OF SJA_PELICAN.C: 'XBYTE': undefined identifier
244 1 *Sja_PeliCan = PCan_ACR1; //写入参数
245 1 if ( *Sja_PeliCan != PCan_ACR1 ) //校验写入值
246 1 {
247 2 return 1;
248 2 }
249 1
250 1 Sja_PeliCan = REG_AcceptCode2; //访问地址指向验收代码寄存器(ACR3)
*** ERROR C202 IN LINE 250 OF SJA_PELICAN.C: 'XBYTE': undefined identifier
251 1 *Sja_PeliCan = PCan_ACR2; //写入参数
252 1 if ( *Sja_PeliCan != PCan_ACR2 ) //校验写入值
253 1 {
254 2 return 1;
255 2 }
256 1
257 1 Sja_PeliCan = REG_AcceptCode3; //访问地址指向验收代码寄存器(ACR4)
*** ERROR C202 IN LINE 257 OF SJA_PELICAN.C: 'XBYTE': undefined identifier
258 1 *Sja_PeliCan = PCan_ACR3; //写入参数
259 1 if ( *Sja_PeliCan != PCan_ACR3 ) //校验写入值
260 1 {
261 2 return 1;
262 2 }
263 1
264 1 Sja_PeliCan = REG_AcceptMask0; //访问地址指向验收屏蔽寄存器(AMR)
*** ERROR C202 IN LINE 264 OF SJA_PELICAN.C: 'XBYTE': undefined identifier
265 1 *Sja_PeliCan = PCan_AMR0; //写入参数
266 1 if ( *Sja_PeliCan != PCan_AMR0 ) //校验写入值
267 1 {
268 2 return 1;
269 2 }
270 1
271 1 Sja_PeliCan = REG_AcceptMask1; //访问地址指向验收屏蔽寄存器(AMR)
*** ERROR C202 IN LINE 271 OF SJA_PELICAN.C: 'XBYTE': undefined identifier
272 1 *Sja_PeliCan = PCan_AMR1; //写入参数
273 1 if ( *Sja_PeliCan != PCan_AMR1 ) //校验写入值
274 1 {
275 2 return 1;
276 2 }
277 1
278 1 Sja_PeliCan = REG_AcceptMask2; //访问地址指向验收屏蔽寄存器(AMR)
*** ERROR C202 IN LINE 278 OF SJA_PELICAN.C: 'XBYTE': undefined identifier
279 1 *Sja_PeliCan = PCan_AMR2; //写入参数
280 1 if ( *Sja_PeliCan != PCan_AMR2 ) //校验写入值
281 1 {
282 2 return 1;
283 2 }
284 1
285 1 Sja_PeliCan = REG_AcceptMask3; //访问地址指向验收屏蔽寄存器(AMR)
*** ERROR C202 IN LINE 285 OF SJA_PELICAN.C: 'XBYTE': undefined identifier
286 1 *Sja_PeliCan = PCan_AMR3; //写入参数
287 1 if ( *Sja_PeliCan != PCan_AMR3 ) //校验写入值
C51 COMPILER V7.06 SJA_PELICAN 05/16/2006 10:19:37 PAGE 6
288 1 {
289 2 return 1;
290 2 }
291 1
292 1 return 0;
293 1 }
294
295 /************************************************************************
296 ;*函数原型: bit PCan_Set_Outclk (unsigned char PCan_OCR, *
297 unsigned char PCan_CDR); *
298 ;*参数说明: *
299 * PCan_OCR: 存放输出控制寄存器 (OC) 的参数设置 *
300 * PCan_CDR: 存放时钟分频寄存器 (CDR) 的参数设置 *
301 * *
302 ;*返回值: *
303 ;* 0 ;设置成功 *
304 ;* 1 ;设置失败 *
305 ;* *
306 ;*说明:设置SJA1000的输出模式和时钟分频 。该子程序只能用于复位模式 *
307 ;************************************************************************/
308 bit PCan_Set_OCR (unsigned char PCan_OCR)
309 {
310 1 Sja_PeliCan = REG_OCR; //访问地址指向输出控制寄存器
*** ERROR C202 IN LINE 310 OF SJA_PELICAN.C: 'REG_OCR': undefined identifier
311 1 *Sja_PeliCan = PCan_OCR; //写入参数
312 1 if ( *Sja_PeliCan != PCan_OCR ) //校验写入值
313 1 {
314 2 return 1;
315 2 }
316 1 return 0;
317 1 }
318
319 /************************************************************************
320 *函数原型: bit PCan_Data_Send(unsigned char *SendDataBuf) *
321 *参数说明: 特定帧各式的数据 *
322 *返回值: *
323 * 0 ; 表示将数据成功的送至发送缓冲区 *
324 * 1 ; 表示上一次的数据正在发送, *
325 * ; 表示发送缓冲区被锁定,不能写入数据 *
326 * ; 表示写入数据错误 *
327 *说明: 将待发送特定帧各式的数据,送入SJA1000发送缓存区中,然后启动 *
328 * SJA1000发送。 *
329 * 特定帧格式为:开始的两个字节存放 '描述符' ,以后的为数据 *
330 * 描述符包括11位长的ID(标志符)\1位RTR\4位描述数据长度的DLC共16位 *
331 * *
332 *注:本函数的返回值仅指示,将数据正确写入SJA1000发送缓存区中与否。 *
333 * 不指示SJA1000将该数据正确发送到CAN总线上完毕与否 *
334 ************************************************************************/
335 bit PCan_Data_Send(unsigned char *SendDataBuf)
336 {
337 1 unsigned char TempCount;
338 1 Sja_PeliCan = REG_STATUS; //访问地址指向状态寄存器
*** ERROR C202 IN LINE 338 OF SJA_PELICAN.C: 'REG_STATUS': undefined identifier
339 1 if ( (*Sja_PeliCan&0x08) == 0 ) //判断上次发送是否完成
340 1 {
341 2 return 1;
342 2 }
343 1
344 1 if( (*Sja_PeliCan&0x04) == 0 ) //判断发送缓冲区是否锁定
345 1 {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?