⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 irrxd.lst

📁 51单片机的
💻 LST
字号:
C51 COMPILER V7.06   IRRXD                                                                 09/14/2005 23:04:01 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE IRRXD
OBJECT MODULE PLACED IN IrRxd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE IrRxd.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include<at89x52.h>
   2          
   3          #define IRRXD P3_3//INT1口
   4          
   5          unsigned char IrRxdBack=0;//中断返回的数据//
   6          bdata unsigned char IrRxd=0;
   7          sbit  IrRxdOk1=IrRxd^0;//有否中断的状态标志//  
   8          
   9          
  10          
  11          
  12          
  13           unsigned char IrRxdReceive(void);
  14           void IrRxdInilital(void);
  15          
  16          
  17          
  18          
  19          //红外线接受初始化函数//设置为定时器1在门控GATE下工作//外部中段1工作//
  20          void IrRxdInilital(void)
  21          {TMOD=(TMOD & 0x0f)|0x80;
  22   1       IE=IE|0x84;
  23   1      }
  24          
  25          
  26          //中断处理模块//
  27          IrRxdIrq()  interrupt 2
  28          {unsigned char IrRxdCmpH=0,IrRxdCmpL=0;
  29   1      ////////////////////////////////////////////////////////////////////////
  30   1      P3_5=0;
  31   1      ////////////////////////////////////////////////////////////////////////
  32   1      EX1=0;//关中断
  33   1      TR1=1;//启动定时器1//
  34   1      P3_0=0;
  35   1      IrRxdCmpL=IrRxdReceive();//接受低八位的红外线信号//
  36   1      IrRxdCmpH=IrRxdReceive();//接受高八位的红外线信号//
  37   1      TR1=0;//关定时器//
  38   1      while(~IRRXD);//等待中断INT1恢复为高电平//
  39   1      if(IrRxdCmpL==0x47)  //如如果用户码正确进入代码转化//
  40   1            {switch(IrRxdCmpH)
  41   2                    {case 0x04:IrRxdBack='0';break;//0按键//
  42   3                   case 0x00:IrRxdBack='1';break;//1
  43   3                       case 0x08:IrRxdBack='2';break;//2
  44   3                       case 0x10:IrRxdBack='3';break;//3
  45   3                       case 0x18:IrRxdBack='4';break;//4
  46   3                       case 0x20:IrRxdBack='5';break;//5
  47   3                       case 0x28:IrRxdBack='6';break;//6
  48   3                       case 0x30:IrRxdBack='7';break;//7
  49   3                       case 0x38:IrRxdBack='8';break;//8
  50   3                       case 0x01:IrRxdBack='9';break;//9
  51   3                       case 0x11:IrRxdBack='a';break;//--/-按键//
  52   3                       case 0x22:IrRxdBack='c';break;//音量+//
  53   3                       case 0x2a:IrRxdBack='d';break;//音量-//
  54   3                       case 0x32:IrRxdBack='e';break;//静音//
  55   3                       case 0x0a:IrRxdBack='f';break;//频道+//
C51 COMPILER V7.06   IRRXD                                                                 09/14/2005 23:04:01 PAGE 2   

  56   3                       case 0x12:IrRxdBack='g';break;//频道-//
  57   3                       default :IrRxdBack=0x00;break;
  58   3                              }
  59   2              IrRxdOk1=1;//置中断标志为1//
  60   2            }
  61   1      else IrRxdBack=0x00;//如果用户码错则置空//
  62   1      EX1=1;//开中断//
  63   1      ////////////////////////////////////////////////////////////////////////
  64   1      P3_5=1;
  65   1      ////////////////////////////////////////////////////////////////////////
  66   1      }
  67          
  68          
  69          //红外线接受八位数据模块//
  70          unsigned char IrRxdReceive(void)
  71          {unsigned char IrRxdMunber=0,IrRxdCmp1=0,IrRxdCmp2=0,IrRxdCmp=0;
  72   1        for(;IrRxdMunber<=7;IrRxdMunber++)
  73   1           {while(~IRRXD);//如果INT1为低电平则等待//直到高电平
  74   2             while(IRRXD);//如果INT1为高电平则等待//直到低电平
  75   2            IrRxdCmp1=TH1;
  76   2            IrRxdCmp2=TL1;
  77   2                if(IrRxdCmp1==0){TH1=0;TL1=0;IrRxdMunber--;continue;}//如果时间太短则判为误码,再进入循环//
  78   2                else {if(IrRxdCmp1>=0x28) //如果接受的高电平时间长则置一//
  79   3                         {IrRxdCmp=(IrRxdCmp>>1)|0x80;
  80   4                             TH1=0;TL1=0;
  81   4                            }
  82   3                        else {IrRxdCmp=IrRxdCmp>>1;TH1=0;TL1=0;}//否则置0
  83   3                     }
  84   2            }
  85   1      return(IrRxdCmp);//返回接受的数据
  86   1      }
  87          
  88          
  89          main()
  90          {unsigned char KingsRight=0,KingsRightBuf[8]={0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77};
  91   1      long delaytime=0;
  92   1      IrRxdInilital();
  93   1      while(1)
  94   1         {delaytime++;
  95   2          if(IrRxdOk1)
  96   2            {P1=IrRxdBack;}
  97   2          if(delaytime==100000)
  98   2              {delaytime=0;
  99   3               KingsRight++;
 100   3               if(KingsRight==7)KingsRight=0;
 101   3               P2=KingsRightBuf[KingsRight];
 102   3               }
 103   2          }
 104   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    424    ----
   CONSTANT SIZE    =      8    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2      14
   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 + -