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

📄 driver.lst

📁 通过遥控红外信号在电器之间传输数据的软件
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.50   DRIVER                                                                10/19/2006 09:37:29 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE DRIVER
OBJECT MODULE PLACED IN .\Driver.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\Src\Driver.c OMF2 ROM(COMPACT) BROWSE DEBUG PRINT(.\Driver.lst) OBJECT(.
                    -\Driver.obj)

line level    source

   1          /*==========================================================================*/
   2          /*
   3          ;     SOURCE_FILE:    Driver.C
   4          ;     APPLICATION:        LPC9XX
   5          ;     COMPONENT:     ISR,IIC,IR
   6          ;     DATE:           16 May 2006
   7          ;
   8          ;     (C) 2006 : CHANGHONG FPD SOFTWARE Lab
   9                 AUTHOR:       DJ
  10          */
  11          /*==========================================================================*/
  12          
  13          #define _DRIVER_C_
  14          /* ======================================= */
  15          // INCLUDE    
  16          /* ======================================= */
  17          #include <REG922.H>
  18          #include <intrins.h>
  19          #include "define.h"
  20          #include "Driver.h"
  21          #include "clone.h"
  22          /* ======================================= */
  23          //  STATIC VARIABLE DEFINE
  24          /* ====================================== */
  25          //i2c
  26          static Bool  bSubAddrSended = FALSE;
  27          static Bool  bIrSendTimer1Use = FALSE;   
  28          static Bool  bIrOutPinChangeStandby = FALSE;
  29          static Bool  bIrOutPinStatus = 0;
  30          
  31          static I2C_MESSAGE DATA NvI2c;
  32          //ir
  33          static Byte  DATA    ucIrDetectStatus = 0;
  34          static Byte  DATA    ucIrRecBitCount = 0;
  35          static Byte  DATA    ucIrRecByte = 0;
  36          static Byte  DATA    ucNeedRecByteNum = 0;
  37          //static Byte  DATA    ucIrDetectTimer = 0;
  38          //static Byte  DATA    ucDelay1msCount = 0;
  39          static Byte  DATA    ucIrSendDelayType = 0;
  40          
  41          
  42          
  43          /* ======================================= */
  44          //MACRO DEFINE
  45          /* ======================================= */
  46          
  47          /* ======================================= */
  48          //FUNCTION DEFINE
  49          /* ======================================= */
  50          //only use for creat IR 38K carrier wave
  51          void ISR_Timer0(void) interrupt 1 using 1
  52          {
  53   1         TF0 = 0;//clear the flag
  54   1         TR0 = 0;
C51 COMPILER V7.50   DRIVER                                                                10/19/2006 09:37:29 PAGE 2   

  55   1         TL0 = LOWBYTE(ISR_TIME0_38K_RELOAD_VALUE);
  56   1         TH0 = HIGHBYTE(ISR_TIME0_38K_RELOAD_VALUE);
  57   1         TR0 = 1; 
  58   1         
  59   1         if((bIrOutPinStatus == 0) ||
  60   1              (bIrOutPinChangeStandby == TRUE))
  61   1         {
  62   2             bIrOutPinChangeStandby = FALSE;
  63   2             PIN_IR_OUT = ~PIN_IR_OUT;
  64   2              bIrOutPinStatus = ~bIrOutPinStatus;       
  65   2         }
  66   1         else
  67   1         {
  68   2            bIrOutPinChangeStandby = TRUE;
  69   2         }
  70   1      }
  71          
  72          /* ======================================= */
  73          //IR receive hander
  74          void ISR_ExtInt1(void) interrupt 2 using 1
  75          {
  76   1              Word  irTimer;
  77   1             IE1 = 0;//clear flag
  78   1      //       irTimer = ucIrDetectTimer;
  79   1      //      ucIrDetectTimer = 0;
  80   1              TR1 = 0;
  81   1             irTimer = (TH1<<8) + TL1;
  82   1              TL1 = 0;
  83   1              TH1 = 0;
  84   1             TR1 = 1;
  85   1      
  86   1             if(INT1)  return;      //get rid of debounce
  87   1              switch(ucIrDetectStatus)
  88   1              {
  89   2              case IR_STANDBY:
  90   2                        ucIrDetectStatus = IR_CHECK_LEADING;
  91   2                      break;
  92   2              case IR_CHECK_LEADING:
  93   2                      if(irTimer > (IR_LEADING_TIME - IR_LEADING_DIFF) &&
  94   2                          irTimer < (IR_LEADING_TIME + IR_LEADING_DIFF) )
  95   2                      {
  96   3                           ucIrDetectStatus = IR_REC_DATA;
  97   3                           ucIrRecBitCount = 0;
  98   3                           ucNeedRecByteNum = 0;
  99   3                           ucIrRecByte = 0;
 100   3                      }
 101   2                      else
 102   2                      {
 103   3                          ucIrDetectStatus = IR_STANDBY;
 104   3                      }
 105   2                      break;
 106   2              case IR_REC_DATA:
 107   2                        ucIrRecByte >>= 1;
 108   2                     if(irTimer <= IR_LOGIC0_1_BORDER) 
 109   2                     {
 110   3                         ;//ucIrRecByte &= ~BIT7;      // 0
 111   3                     }
 112   2                       else 
 113   2                       {
 114   3                         ucIrRecByte |= BIT7;            // 1
 115   3                       }
 116   2      //               else
C51 COMPILER V7.50   DRIVER                                                                10/19/2006 09:37:29 PAGE 3   

 117   2      //               {
 118   2      //                   g_ucIRRecDataType = REC_ERROR;
 119   2      //                   ucIrDetectStatus = IR_STANDBY;                        
 120   2      //               }
 121   2                       ucIrRecBitCount++;
 122   2                      if((ucIrRecBitCount % 8) == 0)
 123   2                    {
 124   3                         irRecBuffer[(ucIrRecBitCount/8) - 1] = ucIrRecByte;
 125   3                       ucIrRecByte = 0;
 126   3                         if(ucIrRecBitCount == 16)//get first 2 bytes 
 127   3                         {
 128   4                                      if((irRecBuffer[0] == 0xAA) && (irRecBuffer[1] == 0x55))
 129   4                                      {
 130   5                                              g_ucIRRecDataType = REC_SEND_READY;
 131   5                                              g_bIRDetect = 1;
 132   5                                      }
 133   4                                      else if((irRecBuffer[0]== 0xAB) && (irRecBuffer[1] == 0x54))
 134   4                                      {
 135   5                                              g_ucIRRecDataType = REC_DATA_ADDRESS;
 136   5                                              ucNeedRecByteNum = 5;                   
 137   5                                      }
 138   4                                      else if((irRecBuffer[0] == 0xAC) && (irRecBuffer[1] == 0x53))
 139   4                                      {
 140   5                                              g_bIRDetect = 1;                           
 141   5                                              g_ucIRRecDataType = REC_REC_READY;
 142   5                                      }
 143   4                                      else if((irRecBuffer[0] == 0xAD) && (irRecBuffer[1] == 0x52))
 144   4                                      {
 145   5                                              g_ucIRRecDataType = REC_N_BYTES;
 146   5                                      }
 147   4                                      else if((irRecBuffer[0] == 0xAE) && (irRecBuffer[1] == 0x51))
 148   4                                      {
 149   5                                              g_ucIRRecDataType = REC_16_BYTES;
 150   5                                              ucNeedRecByteNum = 19;
 151   5                                      }
 152   4                                      else
 153   4                                      {
 154   5                                      //g_ucIRRecDataType = REC_ERROR;                 //test 
 155   5                                              ucIrDetectStatus = IR_STANDBY;                      
 156   5                                      }
 157   4                       }
 158   3                      else if((ucIrRecBitCount == 24) && ( g_ucIRRecDataType == REC_N_BYTES))
 159   3                      {
 160   4                              ucNeedRecByteNum  = irRecBuffer[2] + 4;
 161   4                      }
 162   3                      else if(ucIrRecBitCount == (ucNeedRecByteNum*8))
 163   3                      {
 164   4                              g_bIRDetect = 1;                   
 165   4                      }
 166   3                      if(g_bIRDetect)
 167   3                      {
 168   4                              ucIrDetectStatus = IR_STANDBY;
 169   4                      }
 170   3      
 171   3                }
 172   2                      break;
 173   2      
 174   2                      default:
 175   2                      break;  
 176   2              }
 177   1              //20060616>>>confirm
 178   1               EX1 = 1;
C51 COMPILER V7.50   DRIVER                                                                10/19/2006 09:37:29 PAGE 4   

 179   1               IT1 =  1;
 180   1               //20060616<<<
 181   1      }
 182          /* ======================================= */
 183          
 184          void ISR_Timer1(void) interrupt 3 using 2
 185          {
 186   1              TF1 = 0; //Clear Flag
 187   1      
 188   1              if(ucIrSendDelayType != DELAY_FINISH)
 189   1              {
 190   2                  ucIrSendDelayType = DELAY_FINISH;
 191   2              }
 192   1              
 193   1            if(ucIrDetectStatus != IR_STANDBY)
 194   1            {
 195   2                ucIrDetectStatus = IR_STANDBY;
 196   2                 TR1 = 0;
 197   2            }
 198   1      }
 199          
 200          /* ======================================= */
 201          void ISR_I2c(void) interrupt 6 using 1
 202          {
 203   1         switch(I2STAT)
 204   1         {
 205   2          case 0x08://A START condition has been transmitted
 206   2              I2DAT = NV_DEVICE_ADDR;//for nv ,first start must write device address with write
 207   2              STA = 0;
 208   2              break;
 209   2      
 210   2          case 0x10://A repeated START condition has been transmitted
 211   2               if(NvI2c.Direction == NV_WRITE)
 212   2                    I2DAT = NV_DEVICE_ADDR;
 213   2               else
 214   2                    I2DAT = NV_DEVICE_ADDR + 1;
 215   2      
 216   2              STA = 0;                
 217   2            break;
 218   2      //master transmit       
 219   2          case 0x18://SLA+W has been transmitted;ACK has been received
 220   2              I2DAT = HIGHBYTE(g_wCloneNVAddress);
 221   2              NvI2c.RetryCount = 0;
 222   2              break;
 223   2          case 0x20://SLA+W has been transmitted; NOT-ACK has been received
 224   2             if(NvI2c.RetryCount > 3)
 225   2             {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -