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

📄 int_timer.lst

📁 一个用MCU将SHARP 遥控码转为NEC码的小程序
💻 LST
字号:
C51 COMPILER V7.06   INT_TIMER                                                             04/28/2008 19:15:52 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE INT_TIMER
OBJECT MODULE PLACED IN .\bin\int_timer.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE int_timer.c BROWSE DEBUG OBJECTEXTEND OBJECT(.\bin\int_timer.obj)

stmt level    source

   1          #include <reg51.h>
   2          #include <stdio.h>
   3          #include <main_define.h>
   4          
   5           uint IR_RECEIVE_COMMAND=0x00;
   6           bit IR_STATS;// static bit IR_STATS;
   7          
   8          
   9          // ------------IR 外部 INT0 中断服务程序------------------
  10          #if(NEC_IR_TYPE)
              void int0Remote() interrupt 0 // IR 外部 INT0 中断服务程序
              {
              static uint oldFall;
              uint temp,newFall,times;
              
              static char bitcnt;
              static uint data0=0,data1;// data0 存用户码,data1 存IR命令
              
              times=(TH0<<8)+TL0;
              newFall=times;
              temp=newFall-oldFall; //计算脉冲加间隔的时间
              oldFall=newFall;
              //printf("t=%d,w=%d\n",times,temp);
              if(temp>1024 && temp<1225) // "0"信号
                      {
                      temp=0;
              //      printf("zero\n");
                      }
              else if(temp>2145 && temp<2345) //"1"信号
                      {
                      temp=1;
              //      printf("one\n");
                      }
                      else if(temp>13400 && temp<13600) //header信号
                              {
                              bitcnt=0;
                              data0=0;
                              data1=0;
                              return; //返回,等待下次开始接收
                      }
              else ///干扰信号
              {
                  return;
              }
              bitcnt++;
              if(bitcnt<16) //开始接收前16位
              {
              data0=data0|(uint)temp;
              data0=data0<<1;
              }
              else if(bitcnt==16)
              {
              data0=data0|(uint)temp;
              }
              else if(bitcnt<32) //开始接收后16位
C51 COMPILER V7.06   INT_TIMER                                                             04/28/2008 19:15:52 PAGE 2   

              {
              data1=data1|(uint)temp;
              data1=data1<<1;
              }
              else if(bitcnt==32) //接收完最后一位
              {
              data1=data1|(uint)temp;
              //printf("ir=%x,%x\n",data0,data1);
              }
              
              }
              #endif
  68          
  69          #if(SHARP_IR_TYPE)
  70          void int0Remote() interrupt 0 // IR 外部 INT0 中断服务程序
  71          {
  72   1      static uint oldFall;
  73   1      uint temp,newFall,times;
  74   1      
  75   1      static char bitcnt;
  76   1      static uint data0=0,data1;// data0 存用户码,data1 存IR命令
  77   1      
  78   1      times=(TH0<<8)+TL0;
  79   1      newFall=times;
  80   1      temp=newFall-oldFall; //计算脉冲加间隔的时间
  81   1      oldFall=newFall;
  82   1      if(temp>730 && temp<1330) // "0"信号1.03ms
  83   1              {
  84   2              temp=0;
  85   2              }
  86   1              else if(temp>1770 && temp<2370) //"1"信号 2.07ms
  87   1                      {
  88   2                      temp=1;
  89   2                      }
  90   1                      else ///干扰信号
  91   1                              {
  92   2                                 return;
  93   2                              }
  94   1      bitcnt++;
  95   1      //printf("bit%d\n",bitcnt);
  96   1      if(bitcnt<5) //开始接收前5位用户码
  97   1              {
  98   2              data0=data0|(uint)temp;
  99   2              data0=data0<<1;
 100   2              }
 101   1      else if(bitcnt==5)//将5位用户码存到data0
 102   1                      {
 103   2                      data0=data0|(uint)temp;
 104   2                      }
 105   1              else if(bitcnt<13) //开始接收后8位命令
 106   1                              {
 107   2                              data1=data1|(uint)temp;
 108   2                              data1=data1<<1;
 109   2                              }
 110   1                      else if(bitcnt==13) //接收完最后一位命令,将8位命令存到data1
 111   1                                      {
 112   2                                      data1=data1|(uint)temp;
 113   2                                      }
 114   1                              else if(bitcnt==15) //接收完最后两位尾缀
 115   1                                              {
 116   2                                              if (IR_RECEIVE_SYS_CODE==data0)
 117   2                                                      {
C51 COMPILER V7.06   INT_TIMER                                                             04/28/2008 19:15:52 PAGE 3   

 118   3                                                      IR_RECEIVE_COMMAND=data1;
 119   3      //                                              printf("in_ir=%x\n",IR_RECEIVE_COMMAND);
 120   3                                                      IR_STATS=IR_OK;
 121   3                                                      }
 122   2                                              data0=0;
 123   2                                              data1=0;
 124   2                                              bitcnt=0;
 125   2                                              delay_xms(40);    // 连发码间隔时间
 126   2                                              }
 127   1      
 128   1      }
 129          #endif
 130          // ------------IR 外部 INT0 中断服务程序------------------
 131          
 132          // ------------ 外部 INT1 中断服务程序------------------
 133          #if SUPPORT_INT1
              void int1() interrupt 2// INT1 外部中断服务程序
              {
              LED_RED=1;
              delay_xms(200);
              LED_RED=0;
              delay_xms(200);
              printf("int1\n");
              }
              #endif
 143          // ------------ 外部 INT1 中断服务程序------------------
 144          


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