📄 pt2262_decode.lst
字号:
502 ** 修改人:
503 ** 日 期:
504 **------------------------------------------------------------------------------------------------------
505 ********************************************************************************************************/
506
507 void error()
508 {
509 1
510 1
511 1 }
512
513 /*********************************************************************************************************
514 ** 函数名称: time0interrupt
515 ** 功能描述: 定时器0中断(中断时间为250us),检查是否irpin的信号,250us中断一次,ir没有用三极管,
516 ** 直接接一个上拉电阻,接收到的波形出手册上的是反相的
517 ** 输 入: 无
518 ** 输 出: 无
519 ** 全局变量:
520 ** 调用模块:
521 **
522 ** 作 者: gl
523 ** 日 期: 2007年01月15日
524 **-------------------------------------------------------------------------------------------------------
525 ** 修改人: gl
526 ** 日 期: 2007年01月21日
527 **------------------------------------------------------------------------------------------------------
528 ********************************************************************************************************/
529
530 void time0interrupt() interrupt 1 using 2
531 {
532 1
533 1 if(IRPIN)
534 1 {
535 2
536 2 if(IRPINOLDFG) //1--->1//不变为高
537 2 {
538 3 hightcount++;
539 3 lowcount = 0;
540 3 if(hightcount > _124AMAX)
541 3 {
542 4 _synbitokFG = 0; //没有红外信号
543 4 hightcount = 1;
544 4 lowcount = 0;
545 4 hightcountold = 0;
546 4 lowcountold = 0;
547 4 bitcount1 = 0;
548 4 IRPINOLDFG = 1;
549 4 ircode = 0;
C51 COMPILER V6.12 PT2262_DECODE 01/23/2007 00:22:16 PAGE 10
550 4 }
551 3 }
552 2 else
553 2 { //0--->1,要测
554 3 lowcountold = lowcount;
555 3 lowcount = 0;
556 3 IRPINOLDFG = 1;
557 3 hightcount = 1;
558 3 }
559 2
560 2 }
561 1 else
562 1 {
563 2 //有红外信号
564 2 if(IRPINOLDFG) //1--->0
565 2 {
566 3
567 3 hightcountold = hightcount;
568 3 hightcount = 0;
569 3 IRPINOLDFG = 0;
570 3 lowcount = 1;
571 3
572 3 if((lowcountold >= _4AMIN && lowcountold < _4AMAX) &&
573 3 (hightcountold > _124AMIN && hightcount < _124AMAX))//1--->0
574 3 {
575 4 _synbitokFG = 1; //检测到同步码
576 4 hightcountold = 0;
577 4 lowcountold = 0;
578 4 bitcount1 = 0;
579 4 ircode = 0;
580 4
581 4 }
582 3 else
583 3 {
584 4 if(_synbitokFG)
585 4 {
586 5 if((lowcountold >= _4AMIN && lowcountold < _4AMAX) &&
587 5 hightcountold >= _12AMIN && hightcountold <_12AMAX)
588 5 {
589 6 ircode &= 0xfffffffe; //0
590 6 }
591 5 else
592 5 {
593 6 if(lowcountold > _12AMIN && lowcountold < _12AMAX &&
594 6 hightcountold >= _4AMIN && hightcountold <_4AMAX)
595 6 { //1
596 7 ircode |= 0x00000001; //1
597 7 }
598 6 }
599 5
600 5 if(++bitcount1 <= 24)
601 5 {
602 6 ircode <<= 1; //32位左移,低24位有效
603 6 }
604 5 if(bitcount1 == 24)
605 5 {
606 6
607 6 bitcount1 = 0; //现在为同步位的低电平(与data上是反的,
608 6 //即data中同步位高电平)
609 6 ircode >>= 1; //左移进多移了一位
610 6 ircode &= 0x00ffffff;
611 6 i = 0;
C51 COMPILER V6.12 PT2262_DECODE 01/23/2007 00:22:16 PAGE 11
612 6 while(ircode != ircodetable[i])
613 6 {
614 7 if(i >= KEYS)
615 7 {
616 8 //i = 4;
617 8 ircode = 0;
618 8 break;
619 8 //出错处理
620 8 }
621 7 i++;
622 7 }
623 6 Count = ircode;
624 6 keys = i;
625 6 _synbitokFG = 0;
626 6 have_count++;
627 6 }
628 5 }
629 4 }
630 3 }
631 2 else
632 2 {
633 3 lowcount++; //0--->0//不变为低
634 3 hightcount = 0;
635 3 }
636 2
637 2 }
638 1
639 1 if(++_03UScount >= 2000) //计0.5S
640 1 {
641 2 _03UScount = 0;
642 2 _1SFG = 1;
643 2
644 2 }
645 1 /*
646 1 //这里为实时性要求高的任务,这部分执行时间最好不要太长
647 1 */
648 1 }
649
650 /*********************************************************************************************************
651 ** 函数名称: main
652 ** 功能描述: 主程序
653 ** 输 入: 无
654 ** 输 出: 无
655 ** 全局变量:
656 ** 调用模块:
657 **
658 ** 作 者: gl
659 ** 日 期: 2007年01月15日
660 **-------------------------------------------------------------------------------------------------------
661 ** 修改人: gl
662 ** 日 期: 2007年01月15日
663 **------------------------------------------------------------------------------------------------------
664 ********************************************************************************************************/
665 void main()
666 {
667 1 unsigned char procylce = 0;
668 1
669 1 init();
670 1
671 1 while(1)
672 1 {
673 2 if(++procylce > TASKS) //TASKS为时间片里的任数
C51 COMPILER V6.12 PT2262_DECODE 01/23/2007 00:22:16 PAGE 12
674 2 {
675 3 procylce = 1;
676 3 }
677 2 switch(procylce) //任务时间片处理
678 2 {
679 3 case 1 : //任务1:读键
680 3 {
681 4 KeyScan();
682 4
683 4 break;
684 4 }
685 3
686 3 case 2 : //任务2
687 3 {
688 4 Display();
689 4 break;
690 4 }
691 3
692 3 case 3 : //任务3
693 3 {
694 4 GetAd();
695 4 break;
696 4 }
697 3
698 3 case 4 : //任务4
699 3 {
700 4 function1();
701 4 break;
702 4 }
703 3
704 3 case 5 : //任务5
705 3 {
706 4
707 4 break;
708 4 }
709 3
710 3 case 6 : //任务6
711 3 {
712 4
713 4 break;
714 4 }
715 3
716 3 case 7 : //任务7
717 3 {
718 4
719 4 break;
720 4 }
721 3
722 3 case 8 : //任务8
723 3 {
724 4 time();
725 4 break;
726 4 }
727 3 default :
728 3 {
729 4 error(); //出错处理
730 4 }
731 3
732 3 }
733 2 /*
734 2 //这里为实时性要求高的任务
735 2 */
C51 COMPILER V6.12 PT2262_DECODE 01/23/2007 00:22:16 PAGE 13
736 2
737 2 }
738 1 }
739 /*********************************************************************************************************
740 ** End Of File
741 ********************************************************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1500 ----
CONSTANT SIZE = 193 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 78 21
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -