📄 comcjj.lst
字号:
240 1 if(!com_r_num)//桢号是0x00时
241 1 {
242 2 inf_r_total++;
243 2 w_b.w = inf_r_len;
244 2 *pinf_r_buff_wr = w_b.b.l;
245 2 pinf_r_buff_wr++;
246 2 *pinf_r_buff_wr = w_b.b.h; pinf_r_buff_wr++;
247 2 inf_r_len = 0x0000;
248 2 }
249 1 for(i = 0x00; i < tmp_len; i++)
250 1 {
251 2 *pinf_r_buff_wr = data_r_tmp_buff[i];
252 2 pinf_r_buff_wr++;
253 2 }
254 1 inf_r_buff_empty = FALSE;
255 1 }
256
257
258 void prc_com_r_ok(void)
259 {
260 1 byte tmp_len = NULL_BYTE;
261 1 tmp_len = com_len;
262 1 prc_com_r_data(tmp_len);
263 1 }
264
265 /*当com_r_buff_empty = TRUE,即fifi为空时,在主程序中就不会调用com_r_prc解包函数*/
266 void chk_empty(void)
267 {
268 1 if(pcom_r_buff_prc == com_r_buff + COM_R_BUFF_LEN)
269 1 {
270 2 if(pcom_r_buff_wr == com_r_buff)
271 2 com_r_buff_empty = TRUE;//prc指针读到fifo末尾时,写指针在fifo开头位置,则fifo为空
272 2 pcom_r_buff_prc = com_r_buff;//把prc指针移到fifo开头位置
273 2 }
274 1 else
275 1 {
276 2 pcom_r_buff_prc++;
277 2 if(pcom_r_buff_wr == pcom_r_buff_prc)
278 2 com_r_buff_empty = TRUE;//若prc指针在fifo中间,当prc指针加1后与写指针相等,则fifo也为空
279 2 }
280 1 }
281
282 void com_r_prc(void)//解包
283 {
284 1 byte tmp;
285 1 tmp = *pcom_r_buff_prc;//当前读指针prc
286 1 switch(st_com_r)
287 1 {
288 2 case ST_COM_R_IDLE://0xff
289 2 if(tmp == COM_R_HEAD)
290 2 st_com_r = ST_COM_R_DADR;
291 2
292 2 chk_empty();
293 2 pcom_r_buff_rd = pcom_r_buff_prc;//把读指针rd移到当前读指针prc的位置
C51 COMPILER V6.12 COMCJJ 01/24/2006 10:33:03 PAGE 6
294 2 break;
295 2 case ST_COM_R_DADR://目标地址
296 2 switch(tmp)
297 2 {
298 3 case MAC_ESU://0x03
*** ERROR C202 IN LINE 298 OF COMCJJ.C: 'MAC_ESU': undefined identifier
299 3 st_com_r = ST_COM_R_SADR;
300 3 chk_empty();
301 3 break;
302 3 case COM_ALL_ADR://0xfd
303 3 st_com_r = ST_COM_R_SADR;
304 3 chk_empty();
305 3 break;
306 3 default:
307 3 st_com_r = ST_COM_R_IDLE;
308 3 chk_empty();
309 3 pcom_r_buff_rd = pcom_r_buff_prc;
310 3 break;
311 3 }
312 2 break;
313 2 case ST_COM_R_SADR://源地址
314 2 com_r_sadr = tmp;
315 2 st_com_r = ST_COM_R_CMD;
316 2 chk_empty();
317 2 break;
318 2 case ST_COM_R_CMD://命令字节
319 2 com_r_cmd = tmp;
320 2 st_com_r = ST_COM_R_NUM;
321 2 chk_empty();
322 2 break;
323 2 case ST_COM_R_NUM://桢号
324 2 com_r_num = tmp;
325 2 st_com_r = ST_COM_R_LEN;
326 2 chk_empty();
327 2 break;
328 2 case ST_COM_R_LEN://字长
329 2 com_len = tmp;
330 2 if(tmp < 0x02)
331 2 {
332 3 st_com_r = ST_COM_R_IDLE;
333 3 chk_empty();
334 3 pcom_r_buff_rd = pcom_r_buff_prc;
335 3 }
336 2 else if(tmp == 0x02)
337 2 {
338 3 st_com_r = ST_COM_R_PERR;
339 3 chk_empty();
340 3 }
341 2 else
342 2 {
343 3 st_com_r = ST_COM_R_DATA;
344 3 com_data_num = NULL_BYTE;
345 3 chk_empty();
346 3 }
347 2 break;
348 2 case ST_COM_R_DATA://参数
349 2 data_r_tmp_buff[com_data_num] = tmp;
*** ERROR C213 IN LINE 349 OF COMCJJ.C: left side of asn-op not an lvalue
350 2 com_data_num++;
351 2 if(com_data_num + 0x02 >= com_len)
352 2 st_com_r = ST_COM_R_PERR;
353 2 chk_empty();
C51 COMPILER V6.12 COMCJJ 01/24/2006 10:33:03 PAGE 7
354 2 break;
355 2 case ST_COM_R_PERR:
356 2 com_r_perr = tmp;
357 2 st_com_r = ST_COM_R_OK;
358 2 chk_empty();
359 2 break;
360 2 case ST_COM_R_OK://0XFE
361 2 if(tmp == COM_R_END)
362 2 {
363 3 prc_com_r_ok();
364 3
365 3 chk_empty();
366 3 pcom_r_buff_rd = pcom_r_buff_prc;//如果是0xfe,则把读指针rd移到当前读指针prc的位置rd指针
367 3 }
368 2 else
369 2 {
370 3 pcom_r_buff_rd++;
371 3 pcom_r_buff_prc = pcom_r_buff_rd;//如果不是0xfe,则把prc指针返回到rd指针位置
372 3 com_r_buff_empty = FALSE;
373 3 }
374 2 st_com_r = ST_COM_R_IDLE;
375 2 break;
376 2 default: break;
377 2 }
378 1 }
379
380
381
382 byte get_inf_r_data(void)
383 {
384 1 byte tmp;
385 1 tmp = *pinf_r_buff_rd;
386 1 if(pinf_r_buff_rd == inf_r_buff + INF_R_BUFF_LEN)
387 1 pinf_r_buff_rd = inf_r_buff;
388 1 else
389 1 pinf_r_buff_rd ++;
390 1 if(pinf_r_buff_rd == pinf_r_buff_wr)
391 1 inf_r_buff_empty = TRUE;
392 1 return(tmp);
393 1 }
394
395
396
397 void init_com(void)
398 {
399 1 word i = 0x0000;
400 1 byte j = 0x00;
401 1 for(i = 0x0000; i < 0x8000; i++)
402 1 XBYTE[i] = NULL_BYTE;
*** ERROR C213 IN LINE 402 OF COMCJJ.C: left side of asn-op not an lvalue
403 1
404 1 }
405 case ST_COM_R232_IDLE://0x7e
*** ERROR C141 IN LINE 405 OF COMCJJ.C: syntax error near 'case'
*** ERROR C129 IN LINE 405 OF COMCJJ.C: missing ';' before ':'
406 if(tmp == COM_R232_HEAD)
407 st_com_r232 = ST_COM_R232_LEN;
408 else
409 {
410 st_com_r232 = ST_COM_R232_IDLE;
411 sum_r232_crc = 0x00;
412 }
C51 COMPILER V6.12 COMCJJ 01/24/2006 10:33:03 PAGE 8
413 chk_empty_rs232();
414 pcom_r232_buff_rd = pcom_r232_buff_prc;//把读指针rd移到当前读指针prc的位置
415 break;
416 case ST_COM_R232_LEN://字长
417 com_len232 = tmp;
418 if(tmp < 0x02)
419 {
420 st_com_r232 = ST_COM_R232_IDLE;
421 chk_empty_rs232();
422 sum_r232_crc = 0x00;
423 //pcom_r_buff_rd = pcom_r_buff_prc;
424 pcom_r232_buff_prc = pcom_r232_buff_rd;//prc指针返回
425 }
426 else
427 {
428 st_com_r232 = ST_COM_R232_NUM;
429 com_data232_num = NULL_BYTE;
430 sum_r232_crc = 0x00;
431 chk_empty_rs232();
432 }
433 break;
434 case ST_COM_R232_NUM://桢号
435 com_r232_num = tmp;
436 sum_r232_crc += com_r232_num;
437 st_com_r232 = ST_COM_R232_CMD;
438 chk_empty_rs232();
439 break;
440 case ST_COM_R232_CMD://命令字节
441 data_r232_tmp_buff[com_data232_num] = tmp;
442 sum_r232_crc += tmp;
443 com_data232_num++;
444 if(com_len232 == 0x02)
445 {
446 st_com_r232 = ST_COM_R232_CRC;
447 }
448 if(com_len232 > 0x02)
449 st_com_r232 = ST_COM_R232_DATA;
450 //if(com_r232_len > 0x02)
451 // st_com_r232 = ST_COM_R232_DATA;
452 chk_empty_rs232();
453 break;
454 case ST_COM_R232_DATA://参数
455 com_r232_data = tmp;
456 sum_r232_crc += tmp;
457 st_com_r232 = ST_COM_R232_CRC;
458 chk_empty_rs232();
459 case ST_COM_R232_CRC:
460 if(tmp == sum_r232_crc)
461 {
462 st_com_r232 = ST_COM_R232_OK;
463 sum_r232_crc = 0x00;
464 }
465 else
466 {
467 st_com_r232 = ST_COM_R232_IDLE;
468 pcom_r232_buff_prc = pcom_r232_buff_rd;//prc指针返回
469 sum_r232_crc = 0x00;
470 com_r232_buff_empty = FALSE;
471 }
472 chk_empty_rs232();
473 break;
474 case ST_COM_R232_OK://0x0d
C51 COMPILER V6.12 COMCJJ 01/24/2006 10:33:03 PAGE 9
475 if(tmp == COM_R232_END)
476 {
477 prc_com_rs232_ok();
478 chk_empty_rs232();
479 pcom_r232_buff_rd = pcom_r232_buff_prc;//如果是0x0d,则把读指针rd移到当前读指针prc的位置rd指针
480 }
481 else
482 {
483 pcom_r232_buff_rd++;
484 pcom_r232_buff_prc = pcom_r232_buff_rd;//如果不是0x0d,则把prc指针返回到rd指针位置
485 com_r232_buff_empty = FALSE;
486 }
487 st_com_r232 = ST_COM_R232_IDLE;
488 break;
C51 COMPILATION COMPLETE. 0 WARNING(S), 14 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -