📄 anayserial.lst
字号:
400 {
401 1 wdi=1;
402 1 wdi=0;
403 1 }
404 void serial(void) interrupt 4
405 {
406 1 uchr tp=0;
407 1 if(RI==1)
408 1 {
409 2 RI=0;
410 2 if(f_rerx==1)
411 2 {
412 3 if(SBUF==start)
413 3 {
414 4 f_rerx=0;
415 4 cnt_rx=0;
416 4 }
417 3 }
418 2 else
419 2 {
420 3 cnt_rx++; //rxbuff[cnt_rx-1]=SBUF;
421 3 if(cnt_rx==1)
422 3 {
423 4 dispstyle=SBUF;
424 4 }
425 3 if(cnt_rx==2)//显示数据会大于256,所以用两个字节来表示数据长度
426 3 {
427 4 displength_h=SBUF;
C51 COMPILER V7.09 ANAYSERIAL 07/20/2007 11:22:34 PAGE 8
428 4 }
429 3 if(cnt_rx==3)
430 3 {
431 4 displength_l=SBUF;
432 4 lengthdisp=displength_h*256+displength_l;
433 4 if(lengthdisp>384)
434 4 {
435 5 f_rerx=1;
436 5 f_transerr=1;
437 5 Tx();
438 5 }
439 4 if(lengthdisp>127)
440 4 {
441 5 f_over128=1;
442 5 }
443 4 else
444 4 {
445 5 f_over128=0;
446 5 }
447 4 }
448 3 if((cnt_rx>3)&&(cnt_rx<(lengthdisp+4)))
449 3 {
450 4 if(cnt_rx<132)
451 4 {
452 5 rxbuff[cnt_rx-4]=SBUF; //0->127
453 5 }
454 4
455 4 else
456 4 {
457 5 CHPCON|=0x10;
458 5 rxbuff2[cnt_rx-132]=SBUF; //128->384
459 5 CHPCON=0x00;
460 5 }
461 4 }
462 3 if(cnt_rx==lengthdisp+4)
463 3 {
464 4 lengthsound=SBUF;
465 4 CHPCON|=0x10;
466 4 }
467 3 if((cnt_rx>(lengthdisp+4))&&(cnt_rx<(lengthdisp+lengthsound+5)))
468 3 {
469 4 soundbuff[cnt_rx-lengthdisp-5]=SBUF;
470 4 }
471 3 if(cnt_rx==(lengthsound+lengthdisp+5))
472 3 {
473 4 rx_check=SBUF;
474 4 }
475 3 if(cnt_rx==(lengthsound+lengthdisp+6))
476 3 {
477 4 f_rerx=1;
478 4 if(SBUF==end)
479 4 {
480 5 f_anayrx=1;
481 5 }
482 4 else
483 4 {
484 5 f_transerr=1;
485 5 Tx();
486 5 }
487 4 }
488 3 }
489 2 }
C51 COMPILER V7.09 ANAYSERIAL 07/20/2007 11:22:34 PAGE 9
490 1 if(TI==1)
491 1 {
492 2 TI=0;
493 2 if(cnt_tx==1)
494 2 {
495 3 SBUF=end;
496 3 cnt_tx=0;
497 3 f_transerr=0;
498 3 f_transsuc=0;
499 3 }
500 2 if(cnt_tx==2)
501 2 {
502 3 cnt_tx--;
503 3 if(f_transerr==1)
504 3 {
505 4 SBUF=txerr;
506 4 }
507 3 if(f_transsuc==1)
508 3 {
509 4 SBUF=txsuc;
510 4 }
511 3 }
512 2 }
513 1 }
514 void timer0(void) interrupt 1
515 {
516 1 TH0=0xfc;//定时1ms
517 1 TL0=0x66;
518 1 TR0=1;
519 1 if(f_t_delaywr==1)
520 1 {
521 2 cnt_delaywr++;
522 2 if(cnt_delaywr==10)
523 2 {
524 3 cnt_delaywr=0;
525 3 f_t_delaywr=0;
526 3 f_delaywr=1;
527 3 }
528 2 }
529 1 if(f_t_delayisd==1)
530 1 {
531 2 cnt_delayisd++;
532 2 if(cnt_delayisd==150)
533 2 {
534 3 cnt_delayisd=0;
535 3 f_t_delayisd=0;
536 3 //f_delayisd=1;
537 3 f_handlesound=1;
538 3 }
539 2 }
540 1 }
541 void int0(void) interrupt 0
542 {
543 1 if(isd_ce==0)
544 1 {
545 2 f_t_delayisd=1;
546 2 }
547 1 isd_ce=1;
548 1 }
549 void Tx(void)
550 {
551 1 cnt_tx=2;
C51 COMPILER V7.09 ANAYSERIAL 07/20/2007 11:22:34 PAGE 10
552 1 SBUF=0x10;
553 1 }
554 void rom2ram_hanzi(uchr x,ulng y)
555 {
556 1 uchr tp;
557 1 uchr i=0,j=0,m=0;
558 1 uint temp=0;
559 1 //m=(uchr)(y/65536); //m直接取值会出错。
560 1 temp=(uint)(y/256);
561 1 m=(uchr)(temp/256);
562 1 if(m==0)
563 1 {
564 2 rom_a17=0;
565 2 rom_a16=0;
566 2 }
567 1 if(m==1)
568 1 {
569 2 rom_a17=0;
570 2 rom_a16=1;
571 2 }
572 1 if(m==2)
573 1 {
574 2 rom_a17=1;
575 2 rom_a16=0;
576 2 }
577 1 if(m==3)
578 1 {
579 2 rom_a17=1;
580 2 rom_a16=1;
581 2 }
582 1 temp=y-m*65536;
583 1 for(i=0;i<32;i++)
584 1 {
585 2 j=i/2;
586 2 rom_ce=0;
587 2 tp=XBYTE[temp+i];
588 2 rom_ce=1;
589 2 if((i%2)==0)
590 2 {
591 3 if(x<13)
592 3 {
593 4 ram_ce=0;
594 4 nDispRam[12*j+x-2]=tp;
595 4 }
596 3 else
597 3 {
598 4 ram_ce=0;
599 4 nDispRam[12*(j+16)+x-2-12]=tp;
600 4 }
601 3 ram_ce=1;
602 3 }
603 2 if((i%2)==1)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -