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

📄 ir_data.s

📁 51单片机的
💻 S
字号:
	.module IR_DATA.C
	.area text(rom, con, rel)
	.dbfile D:\WORK\ELECTR~1\proteus\M167LE~1\c\IR_DATA.C
	.dbfunc e CheckIR _CheckIR fV
	.even
_CheckIR::
	.dbline -1
	.dbline 6
; #include <iom16v.h>
; #include <macros.h>
; #include "IR_DATA.H"
; //红外解码
; void CheckIR()
; {
	.dbline 8
;    //uchar iNowBit,iPos;
;   if ((PIND&(1<<IR))>0)    //ICP INPUT CHECK
	clr R2
	in R24,0x10
	andi R24,64
	cp R2,R24
	brsh L2
	.dbline 9
;        iNowBit=0;
	sts _iNowBit,R2
	xjmp L3
L2:
	.dbline 11
;    else 
;      iNowBit=1;//先反相
	ldi R24,1
	sts _iNowBit,R24
L3:
	.dbline 14
;    
;    //把信号持续的处理作为公共处理
;    if ((iPreBit==1)&&(iNowBit==1))//hight++  
	lds R24,_iPreBit
	cpi R24,1
	brne L4
	lds R24,_iNowBit
	cpi R24,1
	brne L4
	.dbline 15
; 		  { iHight++;
	.dbline 15
	.dbline 16
; 		    return;
	lds R24,_iHight
	subi R24,255    ; addi 1
	sts _iHight,R24
	xjmp L1
L4:
	.dbline 18
; 		  }
;    if ((iPreBit==0)&&(iNowBit==0))//low++
	lds R2,_iPreBit
	tst R2
	brne L6
	lds R2,_iNowBit
	tst R2
	brne L6
	.dbline 19
; 		  { iLow++;
	.dbline 19
	.dbline 20
; 		    return;
	lds R24,_iLow
	subi R24,255    ; addi 1
	sts _iLow,R24
	xjmp L1
L6:
	.dbline 23
; 		  }
; 		  
;    switch (iIrMode)
	lds R16,_iIrMode
	clr R17
	cpi R16,0
	cpc R16,R17
	breq L11
X0:
	cpi R16,1
	ldi R30,0
	cpc R17,R30
	breq L18
	cpi R16,2
	ldi R30,0
	cpc R17,R30
	brne X4
	xjmp L26
X4:
	xjmp L8
X1:
	.dbline 24
;    {
L11:
	.dbline 26
;      case 0://等待9ms的高电平
; 	      if ((iPreBit==0)&&(iNowBit==1))//0->1:start
	lds R2,_iPreBit
	tst R2
	brne L12
	lds R24,_iNowBit
	cpi R24,1
	brne L12
	.dbline 27
; 		  { iPreBit=1;
	.dbline 27
	.dbline 28
; 		    iHight=1;
	.dbline 29
; 			return;
	ldi R24,1
	sts _iPreBit,R24
	sts _iHight,R24
	xjmp L1
L12:
	.dbline 32
; 		  }
; 		  
; 		  if ((iPreBit==1)&&(iNowBit==0))//1->0
	lds R24,_iPreBit
	cpi R24,1
	breq X5
	xjmp L9
X5:
	lds R2,_iNowBit
	tst R2
	breq X6
	xjmp L9
X6:
	.dbline 33
; 		  { iPreBit=0;
	.dbline 33
	.dbline 34
; 		    if (iHight>12)//1.30ms
	clr R2
	sts _iPreBit,R2
	ldi R24,12
	lds R2,_iHight
	cp R24,R2
	brsh L16
	.dbline 35
; 			  { iIrMode=1;
	.dbline 35
	.dbline 36
; 			    iLow=1;
	.dbline 37
; 				iHight=0;
	ldi R24,1
	sts _iIrMode,R24
	sts _iLow,R24
	clr R2
	sts _iHight,R2
	.dbline 39
; 			    //bCmdOk=1;iCmd=10;//Test..
; 			  }
	xjmp L1
L16:
	.dbline 41
; 			else
; 			   {iHight=0;//reset
	.dbline 41
	clr R2
	sts _iHight,R2
	.dbline 42
; 			   }
	.dbline 43
; 			return;
	xjmp L1
X2:
	.dbline 45
; 		  }
; 	      break;
L18:
	.dbline 48
; 		  
; 	 case 1://等待1.6ms的低电平
; 	      if ((iPreBit==0)&&(iNowBit==1))//0->1
	lds R2,_iPreBit
	tst R2
	breq X7
	xjmp L9
X7:
	lds R24,_iNowBit
	cpi R24,1
	breq X8
	xjmp L9
X8:
	.dbline 49
; 		  { iPreBit=1;
	.dbline 49
	.dbline 50
; 		    if (iLow>15)//1.6ms
	ldi R24,1
	sts _iPreBit,R24
	ldi R24,15
	lds R2,_iLow
	cp R24,R2
	brsh L21
	.dbline 51
; 			  {  iIrMode=2;
	.dbline 51
	.dbline 52
; 			     iBitCount=0;
	.dbline 53
; 				 iIrData[0]=0;iIrData[1]=0;iIrData[2]=0;iIrData[3]=0;
	.dbline 53
	ldi R24,2
	sts _iIrMode,R24
	clr R2
	sts _iBitCount,R2
	sts _iIrData,R2
	sts _iIrData+1,R2
	.dbline 53
	sts _iIrData+2,R2
	.dbline 53
	sts _iIrData+3,R2
	.dbline 54
; 				 iHight=1;
	ldi R24,1
	sts _iHight,R24
	.dbline 56
; 				 //bCmdOk=1;iCmd=10;//Test..
; 			  }
	xjmp L1
L21:
	.dbline 58
; 			else
; 			  { iIrMode=0;
	.dbline 58
	clr R2
	sts _iIrMode,R2
	.dbline 60
; 			    //确实只发送一次,后面的是按键保持信号,无按键码信息
; 			  }
	.dbline 61
; 		    return;
	xjmp L1
X3:
	.dbline 64
; 		  }
; 	      
; 	      break;
L26:
	.dbline 68
; 		  
; 	 case 2://接收用户码和按键码,共32Bit
; 	      
; 	      if ((iPreBit==1)&&(iNowBit==0))//1->0
	lds R24,_iPreBit
	cpi R24,1
	brne L27
	lds R2,_iNowBit
	tst R2
	brne L27
	.dbline 69
; 		  { iPreBit=0;
	.dbline 69
	.dbline 70
; 		    iLow=1;
	clr R2
	sts _iPreBit,R2
	ldi R24,1
	sts _iLow,R24
	.dbline 71
; 		  }
L27:
	.dbline 72
; 		  if ((iPreBit==0)&&(iNowBit==1))//0->1
	lds R2,_iPreBit
	tst R2
	breq X9
	xjmp L9
X9:
	lds R24,_iNowBit
	cpi R24,1
	breq X10
	xjmp L9
X10:
	.dbline 73
; 		  { iPreBit=1;
	.dbline 73
	.dbline 75
	ldi R24,1
	sts _iPreBit,R24
	lds R2,_iHight
	mov R3,R2
	add R3,R2
	lds R2,_iLow
	cp R3,R2
	brsh L31
	.dbline 75
	clr R2
	sts _iNowBit,R2
	xjmp L32
L31:
	.dbline 75
; 		    //已经接收1Bit,根据占空比判断01
; 			if (iLow>(iHight+iHight)) iNowBit=0;else iNowBit=1;
	ldi R24,1
	sts _iNowBit,R24
L32:
	.dbline 78
; 
; 			//Bit0在前,右移位
; 			iPos=iBitCount/4;
	.dbline 79
; 			iIrData[iPos]=iIrData[iPos]>>1;
	lds R2,_iBitCount
	lsr R2
	lsr R2
	sts _iPos,R2
	ldi R24,<_iIrData
	ldi R25,>_iIrData
	clr R3
	add R2,R24
	adc R3,R25
	movw R30,R2
	ldd R4,z+0
	lsr R4
	std z+0,R4
	.dbline 80
; 	            if (iNowBit==1)  iIrData[iPos]|=0x80;
	lds R24,_iNowBit
	cpi R24,1
	brne L33
	.dbline 80
	ldi R24,<_iIrData
	ldi R25,>_iIrData
	lds R2,_iPos
	clr R3
	add R2,R24
	adc R3,R25
	movw R30,R2
	ldd R24,z+0
	ori R24,128
	std z+0,R24
L33:
	.dbline 82
; 			
; 			iBitCount++;
	.dbline 83
; 			if (iBitCount>=24)
	lds R24,_iBitCount
	subi R24,255    ; addi 1
	sts _iBitCount,R24
	cpi R24,24
	brlo L35
	.dbline 84
; 			{ bIrCmdOk=1;
	.dbline 84
	.dbline 85
; 			  iIrMode=0;
	ldi R24,1
	sts _bIrCmdOk,R24
	clr R2
	sts _iIrMode,R2
	.dbline 87
; 			  //bCmdOk=1;iCmd=10;//Test..
; 			}
L35:
	.dbline 89
; 			
; 			iHight=1;//must!
	ldi R24,1
	sts _iHight,R24
	.dbline 90
; 		  }
	.dbline 91
; 	 	  break;
	xjmp L9
L8:
	.dbline 93
	clr R2
	sts _iIrMode,R2
	.dbline 94
L9:
	.dbline -2
	.dbline 96
;      default:
; 	 	  iIrMode=0;
; 		  break;
;    }
; }
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e display_times _display_times fV
	.even
_display_times::
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile D:\WORK\ELECTR~1\proteus\M167LE~1\c\IR_DATA.C
_iIrData::
	.blkb 6
	.dbfile D:\WORK\ELECTR~1\proteus\M167LE~1\c/IR_DATA.H
	.dbsym e iIrData _iIrData A[6:6]c
_bIrCmdOk::
	.blkb 1
	.dbsym e bIrCmdOk _bIrCmdOk 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
_iNowBit::
	.blkb 1
	.dbsym e iNowBit _iNowBit c
_iPreBit::
	.blkb 1
	.dbsym e iPreBit _iPreBit c
_iPos::
	.blkb 1
	.dbsym e iPos _iPos c

⌨️ 快捷键说明

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