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

📄 lyj.s

📁 /*红外解码的方法 NEC格式 upd6121 1、9Ms的高电平启动头
💻 S
📖 第 1 页 / 共 2 页
字号:
	.dbline 281
; 		    if (iLow>40)//4.5ms
	ldi R24,40
	lds R2,_iLow
	cp R24,R2
	brsh L60
	.dbline 282
; 			  {  iIrMode=2;
	.dbline 282
	ldi R24,2
	sts _iIrMode,R24
	.dbline 283
; 			     iBitCount=0;
	clr R2
	sts _iBitCount,R2
	.dbline 284
; 				 iIrData[0]=0;iIrData[1]=0;iIrData[2]=0;iIrData[3]=0;
	sts _iIrData,R2
	.dbline 284
	sts _iIrData+1,R2
	.dbline 284
	sts _iIrData+2,R2
	.dbline 284
	sts _iIrData+3,R2
	.dbline 285
; 				 iHight=1;
	ldi R24,1
	sts _iHight,R24
	.dbline 287
; 				 //bCmdOk=1;iCmd=10;//Test..
; 			  }
	rjmp L40
L60:
	.dbline 289
; 			else
; 			  { iIrMode=0;
	.dbline 289
	clr R2
	sts _iIrMode,R2
	.dbline 291
; 			    //确实只发送一次,后面的是按键保持信号,无按键码信息
; 			  }
	.dbline 292
; 		    return;
	rjmp L40
X5:
	.dbline 295
; 		  }
; 	      
; 	      break;
L65:
	.dbline 299
; 		  
; 	 case 2://接收用户码和按键码,共32Bit
; 	      
; 	      if ((iPreBit==1)&&(iNowBit==0))//1->0
	lds R24,_iPreBit
	cpi R24,1
	brne L66
	tst R18
	brne L66
	.dbline 300
; 		  { iPreBit=0;
	.dbline 300
	clr R2
	sts _iPreBit,R2
	.dbline 301
; 		    iLow=1;
	ldi R24,1
	sts _iLow,R24
	.dbline 302
; 		  }
L66:
	.dbline 303
; 		  if ((iPreBit==0)&&(iNowBit==1))//0->1
	lds R2,_iPreBit
	tst R2
	breq X11
	rjmp L48
X11:
	cpi R18,1
	breq X12
	rjmp L48
X12:
	.dbline 304
; 		  { iPreBit=1;
	.dbline 304
	ldi R24,1
	sts _iPreBit,R24
	.dbline 306
	lds R2,_iHight
	mov R3,R2
	add R3,R2
	lds R2,_iLow
	cp R3,R2
	brsh L70
	.dbline 306
	clr R18
	rjmp L71
L70:
	.dbline 306
; 		    //已经接收1Bit,根据占空比判断01
; 			if (iLow>(iHight+iHight)) iNowBit=0;else iNowBit=1;
	ldi R18,1
L71:
	.dbline 309
; 
; 			//Bit0在前,右移位
; 			iPos=iBitCount/8;
	lds R16,_iBitCount
	lsr R16
	lsr R16
	lsr R16
	.dbline 310
; 			iIrData[iPos]=iIrData[iPos]>>1;
	ldi R24,<_iIrData
	ldi R25,>_iIrData
	mov R2,R16
	clr R3
	add R2,R24
	adc R3,R25
	movw R30,R2
	ldd R4,z+0
	lsr R4
	std z+0,R4
	.dbline 311
; 			if (iNowBit==1) iIrData[iPos]|=0x80;
	cpi R18,1
	brne L72
	.dbline 311
	mov R2,R16
	clr R3
	add R2,R24
	adc R3,R25
	movw R30,R2
	ldd R24,z+0
	ori R24,128
	std z+0,R24
L72:
	.dbline 313
; 			
; 			iBitCount++;
	lds R24,_iBitCount
	subi R24,255    ; addi 1
	sts _iBitCount,R24
	.dbline 314
; 			if (iBitCount>=32)
	cpi R24,32
	brlo L74
	.dbline 315
; 			{ bIrCmdOk=1;
	.dbline 315
	ldi R24,1
	sts _bIrCmdOk,R24
	.dbline 316
; 			  iIrMode=0;
	clr R2
	sts _iIrMode,R2
	.dbline 318
; 			  //bCmdOk=1;iCmd=10;//Test..
; 			}
L74:
	.dbline 320
; 			
; 			iHight=1;//must!
	ldi R24,1
	sts _iHight,R24
	.dbline 321
; 		  }
	.dbline 322
; 	 	  break;
	rjmp L48
L47:
	.dbline 324
	clr R2
	sts _iIrMode,R2
	.dbline 325
L48:
	.dbline -2
L40:
	.dbline 0 ; func end
	ret
	.dbsym r iPos 16 c
	.dbsym r iNowBit 18 c
	.dbend
	.dbfunc e CheckIrCmd _CheckIrCmd fV
;              i -> R16
	.even
_CheckIrCmd::
	.dbline -1
	.dbline 331
;      default:
; 	 	  iIrMode=0;
; 		  break;
;    }
; }
; 
; //对红外命令判断操作
; void CheckIrCmd()
; {uchar i;
	.dbline 332
;    bIrCmdOk=0;
	clr R2
	sts _bIrCmdOk,R2
	.dbline 333
;    if (iIrData[0]!=(~iIrData[1]))
	lds R2,_iIrData+1
	com R2
	lds R3,_iIrData
	cp R3,R2
	breq L77
	.dbline 334
;    { return;//custom码就不对
	.dbline 334
	rjmp L76
L77:
	.dbline 336
;    }
;    if (iIrData[2]!=(~iIrData[3])) return;//按键码不对
	lds R2,_iIrData+3
	com R2
	lds R3,_iIrData+2
	cp R3,R2
	breq L80
	.dbline 336
	rjmp L76
L80:
	.dbline 338
;    
;    i=iIrData[2]&0x0f;
	lds R16,_iIrData+2
	andi R16,15
	.dbline 340
;    //BeepN(i&0x0f);
;    switch (i)
	clr R17
	cpi R16,2
	ldi R30,0
	cpc R17,R30
	breq L91
	cpi R16,2
	ldi R30,0
	cpc R17,R30
	brlt L85
L93:
	cpi R16,7
	ldi R30,0
	cpc R17,R30
	breq L90
	cpi R16,10
	ldi R30,0
	cpc R17,R30
	breq L88
	cpi R16,11
	ldi R30,0
	cpc R17,R30
	breq L89
	cpi R16,14
	ldi R30,0
	cpc R17,R30
	breq L92
	rjmp L85
X13:
	.dbline 341
;    { case IRSTOP:
L88:
	.dbline 342
;         bCmdOk=1;iCmd=CSTOP;
	ldi R24,1
	sts _bCmdOk,R24
	.dbline 342
	sts _iCmd,R24
	.dbline 343
;         break;
	rjmp L86
L89:
	.dbline 345
; 	 case IRUP:
; 	    bCmdOk=1;iCmd=CUP;
	ldi R24,1
	sts _bCmdOk,R24
	.dbline 345
	ldi R24,2
	sts _iCmd,R24
	.dbline 346
; 		break;
	rjmp L86
L90:
	.dbline 348
; 	 case IRDOWN:
; 	    bCmdOk=1;iCmd=CDOWN;
	ldi R24,1
	sts _bCmdOk,R24
	.dbline 348
	ldi R24,3
	sts _iCmd,R24
	.dbline 349
; 		break;
	rjmp L86
L91:
	.dbline 351
; 	 case IRLAMP:
; 	    bCmdOk=1;iCmd=CLAMP;
	ldi R24,1
	sts _bCmdOk,R24
	.dbline 351
	ldi R24,4
	sts _iCmd,R24
	.dbline 352
; 		break;
	rjmp L86
L92:
	.dbline 354
; 	 case IRDIS:
; 	    bCmdOk=1;iCmd=CDIS;
	ldi R24,1
	sts _bCmdOk,R24
	.dbline 354
	ldi R24,5
	sts _iCmd,R24
	.dbline 355
; 	    break;
L85:
L86:
	.dbline -2
L76:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e CheckStop _CheckStop fV
	.even
_CheckStop::
	.dbline -1
	.dbline 361
;    }
; }
; 
; //判断限位开关
; void CheckStop()
; {
	.dbline 362
;    if (((PIND&(1<<UPX))==0) || ((PIND&(1<<DWNX))==0)) 
	sbis 0x10,2
	rjmp L97
	sbic 0x10,3
	rjmp L95
L97:
	.dbline 363
	.dbline 363
	rcall _MotorStop
	.dbline 364
	ldi R16,2
	ldi R17,0
	rcall _BeepN
	.dbline 365
L95:
	.dbline -2
L94:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e TimerFunc _TimerFunc fV
	.even
_TimerFunc::
	.dbline -1
	.dbline 370
;        { MotorStop();
; 	     BeepN(2);
; 		 }
; 	 
; }
; 
; void TimerFunc()
; {
	.dbline 371
;    bTimer=0;
	clr R2
	sts _bTimer,R2
	.dbline 372
;    CPL(PORTB,LED);
	ldi R24,2
	in R2,0x18
	eor R2,R24
	out 0x18,R2
	.dbline 376
;    //CPL(PORTC,BEEP);
;    //CPL(PORTC,LAMP);
;    //CPL(PORTD,DOWN);
;    WDR();//clear WDT
	wdr
	.dbline -2
L98:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e MotorUp _MotorUp fV
	.even
_MotorUp::
	.dbline -1
	.dbline 380
; }
; 
; void MotorUp()
; {
	.dbline 381
;    CLR(PORTD,UP);
	cbi 0x12,5
	.dbline 382
;    SET(PORTD,DOWN);
	sbi 0x12,6
	.dbline -2
L99:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e MotorDown _MotorDown fV
	.even
_MotorDown::
	.dbline -1
	.dbline 386
; }
; 
; void MotorDown()
; {
	.dbline 387
;    SET(PORTD,UP);
	sbi 0x12,5
	.dbline 388
;    CLR(PORTD,DOWN);
	cbi 0x12,6
	.dbline -2
L100:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e MotorStop _MotorStop fV
	.even
_MotorStop::
	.dbline -1
	.dbline 392
; }
; 
; void MotorStop()
; {
	.dbline 393
;    CLR(PORTD,UP);
	cbi 0x12,5
	.dbline 394
;    CLR(PORTD,DOWN);
	cbi 0x12,6
	.dbline -2
L101:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LampOn _LampOn fV
	.even
_LampOn::
	.dbline -1
	.dbline 398
; }
; 
; void LampOn()
; {
	.dbline 399
;   SET(PORTC,LAMP);
	sbi 0x15,2
	.dbline -2
L102:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LampOff _LampOff fV
	.even
_LampOff::
	.dbline -1
	.dbline 403
; }
; 
; void LampOff()
; {
	.dbline 404
;   CLR(PORTC,LAMP);
	cbi 0x15,2
	.dbline -2
L103:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LampOnOff _LampOnOff fV
	.even
_LampOnOff::
	.dbline -1
	.dbline 408
; }
; 
; void LampOnOff()
; {
	.dbline 409
;    CPL(PORTC,LAMP);
	ldi R24,4
	in R2,0x15
	eor R2,R24
	out 0x15,R2
	.dbline -2
L104:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e DisOn _DisOn fV
	.even
_DisOn::
	.dbline -1
	.dbline 413
; }
; 
; void DisOn()
; {
	.dbline 414
;   SET(PORTC,DIS);
	sbi 0x15,3
	.dbline -2
L105:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e DisOff _DisOff fV
	.even
_DisOff::
	.dbline -1
	.dbline 418
; }
; 
; void DisOff()
; {
	.dbline 419
;   CLR(PORTC,DIS);
	cbi 0x15,3
	.dbline -2
L106:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e DisOnOff _DisOnOff fV
	.even
_DisOnOff::
	.dbline -1
	.dbline 423
; }
; 
; void DisOnOff()
; {
	.dbline 424
;   CPL(PORTC,DIS);
	ldi R24,8
	in R2,0x15
	eor R2,R24
	out 0x15,R2
	.dbline -2
L107:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e BeepOn _BeepOn fV
	.even
_BeepOn::
	.dbline -1
	.dbline 428
; }
; 
; void BeepOn()
; {
	.dbline 429
;   SET(PORTC,BEEP);
	sbi 0x15,0
	.dbline -2
L108:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e BeepOff _BeepOff fV
	.even
_BeepOff::
	.dbline -1
	.dbline 433
; }
; 
; void BeepOff()
; {
	.dbline 434
;    CLR(PORTC,BEEP);
	cbi 0x15,0
	.dbline -2
L109:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Beep _Beep fV
	.even
_Beep::
	.dbline -1
	.dbline 438
; }
; 
; void Beep()
; {
	.dbline 439
;    SET(PORTC,BEEP);
	sbi 0x15,0
	.dbline 440
;    DelayMs(100);
	ldi R16,100
	rcall _DelayMs
	.dbline 441
;    CLR(PORTC,BEEP);
	cbi 0x15,0
	.dbline -2
L110:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e BeepN _BeepN fV
;              i -> R20
;              n -> R22
	.even
_BeepN::
	rcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 445
; }
; 
; void BeepN(uchar n)
; {uchar i;
	.dbline 446
;    for (i=0;i<n;i++)
	clr R20
	rjmp L115
L112:
	.dbline 447
	.dbline 447
	rcall _Beep
	.dbline 448
	wdr
	.dbline 449
	ldi R16,100
	rcall _DelayMs
	.dbline 450
L113:
	.dbline 446
	inc R20
L115:
	.dbline 446
	cp R20,R22
	brlo L112
	.dbline -2
L111:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r n 22 c
	.dbend
	.dbfunc e ReadSN _ReadSN fV
;              i -> <dead>
;            Buf -> y+2
	.even
_ReadSN::
	sbiw R28,10
	.dbline -1
	.dbline 455
;    { Beep();
;      WDR();
;      DelayMs(100);
;    }
;  
; }
; 
; void ReadSN()
; {  char Buf[8],i;
	.dbline 456
;    EEPROMReadBytes( 0x20, Buf,8 );
	ldi R24,8
	ldi R25,0
	std y+1,R25
	std y+0,R24
	movw R18,R28
	subi R18,254  ; offset = 2
	sbci R19,255
	ldi R16,32
	ldi R17,0
	rcall _EEPROMReadBytes
	.dbline -2
L116:
	adiw R28,10
	.dbline 0 ; func end
	ret
	.dbsym l i 3 c
	.dbsym l Buf 2 A[8:8]c
	.dbend
	.dbfunc e WriteSN _WriteSN fV
;              i -> <dead>
;            Buf -> y+2
	.even
_WriteSN::
	sbiw R28,10
	.dbline -1
	.dbline 460
; }
; 
; void WriteSN()
; {char Buf[8],i;
	.dbline 462
; 
;   EEPROMWriteBytes(0x20, Buf, 8);
	ldi R24,8
	ldi R25,0
	std y+1,R25
	std y+0,R24
	movw R18,R28
	subi R18,254  ; offset = 2
	sbci R19,255
	ldi R16,32
	ldi R17,0
	rcall _EEPROMWriteBytes
	.dbline -2
L117:
	adiw R28,10
	.dbline 0 ; func end
	ret
	.dbsym l i 3 c
	.dbsym l Buf 2 A[8:8]c
	.dbend
	.dbfunc e SystemIni _SystemIni fV
	.even
_SystemIni::
	.dbline -1
	.dbline 468
;    
; }
; 
; 
; void SystemIni(void)
; {
	.dbline 469
;   ReadSN();
	rcall _ReadSN
	.dbline 470
;   T0Cnt=T0N;
	ldi R24,10
	sts _T0Cnt,R24
	.dbline -2
L118:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e DelayMs _DelayMs fV
;              i -> R20
;             ms -> R22
	.even
_DelayMs::
	rcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 475
; }
; 
; 
; void DelayMs(char ms)
; {char i;
	.dbline 476
; for (i=0;i<ms;i++)
	clr R20
	rjmp L123
L120:
	.dbline 477
	.dbline 477
	ldi R16,1000
	ldi R17,3
	rcall _DelayUs
	.dbline 478
L121:
	.dbline 476
	inc R20
L123:
	.dbline 476
	cp R20,R22
	brlo L120
	.dbline 479
;   {DelayUs(1000);
;   }
;   return;
	.dbline -2
L119:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r ms 22 c
	.dbend
	.dbfunc e DelayUs _DelayUs fV
;              i -> R20,R21
;             us -> R16,R17
	.even
_DelayUs::
	rcall push_gset1
	.dbline -1
	.dbline 483
; }
; 
; void DelayUs(uint us)
; {uint i;
	.dbline 485
;   
;   for (i=0;i<us;i++)
	clr R20
	clr R21
	rjmp L128
L125:
	.dbline 486
	.dbline 486
	nop
	.dbline 486
	nop
	.dbline 486
	nop
	.dbline 486
	nop
	.dbline 487
L126:
	.dbline 485
	subi R20,255  ; offset = 1
	sbci R21,255
L128:
	.dbline 485
	cp R20,R16
	cpc R21,R17
	brlo L125
	.dbline -2
L124:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r us 16 i
	.dbend
	.area bss(ram, con, rel)
	.dbfile D:\IccAvr\Pei\LYJ\LYJ.c
_iIrData::
	.blkb 4
	.dbsym e iIrData _iIrData A[4:4]c
_iBitCount::
	.blkb 1
	.dbsym e iBitCount _iBitCount c
_iIrMode::
	.blkb 1
	.dbsym e iIrMode _iIrMode c
_iLow::
	.blkb 1
	.dbsym e iLow _iLow c
_iHight::
	.blkb 1
	.dbsym e iHight _iHight c
_iPreBit::
	.blkb 1
	.dbsym e iPreBit _iPreBit c
_iCmd::
	.blkb 1
	.dbsym e iCmd _iCmd c
_T0Cnt::
	.blkb 1
	.dbsym e T0Cnt _T0Cnt c
_bIrCmdOk::
	.blkb 1
	.dbsym e bIrCmdOk _bIrCmdOk c
_bCmdOk::
	.blkb 1
	.dbsym e bCmdOk _bCmdOk c
_bTimer::
	.blkb 1
	.dbsym e bTimer _bTimer c
_b20ms::
	.blkb 1
	.dbsym e b20ms _b20ms c

⌨️ 快捷键说明

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