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