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

📄 ir.lst

📁 CS8955控制TV软件。用MCU做模拟电视的控制。
💻 LST
字号:
C51 COMPILER V8.05a   IR                                                                   01/05/2009 15:57:49 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE IR
OBJECT MODULE PLACED IN .\OBJ\Ir.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ir\Ir.c LARGE BROWSE INCDIR(.\include) DEBUG OBJECTEXTEND PRINT(.\List\Ir.l
                    -st) OBJECT(.\OBJ\Ir.obj)

line level    source

   1          /******************************************************************************\
   2               Project Version:   MTKCARDVD()
   3          ********************************************************************************
   4               Filename:          ir.c
   5          
   6               Author:            Bonson chen
   7          
   8               Company:           CoreTek/ACT Company
   9          
  10          ********************************************************************************
  11               File Version:      1.01
  12               File Created:      July 2007
  13          
  14               Compiled Using:    keil uVision2 Version 2.23 
  15          
  16          ********************************************************************************
  17               Files Required:
  18          
  19          ********************************************************************************
  20               File Description:
  21          
  22          ********************************************************************************
  23               File History:
  24          
  25          --------------------------------------------------------------------------------
  26            Date         Name           Description
  27          --------------------------------------------------------------------------------
  28            Mar. 2007    bonson chen    File Created
  29            
  30          \******************************************************************************/
  31          #define _IR_RECV_C_
  32          
  33          #pragma NOAREGS
  34          #include "Global.h"
  35          #include "key.h"
  36          
  37          #include "irkey.h"
  38          
  39          // static variables
  40          
  41          // *********************************************************************
  42          // Function : void vIrInit(void)
  43          // Description : Called when system initial, to reset IR and UI
  44          // Parameter : None
  45          // Return    : None
  46          // *********************************************************************
  47          void vInitIRVar(void) 
  48          {
  49   1        // reset IR related variable
  50   1        _bIR0 = IR_NONE;
  51   1        _fgIRKeyValid = FALSE;
  52   1        _bPlaypostKey = IR_NONE;
  53   1        _bIRKey0 = IR_NONE;
  54   1        _bIRLongPush = IR_NONE;
C51 COMPILER V8.05a   IR                                                                   01/05/2009 15:57:49 PAGE 2   

  55   1        LongPushCount = 0;
  56   1        _bRemoteTimer = 0;
  57   1      }
  58          
  59          #define IR_OVERFLOW            250  /* 38 ms */
  60          #define IR_LEAD_CENTER         23   /* 3.37 ms */
  61          #define IR_REPEAT_CENTER       14   /* 2.25 ms */
  62          #define IR_DATA_CENTER         8    /* 1.21 ms */
  63          
  64          #define IR_LEADH_MAX           93
  65          #define IR_LEADH_MIN           80       //measure is 83 //87
  66          #define IR_LEADL_MAX           48
  67          #define IR_LEADL_MIN           38 //35  //measure is 40 //40
  68          #define IR_DATA1_MAX           20
  69          #define IR_DATA1_MIN            9
  70          #define IR_DATA0_MAX            6
  71          #define IR_DATA0_MIN            2
  72          #define IR_REPEAT_MIN          15//measure is 18                //19
  73          #define IR_REPEAT_MAX          24
  74          #define IR_PULSE_MAX            7
  75          #define IR_PULSE_MIN            4
  76          
  77          #define IR_HEAD_TIMER                   13500
  78          #define IR_CONHEAD_TIMER        11250
  79          #define IR_HEAD_MISTAKE                 400
  80          #define IR_DIGITAL1_TIMER               2250
  81          #define IR_DIGITAL0_TIMER       1125
  82          #define IR_DIGITAL_MISTAKE      200
  83          void vDelay100us(void)
  84          {
  85   1        
  86   1        BYTE c;
  87   1      
  88   1            for (c=0;c<28;c++)
  89   1           {
  90   2              _nop_();_nop_();_nop_();_nop_();
  91   2              _nop_();_nop_();_nop_();_nop_();
  92   2              _nop_();_nop_();
  93   2              _nop_();_nop_();_nop_();_nop_();
  94   2              
  95   2            }
  96   1      }
  97          
  98          /************************************************************************
  99               Function : 
 100            Description : 
 101              Parameter : 
 102              Return    : 
 103          ************************************************************************/
 104          BYTE bRemoteDetect(void)
 105          {
 106   1        BYTE bCount, i, j;
 107   1        BYTE bCodes[4];
 108   1        BYTE bByte;
 109   1      
 110   1              // ********** Leader signal (low 9ms + high 4.5 ms) **********
 111   1        for (bCount=0; (!PIN_IR); bCount++) vDelay100us();               //Leader signal low = 9ms
 112   1      
 113   1        if ((bCount < IR_LEADH_MIN) || (bCount > IR_LEADH_MAX))
 114   1        {
 115   2           return(IR_NONE);
 116   2        }
C51 COMPILER V8.05a   IR                                                                   01/05/2009 15:57:49 PAGE 3   

 117   1      
 118   1        for (bCount = 0; ((PIN_IR) && (bCount < (IR_LEADL_MAX+10))); bCount++) vDelay100us();   //Leader signal 
             -high = 4.5ms
 119   1      
 120   1        if ((bCount < IR_LEADL_MIN) || (bCount > IR_LEADL_MAX)) // outside high 4.5 range
 121   1        { // consider same key is pressed
 122   2          // if input the same key, only leader code is sent
 123   2          //  low (9ms) , high (2.25), low (0.56)
 124   2      //   if ((bCount >= IR_REPEAT_MIN) && (bCount <= IR_REPEAT_MAX))   // key remain pressed
 125   2          {
 126   3                for (bCount=0; !PIN_IR ; bCount++) vDelay100us();
 127   3          }
 128   2      
 129   2          for (bCount=0; (PIN_IR) && (bCount < (IR_DATA1_MAX+20)) ; bCount++) vDelay100us();
 130   2      
 131   2      //    if ((bCount >= IR_PULSE_MIN) && (bCount <= IR_PULSE_MAX))
 132   2          if (bCount >= (IR_DATA1_MAX+10))
 133   2          {
 134   3                              //gotoxy(1,1);
 135   3                      //      PrintHex(bCount,1);     
 136   3            _bRemoteTimer = 5;
 137   3            if ((++LongPushCount)>=5)
 138   3            {
 139   4                LongPushCount = 0;
 140   4                _bRemoteTimer = 0;
 141   4                return(IR_LONGPUSH); // return the previous input key
 142   4            }   
 143   3          }
 144   2          else
 145   2              LongPushCount = 0;
 146   2      
 147   2          return(IR_NONE);
 148   2        } 
 149   1      
 150   1          LongPushCount = 0;
 151   1      
 152   1        // *********** Read Code *************
 153   1              // logic 0 = low (0.56) + high (0.56)
 154   1              // logic 1=  low (0.56) + high (1.68)
 155   1        for (i=0; i<4; i++)
 156   1        {
 157   2              bByte = 0;
 158   2              for (j=0; j<8; j++)
 159   2             {
 160   3                  for (bCount=0; (!PIN_IR); bCount++) vDelay100us(); //bypass low signal at INT0
 161   3      
 162   3                  for (bCount=0; (PIN_IR) && (bCount < (IR_DATA1_MAX+10)) ; bCount++) vDelay100us();
 163   3      
 164   3                  if (bCount == 0)
 165   3                 {
 166   4                      j--;
 167   4              continue;     // maybe signal noise
 168   4                 }
 169   3      
 170   3                 bByte >>= 1;   // shift right one bit
 171   3      
 172   3                 if (bCount >= IR_DATA1_MIN)   // bit=0 => bCount<9ms; bit=1 => bCount>9ms
 173   3                 {                    //  > 0.9 ms==> logic 1
 174   4                            //     else ==> logic 0
 175   4                       if (bCount >= IR_DATA1_MAX)
 176   4                      {
 177   5                           return(IR_NONE);         // bCount>30 => error
C51 COMPILER V8.05a   IR                                                                   01/05/2009 15:57:49 PAGE 4   

 178   5                      }
 179   4                      bByte |= 0x80;
 180   4                }
 181   3          }
 182   2          bCodes[i] = bByte;
 183   2        }
 184   1      
 185   1        if ((bCodes[0] != IR_CUSTOM_CODE) || (bCodes[1] != ~bCodes[0]))
 186   1        {
 187   2          return(IR_NONE);                // system code error
 188   2        }
 189   1      
 190   1        // each bit of aCodes[2] will be invert of aCodes[3]
 191   1        if (bCodes[2] == ~bCodes[3])
 192   1        {
 193   2            _bIR0 = bCodes[2];
 194   2            if (bCodes[2] >= IR_KEY_GAP_START)
 195   2            {
 196   3                bCodes[2] -= IR_KEY_GAP_SIZE;
 197   3            }
 198   2      
 199   2            if (bCodes[2] < IR_KEY_TBL_SIZE)
 200   2            {
 201   3                {
 202   4                    /* look up the mapping table */
 203   4                    bCodes[2] = _pbIRKeyTbl[bCodes[2]];
 204   4                }
 205   3      
 206   3                /* put the received key */
 207   3                if (bCodes[2] != IR_NONE)
 208   3                {
 209   4                    // long push key
 210   4                    if (IsLongPushKey(bCodes[2]))
 211   4                    {
 212   5                         _bRemoteTimer = 5;
 213   5                    }
 214   4                    /* assume IR interrupt priority is the highest */
 215   4                   return(bCodes[2]);
 216   4                }
 217   3            }
 218   2        }
 219   1      
 220   1        return(IR_NONE);
 221   1      }
 222          
 223          
 224          BYTE bGetIR0(BYTE bKey)
 225          {
 226   1      BYTE i;
 227   1      for(i = 0; i< (IR_KEY_CODE_MAX-IR_KEY_GAP_SIZE); i++)
 228   1              {
 229   2               if(bKey ==_pbIRKeyTbl[i])
 230   2                      {
 231   3                      if(i < IR_KEY_GAP_START)
 232   3                              return i;
 233   3                      else
 234   3                              return(i + IR_KEY_GAP_SIZE);
 235   3                      }
 236   2              }
 237   1      return(IR_NONE);
 238   1      }

C51 COMPILER V8.05a   IR                                                                   01/05/2009 15:57:49 PAGE 5   


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    402    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----       5
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   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 + -