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

📄 timer.lst

📁 万能遥控器解码
💻 LST
📖 第 1 页 / 共 2 页
字号:
      BB 9180 0060 LDS	R24,c
      BD 9190 0061 LDS	R25,c+1
      BF 9601      ADIW	R24,1
      C0 9390 0061 STS	c+1,R25
      C2 9380 0060 STS	c,R24
(0073)  if((PIND&HW)!=HW_OLD)          
      C4 9020 0072 LDS	R2,HW_OLD
      C6 B380      IN	R24,0x10
      C7 7084      ANDI	R24,4
      C8 1582      CP	R24,R2
      C9 F101      BEQ	0x00EA
(0074)    {  	 
(0075)     HW_OLD=(PIND&HW);
      CA B380      IN	R24,0x10
      CB 7084      ANDI	R24,4
      CC 9380 0072 STS	HW_OLD,R24
(0076)     m=c;    //每次翻转将定时器中断的次数的值给m,用于记录电平状态的时间  ,m的值会跟随c的值不断更新     
      CE 9020 0060 LDS	R2,c
      D0 9030 0061 LDS	R3,c+1
      D2 9230 0063 STS	m+1,R3
      D4 9220 0062 STS	m,R2
(0077) 	f++;    //记录翻转的次数
      D6 9180 0068 LDS	R24,f
      D8 9190 0069 LDS	R25,f+1
      DA 9601      ADIW	R24,1
      DB 9390 0069 STS	f+1,R25
      DD 9380 0068 STS	f,R24
(0078) 	x=f;
      DF 011C      MOVW	R2,R24
      E0 9230 0065 STS	x+1,R3
      E2 9220 0064 STS	x,R2
(0079) 	c=0;
      E4 2422      CLR	R2
      E5 2433      CLR	R3
      E6 9230 0061 STS	c+1,R3
      E8 9220 0060 STS	c,R2
(0080)    }
(0081)     if(x>3&&x%2==0)    //发生第四次翻转时红外的脉冲数据开始有效
      EA 9020 0064 LDS	R2,x
      EC 9030 0065 LDS	R3,x+1
      EE E083      LDI	R24,3
      EF E090      LDI	R25,0
      F0 1582      CP	R24,R2
      F1 0593      CPC	R25,R3
      F2 F008      BCS	0x00F4
      F3 C04D      RJMP	0x0141
      F4 FC20      SBRC	R2,0
      F5 C04B      RJMP	0x0141
(0082) 	   {x=0;
      F6 2422      CLR	R2
      F7 2433      CLR	R3
      F8 9230 0065 STS	x+1,R3
      FA 9220 0064 STS	x,R2
(0083) 	    flag++;        //记录存入数组中某一数据的位数,存入8位时应该清零
      FC 9180 0066 LDS	R24,flag
      FE 9190 0067 LDS	R25,flag+1
     100 9601      ADIW	R24,1
     101 9390 0067 STS	flag+1,R25
     103 9380 0066 STS	flag,R24
(0084) 	    IRCode[IRCON]<<=1;   
     105 E68C      LDI	R24,0x6C
     106 E090      LDI	R25,0
     107 9020 006A LDS	R2,IRCON
     109 9030 006B LDS	R3,IRCON+1
     10B 0C22      LSL	R2
     10C 1C33      ROL	R3
     10D 0E28      ADD	R2,R24
     10E 1E39      ADC	R3,R25
     10F 01F1      MOVW	R30,R2
     110 8020      LDD	R2,Z+0
     111 8031      LDD	R3,Z+1
     112 0C22      LSL	R2
     113 1C33      ROL	R3
     114 8231      STD	Z+1,R3
     115 8220      STD	Z+0,R2
(0085) 		if(m>12) IRCode[IRCON]|=0x01;//为1是左移后最后一位写1。m的值为一个范围,在7和16之间
     116 E08C      LDI	R24,0xC
     117 E090      LDI	R25,0
     118 9020 0062 LDS	R2,m
     11A 9030 0063 LDS	R3,m+1
     11C 1582      CP	R24,R2
     11D 0593      CPC	R25,R3
     11E F488      BCC	0x0130
     11F E68C      LDI	R24,0x6C
     120 E090      LDI	R25,0
     121 90A0 006A LDS	R10,IRCON
     123 90B0 006B LDS	R11,IRCON+1
     125 0CAA      LSL	R10
     126 1CBB      ROL	R11
     127 0EA8      ADD	R10,R24
     128 1EB9      ADC	R11,R25
     129 01F5      MOVW	R30,R10
     12A 8180      LDD	R24,Z+0
     12B 8191      LDD	R25,Z+1
     12C 6081      ORI	R24,1
     12D 8391      STD	Z+1,R25
     12E 8380      STD	Z+0,R24
     12F C011      RJMP	0x0141
(0086) 		else IRCode[IRCON]&=0XFE;
     130 E68C      LDI	R24,0x6C
     131 E090      LDI	R25,0
     132 90A0 006A LDS	R10,IRCON
     134 90B0 006B LDS	R11,IRCON+1
     136 0CAA      LSL	R10
     137 1CBB      ROL	R11
     138 0EA8      ADD	R10,R24
     139 1EB9      ADC	R11,R25
     13A 01F5      MOVW	R30,R10
     13B 8180      LDD	R24,Z+0
     13C 8191      LDD	R25,Z+1
     13D 7F8E      ANDI	R24,0xFE
     13E 7090      ANDI	R25,0
     13F 8391      STD	Z+1,R25
     140 8380      STD	Z+0,R24
(0087) 		//PORTB=m;
(0088) 	   }
(0089) 	    if(flag==8) 
     141 9180 0066 LDS	R24,flag
     143 9190 0067 LDS	R25,flag+1
     145 3088      CPI	R24,0x8
     146 E0E0      LDI	R30,0
     147 079E      CPC	R25,R30
     148 F579      BNE	0x0178
(0090) 		   {
(0091) 			  flag=0;
     149 2422      CLR	R2
     14A 2433      CLR	R3
     14B 9230 0067 STS	flag+1,R3
     14D 9220 0066 STS	flag,R2
(0092) 			  IRCON++;    //存满一个数据后数组的指针要加一
     14F 9180 006A LDS	R24,IRCON
     151 9190 006B LDS	R25,IRCON+1
     153 9601      ADIW	R24,1
     154 9390 006B STS	IRCON+1,R25
     156 9380 006A STS	IRCON,R24
(0093) 			  if(IRCON==4)   //数组中的数据存满
     158 3084      CPI	R24,4
     159 E0E0      LDI	R30,0
     15A 079E      CPC	R25,R30
     15B F4E1      BNE	0x0178
(0094) 			     {
(0095) 			    
(0096) 				   IRCON=0;	
     15C 9230 006B STS	IRCON+1,R3
     15E 9220 006A STS	IRCON,R2
(0097) 				     uart0_init();   //开始向串口发送数据
     160 DEEC      RCALL	_uart0_init
(0098) 				      for(j=0;j<4;j++)
     161 2744      CLR	R20
     162 C00B      RJMP	0x016E
(0099)                            {
(0100) 			                sendchar(IRCode[j]);
     163 E68C      LDI	R24,0x6C
     164 E090      LDI	R25,0
     165 2FE4      MOV	R30,R20
     166 27FF      CLR	R31
     167 0FEE      LSL	R30
     168 1FFF      ROL	R31
     169 0FE8      ADD	R30,R24
     16A 1FF9      ADC	R31,R25
     16B 8100      LDD	R16,Z+0
     16C DEEB      RCALL	_sendchar
     16D 9543      INC	R20
     16E 3044      CPI	R20,4
     16F F398      BCS	0x0163
(0101) 							//PORTB=IRCode[0];                 
(0102) 	                       }
(0103) 					   f=0;
     170 2422      CLR	R2
     171 2433      CLR	R3
     172 9230 0069 STS	f+1,R3
     174 9220 0068 STS	f,R2
(0104) 					// delay_nms(1000);
(0105) 				 // TIMSK = 0x00;     //关定时器中断
(0106)      		    GICR=0X40;	  //开外部中断      
     176 E480      LDI	R24,0x40
     177 BF8B      OUT	0x3B,R24
(0107) 			     }
(0108) 				 
(0109) 		 
(0110) 		 }	
(0111) 	  TCCR0 = 0x02;
     178 E082      LDI	R24,2
     179 BF83      OUT	0x33,R24
(0112) 	  TIMSK = 0x02;
     17A BF89      OUT	0x39,R24
     17B D02A      RCALL	pop_xgset300C
     17C 9009      LD	R0,Y+
     17D BE0F      OUT	0x3F,R0
     17E 91F9      LD	R31,Y+
     17F 91E9      LD	R30,Y+
     180 91B9      LD	R27,Y+
     181 91A9      LD	R26,Y+
     182 9199      LD	R25,Y+
     183 9189      LD	R24,Y+
     184 9139      LD	R19,Y+
     185 9129      LD	R18,Y+
     186 9119      LD	R17,Y+
     187 9109      LD	R16,Y+
     188 9099      LD	R9,Y+
     189 9089      LD	R8,Y+
     18A 9079      LD	R7,Y+
     18B 9069      LD	R6,Y+
     18C 9059      LD	R5,Y+
     18D 9049      LD	R4,Y+
     18E 9039      LD	R3,Y+
     18F 9029      LD	R2,Y+
     190 9019      LD	R1,Y+
     191 9009      LD	R0,Y+
     192 9518      RETI
(0113) }
(0114) 
(0115) void init_devices_timer0(void)
(0116) {
(0117)  CLI(); 
_init_devices_timer0:
     193 94F8      BCLR	7
(0118)  timer0_init();
     194 DF01      RCALL	_timer0_init
(0119)  TIMSK = 0x02;    //开定时器中断
     195 E082      LDI	R24,2
     196 BF89      OUT	0x39,R24
(0120)  SEI(); 
     197 9478      BSET	7
     198 9508      RET
(0121) }
(0122) 
(0123) 
(0124) void main(void)
(0125) {
(0126)   DDRD&=~BIT(0);
_main:
     199 9888      CBI	0x11,0
(0127)   DDRD|=BIT(1);
     19A 9A89      SBI	0x11,1
(0128)   DDRD&=~BIT(2);
     19B 988A      CBI	0x11,2
(0129)   DDRB=0XFF;
     19C EF8F      LDI	R24,0xFF
     19D BB87      OUT	0x17,R24
(0130)   init_devices_int0();
     19E DEEE      RCALL	_init_devices_int0
(0131)   while(1);
FILE: <library>
     19F CFFF      RJMP	0x019F
     1A0 9508      RET
push_xgset300C:
     1A1 935A      ST	R21,-Y
     1A2 934A      ST	R20,-Y
     1A3 92BA      ST	R11,-Y
     1A4 92AA      ST	R10,-Y
     1A5 9508      RET
pop_xgset300C:
     1A6 90A9      LD	R10,Y+
     1A7 90B9      LD	R11,Y+
     1A8 9149      LD	R20,Y+
     1A9 9159      LD	R21,Y+
     1AA 9508      RET

⌨️ 快捷键说明

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