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

📄 ir.lst

📁 这是我在学习红外遥控接收时写的代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 129   4                                              if(RedBit!=RedData7) goto RClear;
 130   4                                              break;
 131   4                                      case 8: /*检验重复发送的第9 位数据*/
 132   4                                              if(RedBit!=RedData8) goto RClear;
 133   4                                              break;
 134   4                                      case 9: /*检验重复发送的第10 位数据*/
 135   4                                              if(RedBit!=RedData9) goto RClear;
 136   4                                              break;
 137   4                                      case 10: /*检验重复发送的第11 位数据*/
 138   4                                              if(RedBit!=RedData10) goto RClear;
 139   4                                              break;
 140   4                                      case 11: /*检验重复发送的第12 位数据*/
 141   4                                              if(RedBit!=RedData11) goto RClear;
 142   4                                              RedMsg=1; /*接受到经过检验正确的编码后置位遥控消息*/
 143   4                                              RedBit=0; /*复位接收位*/
 144   4                                              RSend=0; /*复位重新发送标志*/
 145   4                                              RedRead=0; /*复位接收过程标志*/
 146   4                                              RedCon=0; /*复位载波计数*/
 147   4                                              return;
 148   4                                      default: /*重复发送的数据多于12 位时判断为错误*/
 149   4                                              goto RClear;
 150   4                              }
 151   3                      }
 152   2                      else
 153   2                      {
 154   3                              switch(RedDataL&0xF)
 155   3                              {
 156   4                                      case 0: /*保存首次发送的第1 位数据*/
 157   4                                              RedData0=RedBit;
 158   4                                              break;
 159   4                                      case 1: /*保存首次发送的第2 位数据*/
 160   4                                              RedData1=RedBit;
 161   4                                              break;
 162   4                                      case 2: /*保存首次发送的第3 位数据*/
 163   4                                              RedData2=RedBit;
 164   4                                              break;
 165   4                                      case 3: /*保存首次发送的第4 位数据*/
 166   4                                              RedData3=RedBit;
 167   4                                              break;
 168   4                                      case 4: /*保存首次发送的第5 位数据*/
 169   4                                              RedData4=RedBit;
 170   4                                              break;
 171   4                                      case 5: /*保存首次发送的第6 位数据*/
 172   4                                              RedData5=RedBit;
 173   4                                              break;
 174   4                                      case 6: /*保存首次发送的第7 位数据*/
 175   4                                              RedData6=RedBit;
 176   4                                              break;
 177   4                                      case 7: /*保存首次发送的第8 位数据*/
 178   4                                              RedData7=RedBit;
 179   4                                              break;
C51 COMPILER V7.00  IR                                                                     08/21/2006 21:45:38 PAGE 4   

 180   4                                      case 8: /*保存首次发送的第9 位数据*/
 181   4                                              RedData8=RedBit;
 182   4                                              break;
 183   4                                      case 9: /*保存首次发送的第10 位数据*/
 184   4                                              RedData9=RedBit;
 185   4                                              break;
 186   4                                      case 10: /*保存首次发送的第11 位数据*/
 187   4                                              RedData10=RedBit;
 188   4                                              break;
 189   4                                      case 11: /*保存首次发送的第12 位数据*/
 190   4                                              RedData11=RedBit;
 191   4                                              break;
 192   4                                      default: /*首次发送的数据多于12 位时判断为错误*/
 193   4                                              goto RClear;
 194   4                              }
 195   3                      }
 196   2                      RedDataL++; /*位位移加1*/
 197   2                      RedBit=0; /*复位接收位*/
 198   2                      RedRead=0; /*复位接收过程标志*/
 199   2                      RedCon=0; /*复位载波计数*/
 200   2                      nTimer=423; /*用定时140a 检测同步信号208a*/
 201   2                      TF1=0; /*复位定时器T01 益出标志*/
 202   2                      ET1=1;/*启动定时器*/
 203   2              } 
 204   1              else if(RSend)
 205   1              { /*在位接收没有结束时发生定时中断需要复位接收信息(同步)*/
 206   2                      RClear:
 207   2                      RedDataL=0; /*复位红外数据*/
 208   2                      RedDataH=0; /*复位红外数据*/
 209   2                      RedBit=0; /*复位接收位*/
 210   2                      RedRead=0; /*复位接收过程标志*/
 211   2                      RSend=0; /*复位重新发送标志*/
 212   2                      RedCon=0; /*复位载波计数*/
 213   2                      ET1=0; /*关闭T01 定时*/
 214   2              }
 215   1      }
 216          
 217          void ir_init()
 218          {
 219   1              /*看门狗陷阱复位时无需初始化*/
 220   1                      Message=0; /*无消息*/
 221   1                      State=0; /*正常复位无任何状态*/
 222   1      
 223   1                      return;
 224   1      }
 225          
 226          unsigned char ir_read()
 227          {
 228   1                      EX1= RedControl; /*设置遥控中断INT1 */  
 229   1                      if(RedMsg) 
 230   1                      { /*执行遥控指令*/
 231   2                              EX1=0; /*在指令没有处理完之前不能重复中断*/
 232   2                              switch(RedDataH)
 233   2                              { 
 234   3                                      /*这里加入红外指令的控制过程*/
 235   3                                      case 0x82: /*Channel 1*/
 236   3                                              break;
 237   3                                      case 0xA0: /*Channel 2*/
 238   3                                              break;
 239   3                              }
 240   2                              EX1=1;
 241   2                              RedDataL=0; /*复位红外数据*/
C51 COMPILER V7.00  IR                                                                     08/21/2006 21:45:38 PAGE 5   

 242   2                              RedDataH=0; /*复位红外数据*/
 243   2                              RedMsg=0;
 244   2                      } /*复位红外遥控消息*/
 245   1      
 246   1                      return SOMEBODY_COMMING;
 247   1      }
 248          
 249          #endif


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