📄 can232.lst
字号:
183 1 }
184 void COMM1_ISR (void) interrupt 4
185 {
186 1 unsigned char i;
187 1 unsigned char count;
188 1 if(RI0==0x01)
189 1 {RI0=0;
190 2 CommBuffer[CommP]=SBUF0;
191 2 CommP++;
192 2 if(CommBuffer[0]!=0xaa)
193 2 {CommP=0;
194 3 return;
195 3 }
196 2 if(CommP>2)
197 2 {count=(CommBuffer[2]&0x0f);
198 3 if((CommBuffer[2]&0x80)==0)
199 3 count+=3;
200 3 else
201 3 count+=5;
202 3 if(CommBuffer[1]!=0x55)
203 3 {CommP=0;
204 4 return;
205 4 }
206 3 }
207 2 else
208 2 return;
209 2 if(CommP==(count+2))
210 2 {
211 3 CommP=0;
212 3 if((CommRCount+count)<1024)
213 3 {for(i=0;i<count;i++)
214 4 {CommRBuffer[CommRP++]=CommBuffer[2+i];
215 5 if(CommRP==1024)
216 5 CommRP=0;
217 5 }
218 4 CommRCount+=count;
219 4 /* SBUF0=0xaa;
220 4 while(TI0==0);
221 4 TI0=0;
222 4 SBUF0=0x55;
223 4 while(TI0==0);
224 4 TI0=0;*/
225 4 }
226 3 else
227 3 {
228 4 i=100;
229 4 }
230 3 }
231 2 }
232 1
233 1 }
234 void INTE0_ISR (void) interrupt 0
235 {
236 1 unsigned char tt1;
237 1 unsigned char * xdata tt;
238 1 int i,count;
239 1 tt1=InterruptReg;
240 1 if((tt1&0x04)!=0)
241 1 {
C51 COMPILER V7.50 CAN232 09/12/2006 21:12:06 PAGE 5
242 2 tt1=StatusReg;
243 2 if((tt1&0x80)!=0)
244 2 ModeControlReg=AFM_Bit;
245 2 return;
246 2 }
247 1
248 1 if((tt1&0x08)!=0)
249 1 {CommandReg=0x0c;
250 2 return;
251 2 }
252 1 if((tt1&0x01)!=0)
253 1 {tt=&RxFramInFo;
254 2 count=(*tt&0x0f);
255 2 if((*tt&0x80)==0)
256 2 count+=3;
257 2 else
258 2 count+=5;
259 2 for(i=0;i<count;i++)
260 2 {GetBuffer[i]=*tt;
261 3 tt++;
262 3 }
263 2 if((Can0RCount+count)<1024)
264 2 {Can0RCount+=count;
265 3 for(i=0;i<count;i++)
266 3 {Can0RBuffer[Can0RP++]=GetBuffer[i];
267 4 if(Can0RP==1024)Can0RP=0;
268 4 }
269 3 }
270 2 CommandReg=RRB_Bit;
271 2 }
272 1 tt1=ArbLostCapReg;
273 1 tt1=ErrCodeCapReg;
274 1 return;
275 1 }
276 void Write232()
277 {
278 1 int i,count;
279 1 count=(Can0RBuffer[Can0TP]&0x0f);
280 1 if((Can0RBuffer[Can0TP]&0x80)==0)
281 1 count+=3;
282 1 else
283 1 count+=5;
284 1 SBUF0=0xaa;
285 1 while(TI0==0);
286 1 TI0=0;
287 1 SBUF0=0x55;
288 1 while(TI0==0);
289 1 TI0=0;
290 1 for(i=0;i<count;i++)
291 1 {SBUF0=Can0RBuffer[Can0TP++];
292 2 if(Can0TP==1024)Can0TP=0;
293 2 while(TI0==0);
294 2 TI0=0;
295 2 }
296 1 Can0RCount-=count;
297 1 }
298
299 /*void Write232a()
300 {
301 unsigned int i,count;
302 count=(CommRBuffer[CommTP]&0x0f);
303 if((CommRBuffer[CommTP]&0x80)==0)
C51 COMPILER V7.50 CAN232 09/12/2006 21:12:06 PAGE 6
304 count+=3;
305 else
306 count+=5;
307 SBUF0=0xaa;
308 while(TI0==0);
309 TI0=0;
310 SBUF0=0x55;
311 while(TI0==0);
312 TI0=0;
313 for(i=0;i<count;i++)
314 {SBUF0=CommRBuffer[CommTP++];
315 if(CommTP==100)CommTP=0;
316 while(TI0==0);
317 TI0=0;
318 }
319 CommRCount-=count;
320 }
321 */
322 main()
323 {
324 1 // unsigned char tt1;
325 1
326 1
327 1 SYSCLK_Init();
328 1 config();
329 1 UART0_Init();
330 1 Can_Init();
331 1 EA=1;
332 1 EX0=1;
333 1 IP=0x01;
334 1 CommP=0;
335 1 CommRP=0;
336 1 CommRCount=0;
337 1 CommTP=0;
338 1 Can0RP=0;
339 1 Can0RCount=0;
340 1 Can0TP=0;
341 1
342 1
343 1
344 1
345 1 while(1)
346 1 {if(CommRP!=CommTP)
347 2 //Write232a();
348 2 WriteCan();
349 2 if(Can0RP!=Can0TP)
350 2 Write232();
351 2 // tt1=StatusReg;
352 2 }
353 1 }
354
355
356
357
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1516 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 2054 ----
PDATA SIZE = ---- ----
DATA SIZE = 74 ----
C51 COMPILER V7.50 CAN232 09/12/2006 21:12:06 PAGE 7
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -