📄 lyj.lis
字号:
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 + -