📄 sja1000_peli.lst
字号:
210 1 {
211 2 flag = SJAEnterRstMode();
212 2
213 2 }
214 1
215 1
216 1 flag = SJAClkOut(SJA_OCR,SJA_CDR); //时钟分频、输出控制设置
217 1 while(flag)
218 1 {
219 2 flag = SJAClkOut(SJA_OCR,SJA_CDR);
220 2
221 2 }
222 1
223 1 /////////////////////////////////////////////////////
224 1
225 1 SJARegWrite(0,SJARegRead(0)|0x0c); //设置为单滤波器,并使用自测试模式
226 1
227 1 flag = SJASetACR(SJA_ACR0,SJA_ACR1,SJA_ACR2,SJA_ACR3); //设置验收代码寄存器
228 1 while(flag)
229 1 {
230 2 flag = SJASetACR(SJA_ACR0,SJA_ACR1,SJA_ACR2,SJA_ACR3);
231 2
232 2 }
233 1
234 1
235 1 flag = SJASetAMR(SJA_AMR0,SJA_AMR1,SJA_AMR2,SJA_AMR3); //设置屏蔽寄存器
236 1 while(flag)
237 1 {
238 2 flag = SJASetAMR(SJA_AMR0,SJA_AMR1,SJA_AMR2,SJA_AMR3);
239 2
240 2 }
241 1
C51 COMPILER V7.06 SJA1000_PELI 03/08/2008 11:03:48 PAGE 5
242 1 /////////////////////////////////////////////////////
243 1
244 1
245 1
246 1 flag = SJASetBaudRate(SJA_BTR0,SJA_BTR1); //波特率设置
247 1 while(flag)
248 1 {
249 2 flag = SJASetBaudRate(SJA_BTR0,SJA_BTR1);
250 2
251 2 }
252 1
253 1
254 1
255 1 flag = SJAEnterWorkMode(); //进入工作模式
256 1 while(flag)
257 1 {
258 2 flag = SJAEnterWorkMode();
259 2
260 2 }
261 1
262 1
263 1 flag = SJASetInterrupt(SJA_INT); //中断使能
264 1 while(flag)
265 1 {
266 2 flag = SJASetInterrupt(SJA_INT);
267 2 }
268 1 }
269
270 //发送函数
271 bit SJASendData(unsigned char *SendDataBuf)
272 {
273 1 bit flag = 1;
274 1 unsigned char len,i;
275 1
276 1 if ((SJARegRead(2)&0x10) ==0) //是否为接收状态?不是则下一步
277 1 {
278 2 if ((SJARegRead(2)&0x04)!=0) //发送队列是否为空?是则下一步
279 2 {
280 3 if ((SendDataBuf[0]&0x80 )==0) //为0,标准帧
281 3 {
282 4 if ((SendDataBuf[0]&0x40)==0) //为0,数据帧
283 4 {
284 5 len = SendDataBuf[0]&0x0f;
285 5 if (len>=8)
286 5 {
287 6 len = 8;
288 6 }
289 5 len+=3;
290 5 }
291 4 else
292 4 {
293 5 len = 3;
294 5 }
295 4
296 4 for (i=0; i<len; i++)
297 4 {
298 5 SJARegWrite(16+i,SendDataBuf[i]);
299 5 }
300 4 flag = 0;
301 4
302 4 }
303 3
C51 COMPILER V7.06 SJA1000_PELI 03/08/2008 11:03:48 PAGE 6
304 3 if ((SendDataBuf[0]&0x80)!=0) //为1,扩展帧
305 3 {
306 4 if ((SendDataBuf[0]&0x40)==0) //为0,数据帧
307 4 {
308 5 len = SendDataBuf[0]&0x0f;
309 5 if (len>=8)
310 5 {
311 6 len = 8;
312 6 }
313 5 len+=5;
314 5 }
315 4 else
316 4 {
317 5 len = 5;
318 5 }
319 4
320 4 for (i=0; i<len; i++)
321 4 {
322 5 SJARegWrite(16+i,SendDataBuf[i]);
323 5 }
324 4 flag = 0;
325 4 }
326 3 }
327 2 }
328 1 return flag;
329 1 }
330
331 //接收函数
332 bit SJAReceData(unsigned char *ReceDataBuf)
333 {
334 1 bit flag=1;
335 1 unsigned char len,i;
336 1
337 1 if ((SJARegRead(2)&0x01)!=0) //接收有可用信息
338 1 {
339 2 if ((ReceDataBuf[0]&0x80)==0) //为0,标准帧
340 2 {
341 3 if((ReceDataBuf[0]&0x40)==0) //为0,数据帧
342 3 {
343 4
344 4 len = ReceDataBuf[0]&0x0f;
345 4 if (len>=8)
346 4 {
347 5 len = 8;
348 5 }
349 4 len+=3;
350 4 }
351 3 else
352 3 {
353 4 len = 3;
354 4 }
355 3
356 3 for (i=0; i<len; i++)
357 3 {
358 4 ReceDataBuf[i] = SJARegRead(16+i);
359 4 }
360 3 flag = 0;
361 3
362 3 }
363 2
364 2
365 2 if ((ReceDataBuf[0]&0x80)!=0) //为1,扩展帧
C51 COMPILER V7.06 SJA1000_PELI 03/08/2008 11:03:48 PAGE 7
366 2 {
367 3 if((ReceDataBuf[0]&0x40)==0) //为0,数据帧
368 3 {
369 4
370 4 len = ReceDataBuf[0]&0x0f;
371 4 if (len>=8)
372 4 {
373 5 len = 8;
374 5 }
375 4 len+=5;
376 4 }
377 3 else
378 3 {
379 4 len = 5;
380 4 }
381 3 for (i=0; i<len; i++)
382 3 {
383 4 ReceDataBuf[i] = SJARegRead(16+i);
384 4 }
385 3 flag = 0;
386 3
387 3 }
388 2 }
389 1 return flag;
390 1
391 1 }
392
393 //中断服务程序
394 void SJAInterruput(void) interrupt 0 using 1
395 {
396 1 unsigned char tempData;
397 1
398 1 tempData = SJARegRead(3);
399 1
400 1 if ((tempData&0x02)!=0)
401 1 {
402 2 g_TiFlag = 1;
403 2
404 2 }
405 1
406 1 if ((tempData&0x01)!=0)
407 1 {
408 2 g_RiFlag = 1;
409 2 }
410 1
411 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 952 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 14
IDATA SIZE = ---- ----
BIT SIZE = 2 11
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -