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

📄 lyj.lis

📁 /*红外解码的方法 NEC格式 upd6121 1、9Ms的高电平启动头
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 01A6           ; }
 01A6           ; 
 01A6           ; //红外解码
 01A6           ; void CheckIR()
 01A6           ; {uchar iNowBit,iPos;
 01A6                   .dbline 242
 01A6 2224              clr R2
 01A8 80B3              in R24,0x10
 01AA 8078              andi R24,128
 01AC 2816              cp R2,R24
 01AE 10F4              brsh L41
 01B0                   .dbline 242
 01B0 2227              clr R18
 01B2 01C0              rjmp L42
 01B4           L41:
 01B4                   .dbline 242
 01B4           ;    
 01B4           ;    if ((PIND&(1<<IR))>0) iNowBit=0;else iNowBit=1;//先反相
 01B4 21E0              ldi R18,1
 01B6           L42:
 01B6                   .dbline 245
 01B6           ;    
 01B6           ;    //把信号持续的处理作为公共处理
 01B6           ;    if ((iPreBit==1)&&(iNowBit==1))//hight++
 01B6 80910800          lds R24,_iPreBit
 01BA 8130              cpi R24,1
 01BC 41F4              brne L43
 01BE 2130              cpi R18,1
 01C0 31F4              brne L43
 01C2                   .dbline 246
 01C2           ;                 { iHight++;
 01C2                   .dbline 246
 01C2 80910700          lds R24,_iHight
 01C6 8F5F              subi R24,255    ; addi 1
 01C8 80930700          sts _iHight,R24
 01CC                   .dbline 247
 01CC           ;                   return;
 01CC BAC0              rjmp L40
 01CE           L43:
 01CE                   .dbline 249
 01CE           ;                 }
 01CE           ;    if ((iPreBit==0)&&(iNowBit==0))//low++
 01CE 20900800          lds R2,_iPreBit
 01D2 2220              tst R2
 01D4 41F4              brne L45
 01D6 2223              tst R18
 01D8 31F4              brne L45
 01DA                   .dbline 250
 01DA           ;                 { iLow++;
 01DA                   .dbline 250
 01DA 80910600          lds R24,_iLow
 01DE 8F5F              subi R24,255    ; addi 1
 01E0 80930600          sts _iLow,R24
 01E4                   .dbline 251
 01E4           ;                   return;
 01E4 AEC0              rjmp L40
 01E6           L45:
 01E6                   .dbline 254
 01E6           ;                 }
 01E6           ;                 
 01E6           ;    switch (iIrMode)
 01E6 00910500          lds R16,_iIrMode
 01EA 1127              clr R17
 01EC 0030              cpi R16,0
 01EE 0107              cpc R16,R17
 01F0 51F0              breq L50
 01F2           X2:
 01F2 0130              cpi R16,1
 01F4 E0E0              ldi R30,0
 01F6 1E07              cpc R17,R30
 01F8 79F1              breq L57
 01FA 0230              cpi R16,2
 01FC E0E0              ldi R30,0
 01FE 1E07              cpc R17,R30
 0200 09F4              brne X6
 0202 50C0              rjmp L65
 0204           X6:
 0204 9BC0              rjmp L47
 0206           X3:
 0206                   .dbline 255
 0206           ;    {
 0206           L50:
 0206                   .dbline 257
 0206           ;      case 0://等待9ms的高电平
 0206           ;             if ((iPreBit==0)&&(iNowBit==1))//0->1:start
 0206 20900800          lds R2,_iPreBit
 020A 2220              tst R2
 020C 41F4              brne L51
 020E 2130              cpi R18,1
 0210 31F4              brne L51
 0212                   .dbline 258
 0212           ;                 { iPreBit=1;
 0212                   .dbline 258
 0212 81E0              ldi R24,1
 0214 80930800          sts _iPreBit,R24
 0218                   .dbline 259
 0218           ;                   iHight=1;
 0218 80930700          sts _iHight,R24
 021C                   .dbline 260
 021C           ;                       return;
 021C 92C0              rjmp L40
 021E           L51:
 021E                   .dbline 263
 021E           ;                 }
 021E           ;                 
 021E           ;                 if ((iPreBit==1)&&(iNowBit==0))//1->0
 021E 80910800          lds R24,_iPreBit
 0222 8130              cpi R24,1
 0224 09F0              breq X7
 0226 8DC0              rjmp L48
 0228           X7:
 0228 2223              tst R18
 022A 09F0              breq X8
 022C 8AC0              rjmp L48
 022E           X8:
 022E                   .dbline 264
 022E           ;                 { iPreBit=0;
 022E                   .dbline 264
 022E 2224              clr R2
 0230 20920800          sts _iPreBit,R2
 0234                   .dbline 265
 0234           ;                   if (iHight>85)//9.0ms
 0234 85E5              ldi R24,85
 0236 20900700          lds R2,_iHight
 023A 8215              cp R24,R2
 023C 48F4              brsh L55
 023E                   .dbline 266
 023E           ;                         { iIrMode=1;
 023E                   .dbline 266
 023E 81E0              ldi R24,1
 0240 80930500          sts _iIrMode,R24
 0244                   .dbline 267
 0244           ;                           iLow=1;
 0244 80930600          sts _iLow,R24
 0248                   .dbline 268
 0248           ;                               iHight=0;
 0248 2224              clr R2
 024A 20920700          sts _iHight,R2
 024E                   .dbline 270
 024E           ;                           //bCmdOk=1;iCmd=10;//Test..
 024E           ;                         }
 024E 79C0              rjmp L40
 0250           L55:
 0250                   .dbline 272
 0250           ;                       else
 0250           ;                          {iHight=0;//reset
 0250                   .dbline 272
 0250 2224              clr R2
 0252 20920700          sts _iHight,R2
 0256                   .dbline 273
 0256           ;                          }
 0256                   .dbline 274
 0256           ;                       return;
 0256 75C0              rjmp L40
 0258           X4:
 0258                   .dbline 276
 0258           ;                 }
 0258           ;             break;
 0258           L57:
 0258                   .dbline 279
 0258           ;                 
 0258           ;        case 1://等待4.5ms的低电平
 0258           ;             if ((iPreBit==0)&&(iNowBit==1))//0->1
 0258 20900800          lds R2,_iPreBit
 025C 2220              tst R2
 025E 09F0              breq X9
 0260 70C0              rjmp L48
 0262           X9:
 0262 2130              cpi R18,1
 0264 09F0              breq X10
 0266 6DC0              rjmp L48
 0268           X10:
 0268                   .dbline 280
 0268           ;                 { iPreBit=1;
 0268                   .dbline 280
 0268 81E0              ldi R24,1
 026A 80930800          sts _iPreBit,R24
 026E                   .dbline 281
 026E           ;                   if (iLow>40)//4.5ms
 026E 88E2              ldi R24,40
 0270 20900600          lds R2,_iLow
 0274 8215              cp R24,R2
 0276 90F4              brsh L60
 0278                   .dbline 282
 0278           ;                         {  iIrMode=2;
 0278                   .dbline 282
 0278 82E0              ldi R24,2
 027A 80930500          sts _iIrMode,R24
 027E                   .dbline 283
 027E           ;                            iBitCount=0;
 027E 2224              clr R2
 0280 20920400          sts _iBitCount,R2
 0284                   .dbline 284
 0284           ;                                iIrData[0]=0;iIrData[1]=0;iIrData[2]=0;iIrData[3]=0;
 0284 20920000          sts _iIrData,R2
 0288                   .dbline 284
 0288 20920100          sts _iIrData+1,R2
 028C                   .dbline 284
 028C 20920200          sts _iIrData+2,R2
 0290                   .dbline 284
 0290 20920300          sts _iIrData+3,R2
 0294                   .dbline 285
 0294           ;                                iHight=1;
 0294 81E0              ldi R24,1
 0296 80930700          sts _iHight,R24
 029A                   .dbline 287
 029A           ;                                //bCmdOk=1;iCmd=10;//Test..
 029A           ;                         }
 029A 53C0              rjmp L40
 029C           L60:
 029C                   .dbline 289
 029C           ;                       else
 029C           ;                         { iIrMode=0;
 029C                   .dbline 289
 029C 2224              clr R2
 029E 20920500          sts _iIrMode,R2
 02A2                   .dbline 291
 02A2           ;                           //确实只发送一次,后面的是按键保持信号,无按键码信息
 02A2           ;                         }
 02A2                   .dbline 292
 02A2           ;                   return;
 02A2 4FC0              rjmp L40
 02A4           X5:
 02A4                   .dbline 295
 02A4           ;                 }
 02A4           ;             
 02A4           ;             break;
 02A4           L65:
 02A4                   .dbline 299
 02A4           ;                 
 02A4           ;        case 2://接收用户码和按键码,共32Bit
 02A4           ;             
 02A4           ;             if ((iPreBit==1)&&(iNowBit==0))//1->0
 02A4 80910800          lds R24,_iPreBit
 02A8 8130              cpi R24,1
 02AA 41F4              brne L66
 02AC 2223              tst R18
 02AE 31F4              brne L66
 02B0                   .dbline 300
 02B0           ;                 { iPreBit=0;
 02B0                   .dbline 300
 02B0 2224              clr R2
 02B2 20920800          sts _iPreBit,R2
 02B6                   .dbline 301
 02B6           ;                   iLow=1;
 02B6 81E0              ldi R24,1
 02B8 80930600          sts _iLow,R24
 02BC                   .dbline 302
 02BC           ;                 }
 02BC           L66:
 02BC                   .dbline 303
 02BC           ;                 if ((iPreBit==0)&&(iNowBit==1))//0->1
 02BC 20900800          lds R2,_iPreBit
 02C0 2220              tst R2
 02C2 09F0              breq X11
 02C4 3EC0              rjmp L48
 02C6           X11:
 02C6 2130              cpi R18,1
 02C8 09F0              breq X12
 02CA 3BC0              rjmp L48
 02CC           X12:
 02CC                   .dbline 304
 02CC           ;                 { iPreBit=1;
 02CC                   .dbline 304
 02CC 81E0              ldi R24,1
 02CE 80930800          sts _iPreBit,R24
 02D2                   .dbline 306
 02D2 20900700          lds R2,_iHight
 02D6 322C              mov R3,R2
 02D8 320C              add R3,R2
 02DA 20900600          lds R2,_iLow
 02DE 3214              cp R3,R2
 02E0 10F4              brsh L70
 02E2                   .dbline 306
 02E2 2227              clr R18
 02E4 01C0              rjmp L71
 02E6           L70:
 02E6                   .dbline 306
 02E6           ;                   //已经接收1Bit,根据占空比判断01
 02E6           ;                       if (iLow>(iHight+iHight)) iNowBit=0;else iNowBit=1;
 02E6 21E0              ldi R18,1
 02E8           L71:
 02E8                   .dbline 309
 02E8           ; 
 02E8           ;                       //Bit0在前,右移位
 02E8           ;                       iPos=iBitCount/8;
 02E8 00910400          lds R16,_iBitCount
 02EC 0695              lsr R16
 02EE 0695              lsr R16
 02F0 0695              lsr R16
 02F2                   .dbline 310
 02F2           ;                       iIrData[iPos]=iIrData[iPos]>>1;
 02F2 80E0              ldi R24,<_iIrData
 02F4 90E0              ldi R25,>_iIrData
 02F6 202E              mov R2,R16
 02F8 3324              clr R3
 02FA 280E              add R2,R24
 02FC 391E              adc R3,R25
 02FE F101              movw R30,R2
 0300 4080              ldd R4,z+0
 0302 4694              lsr R4
 0304 4082              std z+0,R4
 0306                   .dbline 311
 0306           ;                       if (iNowBit==1) iIrData[iPos]|=0x80;
 0306 2130              cpi R18,1
 0308 41F4              brne L72
 030A                   .dbline 311
 030A 202E              mov R2,R16
 030C 3324              clr R3
 030E 280E              add R2,R24
 0310 391E              adc R3,R25
 0312 F101              movw R30,R2
 0314 8081              ldd R24,z+0
 0316 8068              ori R24,128
 0318 8083              std z+0,R24
 031A           L72:
 031A                   .dbline 313
 031A           ;                       
 031A           ;                       iBitCount++;
 031A 80910400          lds R24,_iBitCount
 031E 8F5F              subi R24,255    ; addi 1
 0320 80930400          sts _iBitCount,R24
 0324                   .dbline 314
 0324           ;                       if (iBitCount>=32)
 0324 8032              cpi R24,32
 0326 30F0              brlo L74
 0328                   .dbline 315
 0328           ;                       { bIrCmdOk=1;
 0328                   .dbline 315
 0328 81E0              ldi R24,1
 032A 80930B00          sts _bIrCmdOk,R24
 032E                   .dbline 316
 032E           ;                         iIrMode=0;
 032E 2224              clr R2
 0330 20920500          sts _iIrMode,R2
 0334                   .dbline 318
 0334           ;                         //bCmdOk=1;iCmd=10;//Test..
 0334           ;                       }
 0334           L74:
 0334                   .dbline 320
 0334           ;                       
 0334           ;                       iHight=1;//must!
 0334 81E0              ldi R24,1
 0336 80930700          sts _iHight,R24
 033A                   .dbline 321
 033A           ;                 }
 033A                   .dbline 322
 033A           ;                 break;
 033A 03C0              rjmp L48
 033C           L47:
 033C                   .dbline 324
 033C 2224              clr R2
 033E 20920500          sts _iIrMode,R2
 0342                   .dbline 325
 0342           L48:

⌨️ 快捷键说明

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