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

📄 halir.lst

📁 威望公司MP3 + USB MCU 的参考软件
💻 LST
字号:
C51 COMPILER V8.01   HALIR                                                                 04/17/2008 09:46:51 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE HALIR
OBJECT MODULE PLACED IN .\Debug\halir.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ir\halir.c LARGE OPTIMIZE(9,SIZE) NOINTPROMOTE INCDIR(.\common;.\e2prom;.\f
                    -ile;.\fmtx;.\ir;.\keyboard;.\lcm;.\led;.\main;.\matrixkey;.\mp3ctrl;.\sd;.\usbhost;.\include;.\lib) DEBUG OBJECTEXTEND P
                    -RINT(.\Debug\halir.lst) OBJECT(.\Debug\halir.obj)

line level    source

   1          /****************************************************************
   2          *                      Viaon Technology (Suzhou) Co.,Ltd
   3          *
   4          *    Copyright 2007, Viaon Technology (Suzhou) Co.,Ltd,Suzhou,China
   5          *                    All rights reserved.
   6          *
   7          *
   8          * Filename:             halir.c
   9          *
  10          * Programmer:           Greg 
  11          *
  12          * Created:              1/2/2008
  13          *
  14          * Description:          public functions 
  15          *              
  16          *        
  17          * Change History (most recent first):   2008.1.2
  18          ****************************************************************/
  19          
  20          
  21          //VA4010 IR control will use the timer1 and external int1
  22          //Only pin P3.3 can be used as IR input. So we doesnot need to change this pin assign.
  23          #include "utiltypedef.h"
  24          #include "va4010reg.h"
  25          #include "common.h"
  26          #include "halir.h"
  27          #include "timer.h"
  28          
  29          #define IR_STATUS_IDLE          0X01
  30          #define IR_STATUS_START         0X02
  31          #define IR_STATUS_DATA          0X03
  32          #define IR_STATUS_STOP          0X04
  33          
  34          
  35          sbit IR_PIN=P3^3;
  36          static volatile BYTE data irstatus;
  37          static volatile BYTE data ircnt;
  38          
  39          
  40          static volatile DWORD irdata;
  41          static volatile BYTE data irdone = 0; //0: not ready, 1: ready
  42          
  43          void halIRINTInit(void)
  44          {
  45   1              //Set msb 4bit only for timer1
  46   1              TMOD &= 0X0F;
  47   1              TMOD |= 0x10;
  48   1              
  49   1              //time1 INT
  50   1              //PT1           = 1;                    //Set timer1 int as high priority
  51   1      
  52   1              /*External INT1 Enable*/
  53   1              EX1 = 1; //Negative level sensitive, IT1 = 0
C51 COMPILER V8.01   HALIR                                                                 04/17/2008 09:46:51 PAGE 2   

  54   1              //PX1 = 1; // Set INT1 Priority as High
  55   1              irstatus = IR_STATUS_IDLE;
  56   1              
  57   1              return;
  58   1      }
  59          
  60          
  61          /*---------------------------------TIMER1 ISR--------------------------------------------*/
  62          void halT1ISR(void) interrupt 3 using 2
  63          {
  64   1              //DISABLE_INTERRUPTS;
  65   1              TF1 = 0; //timer 1 overflow flag clear
  66   1              TH1             = 0;
  67   1              TL1             = 0;
  68   1              ET1             = 0;    //Disable timer1 INT
  69   1              EX1             = 1;//Enable external INT1
  70   1      
  71   1              /*------------------------------------------------------*/
  72   1              //check INT1 pin, P3.3
  73   1              if(IR_PIN == 0){
  74   2                      irstatus = IR_STATUS_IDLE;
  75   2              }
  76   1              
  77   1              //ENABLE_INTERRUPTS;      
  78   1              return;
  79   1      }  
  80          
  81          /*---------------------------------External INT1 ISR--------------------------------------------*/
  82          /*
  83          3.5ms / 2us        = 0x06D6
  84          4.5ms / 2us        = 0X08CA
  85          2.25ms / 2us   = 0x0465
  86          1.0ms / 2us        = 0x01F4
  87          
  88          1.7ms / 2us     = 0x0352
  89          0.65ms /2us     = 0x0145
  90          0.6ms / 2us     = 0x012c
  91          0.4ms / 2us     = 0x00C8
  92          0.3ms / 2us     = 0x0096
  93          */
  94          static volatile DWORD dwPrevIrData = 0Xffffffff;
  95          static volatile BYTE data byRepeatCnt = 0;
  96          void halINT1ISR(void) interrupt 2 using 3
  97          {
  98   1              //Disable external INT1
  99   1              EX1             = 0;
 100   1      
 101   1              switch(irstatus){
 102   2                      case IR_STATUS_IDLE:
 103   2                              //Check leader code     
 104   2                              TH1             = TIMER_10MS_TH;        // ??软件定时器中断  对6MHz
 105   2                              TL1             = TIMER_10MS_TL;
 106   2                              irstatus = IR_STATUS_START;
 107   2                              break;
 108   2                              
 109   2                      case IR_STATUS_START:
 110   2                              if( (TH1<0X09)&&(TH1>0X04) ){  //Interval: 2.56ms -> 4.6ms
 111   3                                      irstatus = IR_STATUS_DATA;
 112   3                                      ircnt = 0;
 113   3                                      irdata = 0;
 114   3                                      byRepeatCnt = 0;
 115   3                              }else if(TH1<0x4){
C51 COMPILER V8.01   HALIR                                                                 04/17/2008 09:46:51 PAGE 3   

 116   3                                      irstatus = IR_STATUS_IDLE;
 117   3                                      irdata = dwPrevIrData;
 118   3                                      if(byRepeatCnt > 6)
 119   3                                      {
 120   4                                              irdone = 1;
 121   4                                              byRepeatCnt = 5;
 122   4                                      }
 123   3                                      byRepeatCnt++;
 124   3                              }
 125   2                              else{
 126   3                                      irstatus = IR_STATUS_IDLE;
 127   3                              }
 128   2                              TH1             = TIMER_P8MS_TH;        // ??软件定时器中断  对6MHz
 129   2                              TL1             = TIMER_P8MS_TL;
 130   2                              break;
 131   2      
 132   2                      case IR_STATUS_DATA:
 133   2                              if((TH1<0X04)&&(TH1>0X01)){     //Interval: 1.024ms -> 2.048ms
 134   3                      #if 0   
                                              irdata =  (irdata|0x01);
                              #else
 137   3                                      irdata |= 0x80000000;
 138   3                      #endif          
 139   3                              }else if((TH1<=0X01)){
 140   3                                      //irdata = (irdata<<1);
 141   3                              }else{
 142   3                                      //irstatus = IR_STATUS_IDLE;
 143   3                              }
 144   2                              
 145   2                              ircnt ++;
 146   2                              if(ircnt >= 32){
 147   3                                      //irstatus = IR_STATUS_STOP;
 148   3                                      irstatus = IR_STATUS_IDLE;
 149   3                                      irdone = 1;
 150   3                                      dwPrevIrData = irdata;
 151   3      
 152   3                                      //IRTicks = 0; //IR input again
 153   3                                      //UartOutValue(irdata, 8);
 154   3                              }else{
 155   3                      #if 0   
                                              irdata = (irdata<<1);
                              #else
 158   3                                      irdata = (irdata >> 1);
 159   3                      #endif
 160   3                              }
 161   2                              TH1             = TIMER_P8MS_TH;        // ??软件定时器中断  对6MHz
 162   2                              TL1             = TIMER_P8MS_TL;
 163   2                              break;
 164   2              }
 165   1      
 166   1              ET1             = 1;                                    //打开T1中断                    
 167   1              TR1     = 1;                                    //启动T1        
 168   1      
 169   1              return;
 170   1      }
 171          
 172          //Clear the dwPrevIrData, byRepeatCnt
 173          #define IR_CLEAR_INTERVAL               10      // 100ms unit
 174          #if 0
              static void _halIRClr(void)
              {
                      //If no IR input in 2Seconds, clear the IR repeat variables to avoid the IR disturb.
C51 COMPILER V8.01   HALIR                                                                 04/17/2008 09:46:51 PAGE 4   

                      if(IRTicks > IR_CLEAR_INTERVAL){
                              //dwPrevIrData = IR_CODE_INVALID;
                              dwPrevIrData = 0X00;
                              byRepeatCnt = 0;
              
                              IRTicks = 0;
                      }
                      
                      return;
              }
              #endif
 189          
 190          BYTE halIRGet(DWORD *pIRDat)
 191          {
 192   1              BYTE data ret = IR_NULL;
 193   1      
 194   1              if(irdone == 1){
 195   2                      irdone = 0;
 196   2                      IRTicks = 0; //IR input again
 197   2                      *pIRDat = irdata;
 198   2                      ret = IR_LEAD;
 199   2      
 200   2                      if(byRepeatCnt != 0)
 201   2                              ret = IR_REPEAT;
 202   2              }else if(IRTicks > IR_CLEAR_INTERVAL){
 203   2                      //dwPrevIrData = IR_CODE_INVALID;
 204   2                      dwPrevIrData = 0Xffffffff;
 205   2                      byRepeatCnt = 0;
 206   2                      //IRTicks = 0;
 207   2              }                     
 208   1                      
 209   1              return ret;
 210   1      }
 211          
 212          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    296    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =      8    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4       1
   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 + -