?? commonmain.lst
字號:
207 1 CAN0ADR=IF2CMDRQST;
208 1 CAN0DAT=Msgnum;
209 1 CAN0ADR=IF2DATA1;
210 1 for(i=0;i<4;i+=2)
211 1 {sr[count++]=CAN0DATH;
212 2 sr[count++]=CAN0DATL;
213 2 if(count==2) count++;
214 2 }
215 1 P1_0=0;
216 1 }
217 void CMDinit_Msgobject_rx(uchar Msgnum,uchar Id)
218 {uint temp;
219 1 SFRPAGE=CAN0_PAGE;
220 1 CAN0ADR=IF2CMDMSK;
221 1 CAN0DAT=0X00ba;
222 1 /* IF2 Command Mask Registers =0x00bb
223 1 WR/RD=1,Mask=0,Arb=1,Control=1,ClrIntPnd=1,TxRqst=0,DataA=1,DataB=0,一次發(fā)送8字節(jié)數(shù)據(jù)*/
224 1 CAN0ADR=IF2ARB1;
225 1 CAN0DAT=0X0000;
226 1 temp=Id<<2;
227 1 temp&=0x1fff;
228 1 temp|=0x8000;
229 1 CAN0DAT=temp;
230 1 /*MsgVal=1,Xtd=0,為標(biāo)準(zhǔn)模式,擴展ID無效,Dir=0,為接收*/
231 1 CAN0DAT=0X0484;
232 1 /*IF2 Message Control Registers=0x0484
233 1 NewDat=0,MsgLst=0,IntPnd=0,UMask=0,TxIE=0,RxIE=1,接收中斷使能;RmtEn=0,TxRqst=0
234 1 EoB=1,DLC3-0=0100,即數(shù)據(jù)長度為8*/
235 1 CAN0ADR=IF2CMDRQST;
236 1 CAN0DAT=Msgnum;
237 1 }
238
239 void data_receive(uchar Msgnum)
240 {uchar i;
C51 COMPILER V8.02 COMMONMAIN 03/13/2008 08:08:46 PAGE 5
241 1 P1_0=1;
242 1 SFRPAGE=CAN0_PAGE;
243 1 CAN0ADR=IF2CMDMSK;
244 1 CAN0DAT=0X000F;
245 1 CAN0ADR=IF2CMDRQST;
246 1 CAN0DATL=Msgnum;
247 1 CAN0ADR=IF2DATA1;
248 1 for(i=0;i<LEN;i+=2)
249 1 {sr[count++]=CAN0DATH;
250 2 sr[count++]=CAN0DATL;
251 2 if(count==2) count++;
252 2 }
253 1 sr[2]=count+2;
254 1 P1_0=0;
255 1 }
256
257 void CANO_transist(uchar Msgnum)
258 {uchar i=0;
259 1 P1_3=1;
260 1 SFRPAGE=CAN0_PAGE;
261 1 CAN0ADR=IF1CMDMSK;
262 1 CAN0DAT=0X0087;
263 1 CAN0ADR=IF1DATA1;
264 1 for(i=3;i<rececount-2;i+=2)
265 1 {CAN0DATH=t[i++];
266 2 CAN0DATL=t[i++];
267 2 }
268 1 CAN0ADR=IF1CMDRQST;
269 1 CAN0DATL=Msgnum;
270 1 P1_3=0;
271 1 }
272
273 void ISR_UART0() interrupt 4
274 {
275 1 if (RI0)
276 1 {P1_2=1;
277 2 RI0=0;
278 2 recetimeout=3;
279 2 t[rececount]=SBUF0;
280 2 ACC=t[rececount];
281 2 if(P!=RB80)
282 2 checkerror=1;
283 2 if (rececount==0)
284 2 {if(addr!=t[rececount])
285 3 rececount=0;
286 3 else
287 3 rececount++;
288 3 }
289 2
290 2 else
291 2 {rececount++;
292 3 if(t[2]==rececount)
293 3 receive_flag=1;
294 3 else
295 3 receive_flag=0;
296 3 }
297 2 P1_2=0;
298 2 }
299 1 }
300
301 void ISRname () interrupt 19
302 { uint xdata can0temp16;
C51 COMPILER V8.02 COMMONMAIN 03/13/2008 08:08:46 PAGE 6
303 1 uint xdata page_save;
304 1 uint xdata status;
305 1 page_save=SFRPAGE;
306 1 SFRPAGE=CAN0_PAGE;
307 1 status=CAN0STA;
308 1 if((status&0x10)!=0)
309 1 {CAN0STA&=0xef;
310 2 CAN0ADR=INTPEND1;
311 2 can0temp16=CAN0DAT;
312 2 if((can0temp16&0x0001)!=0)
313 2 {count=0;
314 3 command_receive(0x01);
315 3 if(sr[1]==0x01||sr[1]==0x02||sr[1]==0x03||sr[1]==0x04)
316 3 { sr[2]=count+2;
317 4 CMD0flag=1;
318 4 }
319 3 }
320 2 if((can0temp16&0x0002)!=0)
321 2 {data_receive(0x02);
322 3 CMDflag=1;
323 3 }
324 2 }
325 1 SFRPAGE=page_save;
326 1 }
327
328 void SYSCLK_INIT()
329 {uint i;
330 1 OSCXCN=0X67;
331 1 for(i=0;i<256;i++)
332 1 {while(!(OSCXCN&0X80))
333 2 OSCICN=0X88;
334 2 }
335 1 }
336
337 void PORT_INIT()
338 {SFRPAGE=CONFIG_PAGE;
339 1 XBR0=0X04;
340 1 XBR1=0X00;
341 1 XBR2=0X40;
342 1 XBR3=0X80;
343 1 P0MDOUT=0X01;
344 1 }
345
346 void UART0_INIT()
347 {SFRPAGE=UART0_PAGE;
348 1 SCON0=0XD0;
349 1 PCON=0X00;
350 1 ES0=1;
351 1 SFRPAGE = TMR2_PAGE;
352 1 TMR2CN = 0x00;
353 1 TMR2CF = 0x08;
354 1 }
355
356 void TIMER_INIT()
357 {SFRPAGE = TIMER01_PAGE;
358 1 TMOD=0X01;
359 1 TH0=0X01;
360 1 TL0=0X01;
361 1 TR0=1;
362 1 ET0=1;
363 1 }
364
C51 COMPILER V8.02 COMMONMAIN 03/13/2008 08:08:46 PAGE 7
365 void INIT_GROUPS()
366 {
367 1 SYSCLK_INIT();
368 1 PORT_INIT();
369 1 UART0_INIT();
370 1 TIMER_INIT();
371 1 clear_Msgobjects();
372 1 CMDinit_Msgobject_rx(0x01,0x02);
373 1 init_Msgobjeck_rx(0x02,0x02);
374 1 init_Msgobject_tx(0x10,0x01);
375 1 EIE1=0X20;
376 1 SFRPAGE=CAN0_PAGE;
377 1 CAN0CN=0X41;
378 1 CAN0ADR=BITREG;
379 1 CAN0DAT=0X01;
380 1 CAN0CN=0X02;
381 1 }
382
383 void main()
384 {xdata uint temp16;
385 1 EA=0;
386 1 INIT_GROUPS();
387 1 EA=1;
388 1 while(1)
389 1 {if(CMDflag||CMD0flag)
390 2 { start485send(&sr);}
391 2 if(receive_flag)
392 2 { temp16=CRC(&t,rececount);
393 3 if(temp16==0)
394 3 receive_ok=1;
395 3 else
396 3 receive_ok=0;
397 3 if(receive_ok)
398 3 { if(t[1]==(0x80|sr[1]))
399 4 ASK_repeat(&sr);
400 4 if(t[1]==sr[1])
401 4 CANO_transist(10);
402 4 else
403 4 checkerror=1;
404 4 }
405 3 }
406 2 }
407 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1271 ----
CONSTANT SIZE = 1024 ----
XDATA SIZE = 68 14
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = 4 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -