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

📄 lyj.lst

📁 /*红外解码的方法 NEC格式 upd6121 1、9Ms的高电平启动头
💻 LST
📖 第 1 页 / 共 3 页
字号:
    00EB D171      RCALL	_BeepN
(0214) 		   break;
    00EC C017      RJMP	0x0104
(0215) 	   case CLAMP:
(0216) 	       if ((PORTC&(1<<LAMP))==0)
    00ED 99AA      SBIC	0x15,2
    00EE C005      RJMP	0x00F4
(0217) 		     { LampOn();
    00EF D152      RCALL	_LampOn
(0218) 			   BeepN(1);
    00F0 E001      LDI	R16,1
    00F1 E010      LDI	R17,0
    00F2 D16A      RCALL	_BeepN
(0219) 			 }
    00F3 C010      RJMP	0x0104
(0220) 		   else
(0221) 		     { LampOff();
    00F4 D14F      RCALL	_LampOff
(0222) 			   BeepN(2);
    00F5 E002      LDI	R16,2
    00F6 E010      LDI	R17,0
    00F7 D165      RCALL	_BeepN
(0223) 			 }
(0224) 		   break;
    00F8 C00B      RJMP	0x0104
(0225) 	   case CDIS:
(0226) 	       if ((PORTC&(1<<DIS))==0)
    00F9 99AB      SBIC	0x15,3
    00FA C005      RJMP	0x0100
(0227) 		     { DisOn();
    00FB D14F      RCALL	_DisOn
(0228) 			   BeepN(1);
    00FC E001      LDI	R16,1
    00FD E010      LDI	R17,0
    00FE D15E      RCALL	_BeepN
(0229) 			 }
    00FF C004      RJMP	0x0104
(0230) 		   else
(0231) 		     { DisOff();
    0100 D14C      RCALL	_DisOff
(0232) 			   BeepN(2);
    0101 E002      LDI	R16,2
    0102 E010      LDI	R17,0
    0103 D159      RCALL	_BeepN
(0233) 			 }
(0234) 		   break;
    0104 D1AE      RCALL	pop_gset1
    0105 9508      RET
(0235) 	}
(0236) }
(0237) 
(0238) //红外解码
(0239) void CheckIR()
(0240) {uchar iNowBit,iPos;
(0241)    
(0242)    if ((PIND&(1<<IR))>0) iNowBit=0;else iNowBit=1;//先反相
_CheckIR:
  iPos                 --> R16
  iNowBit              --> R18
    0106 2422      CLR	R2
    0107 B380      IN	R24,0x10
    0108 7880      ANDI	R24,0x80
    0109 1628      CP	R2,R24
    010A F410      BCC	0x010D
    010B 2722      CLR	R18
    010C C001      RJMP	0x010E
    010D E021      LDI	R18,1
(0243)    
(0244)    //把信号持续的处理作为公共处理
(0245)    if ((iPreBit==1)&&(iNowBit==1))//hight++
    010E 91800068  LDS	R24,iPreBit
    0110 3081      CPI	R24,1
    0111 F441      BNE	0x011A
    0112 3021      CPI	R18,1
    0113 F431      BNE	0x011A
(0246) 		  { iHight++;
    0114 91800067  LDS	R24,iHight
    0116 5F8F      SUBI	R24,0xFF
    0117 93800067  STS	iHight,R24
(0247) 		    return;
    0119 C0BA      RJMP	0x01D4
(0248) 		  }
(0249)    if ((iPreBit==0)&&(iNowBit==0))//low++
    011A 90200068  LDS	R2,iPreBit
    011C 2022      TST	R2
    011D F441      BNE	0x0126
    011E 2322      TST	R18
    011F F431      BNE	0x0126
(0250) 		  { iLow++;
    0120 91800066  LDS	R24,iLow
    0122 5F8F      SUBI	R24,0xFF
    0123 93800066  STS	iLow,R24
(0251) 		    return;
    0125 C0AE      RJMP	0x01D4
(0252) 		  }
(0253) 		  
(0254)    switch (iIrMode)
    0126 91000065  LDS	R16,iIrMode
    0128 2711      CLR	R17
    0129 3000      CPI	R16,0
    012A 0701      CPC	R16,R17
    012B F051      BEQ	0x0136
    012C 3001      CPI	R16,1
    012D E0E0      LDI	R30,0
    012E 071E      CPC	R17,R30
    012F F179      BEQ	0x015F
    0130 3002      CPI	R16,2
    0131 E0E0      LDI	R30,0
    0132 071E      CPC	R17,R30
    0133 F409      BNE	0x0135
    0134 C050      RJMP	0x0185
    0135 C09B      RJMP	0x01D1
(0255)    {
(0256)      case 0://等待9ms的高电平
(0257) 	      if ((iPreBit==0)&&(iNowBit==1))//0->1:start
    0136 90200068  LDS	R2,iPreBit
    0138 2022      TST	R2
    0139 F441      BNE	0x0142
    013A 3021      CPI	R18,1
    013B F431      BNE	0x0142
(0258) 		  { iPreBit=1;
    013C E081      LDI	R24,1
    013D 93800068  STS	iPreBit,R24
(0259) 		    iHight=1;
    013F 93800067  STS	iHight,R24
(0260) 			return;
    0141 C092      RJMP	0x01D4
(0261) 		  }
(0262) 		  
(0263) 		  if ((iPreBit==1)&&(iNowBit==0))//1->0
    0142 91800068  LDS	R24,iPreBit
    0144 3081      CPI	R24,1
    0145 F009      BEQ	0x0147
    0146 C08D      RJMP	0x01D4
    0147 2322      TST	R18
    0148 F009      BEQ	0x014A
    0149 C08A      RJMP	0x01D4
(0264) 		  { iPreBit=0;
    014A 2422      CLR	R2
    014B 92200068  STS	iPreBit,R2
(0265) 		    if (iHight>85)//9.0ms
    014D E585      LDI	R24,0x55
    014E 90200067  LDS	R2,iHight
    0150 1582      CP	R24,R2
    0151 F448      BCC	0x015B
(0266) 			  { iIrMode=1;
    0152 E081      LDI	R24,1
    0153 93800065  STS	iIrMode,R24
(0267) 			    iLow=1;
    0155 93800066  STS	iLow,R24
(0268) 				iHight=0;
    0157 2422      CLR	R2
    0158 92200067  STS	iHight,R2
(0269) 			    //bCmdOk=1;iCmd=10;//Test..
(0270) 			  }
    015A C079      RJMP	0x01D4
(0271) 			else
(0272) 			   {iHight=0;//reset
    015B 2422      CLR	R2
    015C 92200067  STS	iHight,R2
(0273) 			   }
(0274) 			return;
    015E C075      RJMP	0x01D4
(0275) 		  }
(0276) 	      break;
(0277) 		  
(0278) 	 case 1://等待4.5ms的低电平
(0279) 	      if ((iPreBit==0)&&(iNowBit==1))//0->1
    015F 90200068  LDS	R2,iPreBit
    0161 2022      TST	R2
    0162 F009      BEQ	0x0164
    0163 C070      RJMP	0x01D4
    0164 3021      CPI	R18,1
    0165 F009      BEQ	0x0167
    0166 C06D      RJMP	0x01D4
(0280) 		  { iPreBit=1;
    0167 E081      LDI	R24,1
    0168 93800068  STS	iPreBit,R24
(0281) 		    if (iLow>40)//4.5ms
    016A E288      LDI	R24,0x28
    016B 90200066  LDS	R2,iLow
    016D 1582      CP	R24,R2
    016E F490      BCC	0x0181
(0282) 			  {  iIrMode=2;
    016F E082      LDI	R24,2
    0170 93800065  STS	iIrMode,R24
(0283) 			     iBitCount=0;
    0172 2422      CLR	R2
    0173 92200064  STS	iBitCount,R2
(0284) 				 iIrData[0]=0;iIrData[1]=0;iIrData[2]=0;iIrData[3]=0;
    0175 92200060  STS	iIrData,R2
    0177 92200061  STS	iIrData+1,R2
    0179 92200062  STS	iIrData+2,R2
    017B 92200063  STS	iIrData+3,R2
(0285) 				 iHight=1;
    017D E081      LDI	R24,1
    017E 93800067  STS	iHight,R24
(0286) 				 //bCmdOk=1;iCmd=10;//Test..
(0287) 			  }
    0180 C053      RJMP	0x01D4
(0288) 			else
(0289) 			  { iIrMode=0;
    0181 2422      CLR	R2
    0182 92200065  STS	iIrMode,R2
(0290) 			    //确实只发送一次,后面的是按键保持信号,无按键码信息
(0291) 			  }
(0292) 		    return;
    0184 C04F      RJMP	0x01D4
(0293) 		  }
(0294) 	      
(0295) 	      break;
(0296) 		  
(0297) 	 case 2://接收用户码和按键码,共32Bit
(0298) 	      
(0299) 	      if ((iPreBit==1)&&(iNowBit==0))//1->0
    0185 91800068  LDS	R24,iPreBit
    0187 3081      CPI	R24,1
    0188 F441      BNE	0x0191
    0189 2322      TST	R18
    018A F431      BNE	0x0191
(0300) 		  { iPreBit=0;
    018B 2422      CLR	R2
    018C 92200068  STS	iPreBit,R2
(0301) 		    iLow=1;
    018E E081      LDI	R24,1
    018F 93800066  STS	iLow,R24
(0302) 		  }
(0303) 		  if ((iPreBit==0)&&(iNowBit==1))//0->1
    0191 90200068  LDS	R2,iPreBit
    0193 2022      TST	R2
    0194 F009      BEQ	0x0196
    0195 C03E      RJMP	0x01D4
    0196 3021      CPI	R18,1
    0197 F009      BEQ	0x0199
    0198 C03B      RJMP	0x01D4
(0304) 		  { iPreBit=1;
    0199 E081      LDI	R24,1
    019A 93800068  STS	iPreBit,R24
(0305) 		    //已经接收1Bit,根据占空比判断01
(0306) 			if (iLow>(iHight+iHight)) iNowBit=0;else iNowBit=1;
    019C 90200067  LDS	R2,iHight
    019E 2C32      MOV	R3,R2
    019F 0C32      ADD	R3,R2
    01A0 90200066  LDS	R2,iLow
    01A2 1432      CP	R3,R2
    01A3 F410      BCC	0x01A6
    01A4 2722      CLR	R18
    01A5 C001      RJMP	0x01A7
    01A6 E021      LDI	R18,1
(0307) 
(0308) 			//Bit0在前,右移位
(0309) 			iPos=iBitCount/8;
    01A7 91000064  LDS	R16,iBitCount
    01A9 9506      LSR	R16
    01AA 9506      LSR	R16
    01AB 9506      LSR	R16
(0310) 			iIrData[iPos]=iIrData[iPos]>>1;
    01AC E680      LDI	R24,0x60
    01AD E090      LDI	R25,0
    01AE 2E20      MOV	R2,R16
    01AF 2433      CLR	R3
    01B0 0E28      ADD	R2,R24
    01B1 1E39      ADC	R3,R25
    01B2 01F1      MOVW	R30,R2
    01B3 8040      LDD	R4,Z+0
    01B4 9446      LSR	R4
    01B5 8240      STD	Z+0,R4
(0311) 			if (iNowBit==1) iIrData[iPos]|=0x80;
    01B6 3021      CPI	R18,1
    01B7 F441      BNE	0x01C0
    01B8 2E20      MOV	R2,R16
    01B9 2433      CLR	R3
    01BA 0E28      ADD	R2,R24
    01BB 1E39      ADC	R3,R25
    01BC 01F1      MOVW	R30,R2
    01BD 8180      LDD	R24,Z+0
    01BE 6880      ORI	R24,0x80
    01BF 8380      STD	Z+0,R24
(0312) 			
(0313) 			iBitCount++;
    01C0 91800064  LDS	R24,iBitCount
    01C2 5F8F      SUBI	R24,0xFF
    01C3 93800064  STS	iBitCount,R24
(0314) 			if (iBitCount>=32)
    01C5 3280      CPI	R24,0x20
    01C6 F030      BCS	0x01CD
(0315) 			{ bIrCmdOk=1;
    01C7 E081      LDI	R24,1
    01C8 9380006B  STS	bIrCmdOk,R24
(0316) 			  iIrMode=0;
    01CA 2422      CLR	R2
    01CB 92200065  STS	iIrMode,R2
(0317) 			  //bCmdOk=1;iCmd=10;//Test..
(0318) 			}
(0319) 			
(0320) 			iHight=1;//must!
    01CD E081      LDI	R24,1
    01CE 93800067  STS	iHight,R24
(0321) 		  }
(0322) 	 	  break;
    01D0 C003      RJMP	0x01D4
(0323)      default:
(0324) 	 	  iIrMode=0;
    01D1 2422      CLR	R2
    01D2 92200065  STS	iIrMode,R2
(0325) 		  break;
    01D4 9508      RET
(0326)    }
(0327) }
(0328) 
(0329) //对红外命令判断操作
(0330) void CheckIrCmd()
(0331) {uchar i;
(0332)    bIrCmdOk=0;
_CheckIrCmd:
  i                    --> R16
    01D5 2422      CLR	R2
    01D6 9220006B  STS	bIrCmdOk,R2
(0333)    if (iIrData[0]!=(~iIrData[1]))
    01D8 90200061  LDS	R2,iIrData+1
    01DA 9420      COM	R2
    01DB 90300060  LDS	R3,iIrData
    01DD 1432      CP	R3,R2
    01DE F009      BEQ	0x01E0
(0334)    { return;//custom码就不对
    01DF C046      RJMP	0x0226
(0335)    }
(0336)    if (iIrData[2]!=(~iIrData[3])) return;//按键码不对
    01E0 90200063  LDS	R2,iIrData+3
    01E2 9420      COM	R2
    01E3 90300062  LDS	R3,iIrData+2
    01E5 1432      CP	R3,R2
    01E6 F009      BEQ	0x01E8
    01E7 C03E      RJMP	0x0226
(0337)    
(0338)    i=iIrData[2]&0x0f;
    01E8 91000062  LDS	R16,iIrData+2
    01EA 700F      ANDI	R16,0xF
(0339)    //BeepN(i&0x0f);
(0340)    switch (i)
    01EB 2711      CLR	R17
    01EC 3002      CPI	R16,2
    01ED E0E0      LDI	R30,0
    01EE 071E      CPC	R17,R30
    01EF F149      BEQ	0x0219
    01F0 3002      CPI	R16,2
    01F1 E0E0      LDI	R30,0
    01F2 071E      CPC	R17,R30
    01F3 F194      BLT	0x0226
    01F4 3007      CPI	R16,7
    01F5 E0E0      LDI	R30,0
    01F6 071E      CPC	R17,R30
    01F7 F0D1      BEQ	0x0212
    01F8 300A      CPI	R16,0xA
    01F9 E0E0      LDI	R30,0
    01FA 071E      CPC	R17,R30
    01FB F049      BEQ	0x0205
    01FC 300B      CPI	R16,0xB
    01FD E0E0      LDI	R30,0
    01FE 071E      CPC	R17,R30
    01FF F059      BEQ	0x020B
    0200 300E      CPI	R16,0xE
    0201 E0E0      LDI	R30,0
    0202 071E      CPC	R17,R30
    0203 F0E1      BEQ	0x0220
    0204 C021      RJMP	0x0226
(0341)    { case IRSTOP:
(0342)         bCmdOk=1;iCmd=CSTOP;
    0205 E081      LDI	R24,1
    0206 9380006C  STS	bCmdOk,R24
    0208 93800069  STS	iCmd,R24
(0343)         break;
    020A C01B      RJMP	0x0226
(0344) 	 case IRUP:
(0345) 	    bCmdOk=1;iCmd=CUP;
    020B E081      LDI	R24,1
    020C 9380006C  STS	bCmdOk,R24
    020E E082      LDI	R24,2
    020F 93800069  STS	iCmd,R24
(0346) 		break;
    0211 C014      RJMP	0x0226
(0347) 	 case IRDOWN:
(0348) 	    bCmdOk=1;iCmd=CDOWN;
    0212 E081      LDI	R24,1
    0213 9380006C  STS	bCmdOk,R24
    0215 E083      LDI	R24,3
    0216 93800069  STS	iCmd,R24
(0349) 		break;
    0218 C00D      RJMP	0x0226
(0350) 	 case IRLAMP:
(0351) 	    bCmdOk=1;iCmd=CLAMP;
    0219 E081      LDI	R24,1
    021A 9380006C  STS	bCmdOk,R24
    021C E084      LDI	R24,4
    021D 93800069  STS	iCmd,R24
(0352) 		break;
    021F C006      RJMP	0x0226
(0353) 	 case IRDIS:
(0354) 	    bCmdOk=1;iCmd=CDIS;
    0220 E081      LDI	R24,1
    0221 9380006C  STS	bCmdOk,R24
    0223 E085      LDI	R24,5
    0224 93800069  STS	iCmd,R24
(0355) 	    break;
    0226 9508      RET
(0356)    }
(0357) }
(0358) 
(0359) //判断限位开关
(0360) void CheckStop()
(0361) {
(0362)    if (((PIND&(1<<UPX))==0) || ((PIND&(1<<DWNX))==0)) 
_CheckStop:
    0227 9B82      SBIS	0x10,2
    0228 C002      RJMP	0x022B
    0229 9983      SBIC	0x10,3
    022A C004      RJMP	0x022F
(0363)        { MotorStop();
    022B D013      RCALL	_MotorStop
(0364) 	     BeepN(2);
    022C E002      LDI	R16,2
    022D E010      LDI	R17,0
    022E D02E      RCALL	_BeepN
(0365) 		 }
    022F 9508      RET
(0366) 	 
(0367) }
(0368) 
(0369) void TimerFunc()
(0370) {
(0371)    bTimer=0;
_TimerFunc:
    0230 2422      CLR	R2
    0231 9220006D  STS	bTimer,R2
(0372)    CPL(PORTB,LED);
    0233 E082      LDI	R24,2
    0234 B228      IN	R2,0x18

⌨️ 快捷键说明

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