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

📄 keyled.lst

📁 avr单片机入门小程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0129)  
(0130)  if(work_state==0x01&&clock_start==0) //跑表
     1D1 9180 010A LDS	R24,work_state
     1D3 3081      CPI	R24,1
     1D4 F5C1      BNE	0x020D
     1D5 9020 0108 LDS	R2,clock_start
     1D7 2022      TST	R2
     1D8 F5A1      BNE	0x020D
(0131)  {
(0132)   timer2++;
     1D9 9180 010D LDS	R24,timer2
     1DB 5F8F      SUBI	R24,0xFF
     1DC 9380 010D STS	timer2,R24
(0133)   if(timer2==0x02)
     1DE 3082      CPI	R24,2
     1DF F569      BNE	0x020D
(0134)   {timer2=0;
     1E0 2422      CLR	R2
     1E1 9220 010D STS	timer2,R2
(0135)   clock[0]++;
     1E3 9180 0100 LDS	R24,clock
     1E5 5F8F      SUBI	R24,0xFF
     1E6 9380 0100 STS	clock,R24
(0136)   if(clock[0]==10)
     1E8 308A      CPI	R24,0xA
     1E9 F519      BNE	0x020D
(0137)   {
(0138)    clock[0]=0;
     1EA 9220 0100 STS	clock,R2
(0139)    clock[1]++;
     1EC 9180 0101 LDS	R24,clock+1
     1EE 5F8F      SUBI	R24,0xFF
     1EF 9380 0101 STS	clock+1,R24
(0140)    if(clock[1]==10)
     1F1 308A      CPI	R24,0xA
     1F2 F4D1      BNE	0x020D
(0141)    {
(0142)    	clock[1]=0;
     1F3 9220 0101 STS	clock+1,R2
(0143) 	clock[2]++;
     1F5 9180 0102 LDS	R24,clock+2
     1F7 5F8F      SUBI	R24,0xFF
     1F8 9380 0102 STS	clock+2,R24
(0144) 	if(clock[2]==10)
     1FA 308A      CPI	R24,0xA
     1FB F489      BNE	0x020D
(0145) 	{
(0146) 	 clock[2]=0;
     1FC 9220 0102 STS	clock+2,R2
(0147) 	 clock[3]++;
     1FE 9180 0103 LDS	R24,clock+3
     200 5F8F      SUBI	R24,0xFF
     201 9380 0103 STS	clock+3,R24
(0148) 	  if(clock[3]==10)
     203 308A      CPI	R24,0xA
     204 F441      BNE	0x020D
(0149) 	  {
(0150) 	  clock[3]=0;
     205 9220 0103 STS	clock+3,R2
(0151) 	 clock[0]=0;
     207 9220 0100 STS	clock,R2
(0152) 	 clock[1]=0;
     209 9220 0101 STS	clock+1,R2
(0153) 	 clock[2]=0;
     20B 9220 0102 STS	clock+2,R2
(0154) 	 }
(0155) 	}
(0156)    }
(0157)   }
(0158)   }
(0159)  } 
(0160) 
(0161)  display();
     20D DE7A      RCALL	_display
     20E 9009      LD	R0,Y+
     20F BE0F      OUT	0x3F,R0
     210 91F9      LD	R31,Y+
     211 91E9      LD	R30,Y+
     212 91B9      LD	R27,Y+
     213 91A9      LD	R26,Y+
     214 9199      LD	R25,Y+
     215 9189      LD	R24,Y+
     216 9139      LD	R19,Y+
     217 9129      LD	R18,Y+
     218 9119      LD	R17,Y+
     219 9109      LD	R16,Y+
     21A 9099      LD	R9,Y+
     21B 9089      LD	R8,Y+
     21C 9079      LD	R7,Y+
     21D 9069      LD	R6,Y+
     21E 9059      LD	R5,Y+
     21F 9049      LD	R4,Y+
     220 9039      LD	R3,Y+
     221 9029      LD	R2,Y+
     222 9019      LD	R1,Y+
     223 9009      LD	R0,Y+
     224 9518      RETI
(0162) }   //timer0_com_isr
(0163) 
(0164) void wait()
(0165) {
_wait:
     225 C007      RJMP	0x022D
(0166)  while((PINB&0xf0)!=0xf0)
(0167)  {
(0168)   delay(20);
     226 E104      LDI	R16,0x14
     227 E010      LDI	R17,0
     228 DE51      RCALL	_delay
(0169)   while((PINB&0xf0)!=0xf0)
     229 B386      IN	R24,0x16
     22A 7F80      ANDI	R24,0xF0
     22B 3F80      CPI	R24,0xF0
     22C F7E1      BNE	0x0229
     22D B386      IN	R24,0x16
     22E 7F80      ANDI	R24,0xF0
     22F 3F80      CPI	R24,0xF0
     230 F7A9      BNE	0x0226
     231 9508      RET
(0170)   ;
(0171)  }
(0172) }
(0173) void main()
(0174) {
(0175)  unsigned char i;
(0176)  timer2=0;
_main:
  i                    --> R20
     232 2422      CLR	R2
     233 9220 010D STS	timer2,R2
(0177)  timer200=0;
     235 2433      CLR	R3
     236 9230 010C STS	timer200+1,R3
     238 9220 010B STS	timer200,R2
(0178)  work_state=0;
     23A 9220 010A STS	work_state,R2
(0179)  time_change=0x00;
     23C 9220 0109 STS	time_change,R2
(0180)  clock_start=1; //停止跑表
     23E E081      LDI	R24,1
     23F 9380 0108 STS	clock_start,R24
(0181) /*  定时器0 定时 5 ms,general mode ,溢出 interrupt */ 
(0182)  TCCR0=0x07;   //general mode
     241 E087      LDI	R24,7
     242 BF83      OUT	0x33,R24
(0183)  //TCNT0=0x05;
(0184)  TCNT0=0xd7;
     243 ED87      LDI	R24,0xD7
     244 BF82      OUT	0x32,R24
(0185)  TIMSK=0x01;
     245 E081      LDI	R24,1
     246 BF87      OUT	0x37,R24
(0186) 
(0187)  DDRB=0x0f; //set PB7~PB4 PULL-UP resistor
     247 E08F      LDI	R24,0xF
     248 BB87      OUT	0x17,R24
(0188)  PORTB=0xfe;
     249 EF8E      LDI	R24,0xFE
     24A BB88      OUT	0x18,R24
(0189)  for(i=0;i<4;i++)
     24B 2744      CLR	R20
     24C C010      RJMP	0x025D
(0190)  {
(0191)   time[i]=0;
     24D E084      LDI	R24,4
     24E E091      LDI	R25,1
     24F 2FE4      MOV	R30,R20
     250 27FF      CLR	R31
     251 0FE8      ADD	R30,R24
     252 1FF9      ADC	R31,R25
     253 2422      CLR	R2
     254 8220      STD	Z+0,R2
(0192)   clock[i]=0;
     255 E080      LDI	R24,0
     256 E091      LDI	R25,1
     257 2FE4      MOV	R30,R20
     258 27FF      CLR	R31
     259 0FE8      ADD	R30,R24
     25A 1FF9      ADC	R31,R25
     25B 8220      STD	Z+0,R2
     25C 9543      INC	R20
     25D 3044      CPI	R20,4
     25E F370      BCS	0x024D
(0193)  }
(0194)  SEI(); 
     25F 9478      BSET	7
     260 C0F7      RJMP	0x0358
(0195)  while(1)
(0196)   {  
(0197)  
(0198) 	while((PINB&0xf0)==0xf0)
(0199) 	 {
(0200) 	  delay(20);
     261 E104      LDI	R16,0x14
     262 E010      LDI	R17,0
     263 DE16      RCALL	_delay
(0201) 	  while((PINB&0xf0)==0xf0)
     264 B386      IN	R24,0x16
     265 7F80      ANDI	R24,0xF0
     266 3F80      CPI	R24,0xF0
     267 F3E1      BEQ	0x0264
     268 B386      IN	R24,0x16
     269 7F80      ANDI	R24,0xF0
     26A 3F80      CPI	R24,0xF0
     26B F3A9      BEQ	0x0261
(0202) 	   ;
(0203) 	 }
(0204) 	temp=PINB&0xf0;
     26C B386      IN	R24,0x16
     26D 7F80      ANDI	R24,0xF0
     26E 9380 010E STS	temp,R24
(0205) 	 switch(temp)
     270 2F68      MOV	R22,R24
     271 2777      CLR	R23
     272 3B60      CPI	R22,0xB0
     273 E0E0      LDI	R30,0
     274 077E      CPC	R23,R30
     275 F409      BNE	0x0277
     276 C06A      RJMP	0x02E1
     277 EB80      LDI	R24,0xB0
     278 E090      LDI	R25,0
     279 1786      CP	R24,R22
     27A 0797      CPC	R25,R23
     27B F034      BLT	0x0282
     27C 3760      CPI	R22,0x70
     27D E0E0      LDI	R30,0
     27E 077E      CPC	R23,R30
     27F F409      BNE	0x0281
     280 C0A1      RJMP	0x0322
     281 C0D6      RJMP	0x0358
     282 3D60      CPI	R22,0xD0
     283 E0E0      LDI	R30,0
     284 077E      CPC	R23,R30
     285 F149      BEQ	0x02AF
     286 3D60      CPI	R22,0xD0
     287 E0E0      LDI	R30,0
     288 077E      CPC	R23,R30
     289 F40C      BGE	0x028B
     28A C0CD      RJMP	0x0358
     28B 3E60      CPI	R22,0xE0
     28C E0E0      LDI	R30,0
     28D 077E      CPC	R23,R30
     28E F009      BEQ	0x0290
     28F C0C8      RJMP	0x0358
(0206) 	 {
(0207) 	 case 0xe0:  //key 0 
(0208) 	  if(work_state==0)
     290 9020 010A LDS	R2,work_state
     292 2022      TST	R2
     293 F499      BNE	0x02A7
(0209) 		 {
(0210) 	 	  work_state=1;     //跑表模式
     294 E081      LDI	R24,1
     295 9380 010A STS	work_state,R24
(0211) 		  clock_start=1;    //跑表启动
     297 9380 0108 STS	clock_start,R24
(0212) 		  for(i=0;i<4;i++)
     299 2744      CLR	R20
     29A C009      RJMP	0x02A4
(0213) 		  clock[i]=0;
     29B E080      LDI	R24,0
     29C E091      LDI	R25,1
     29D 2FE4      MOV	R30,R20
     29E 27FF      CLR	R31
     29F 0FE8      ADD	R30,R24
     2A0 1FF9      ADC	R31,R25
     2A1 2422      CLR	R2
     2A2 8220      STD	Z+0,R2
     2A3 9543      INC	R20
     2A4 3044      CPI	R20,4
     2A5 F3A8      BCS	0x029B
(0214) 		 }
     2A6 C003      RJMP	0x02AA
(0215) 		else
(0216) 		  work_state=0x00;
     2A7 2422      CLR	R2
     2A8 9220 010A STS	work_state,R2
(0217) 		  clock_start=0;
     2AA 2422      CLR	R2
     2AB 9220 0108 STS	clock_start,R2
(0218) 		  wait();
     2AD DF77      RCALL	_wait
(0219) 		  break;
     2AE C0A9      RJMP	0x0358
(0220) 	case 0xd0:  //key 1
(0221) 	     if(work_state==0x00)
     2AF 9020 010A LDS	R2,work_state
     2B1 2022      TST	R2
     2B2 F4B9      BNE	0x02CA
(0222) 		 {
(0223) 		  if(time_change==0x00)
     2B3 9020 0109 LDS	R2,time_change
     2B5 2022      TST	R2
     2B6 F421      BNE	0x02BB
(0224) 		    time_change=0x01;
     2B7 E081      LDI	R24,1
     2B8 9380 0109 STS	time_change,R24
     2BA C00F      RJMP	0x02CA
(0225) 		  else if(time_change==0x01)
     2BB 9180 0109 LDS	R24,time_change
     2BD 3081      CPI	R24,1
     2BE F421      BNE	0x02C3
(0226) 		    time_change=0x02;
     2BF E082      LDI	R24,2
     2C0 9380 0109 STS	time_change,R24
     2C2 C007      RJMP	0x02CA
(0227) 		  else if(time_change==0x02)
     2C3 9180 0109 LDS	R24,time_change
     2C5 3082      CPI	R24,2
     2C6 F419      BNE	0x02CA
(0228) 		    time_change=0x00;
     2C7 2422      CLR	R2
     2C8 9220 0109 STS	time_change,R2
(0229) 		}
(0230) 		
(0231) 		 if(work_state==0x01)  //跑表
     2CA 9180 010A LDS	R24,work_state
     2CC 3081      CPI	R24,1
     2CD F489      BNE	0x02DF
(0232) 		    {if(clock_start==0x0) //跑表已启动
     2CE 9020 0108 LDS	R2,clock_start
     2D0 2022      TST	R2
     2D1 F469      BNE	0x02DF
(0233) 		     {
(0234) 			  for(i=0;i<4;i++)
     2D2 2744      CLR	R20
     2D3 C009      RJMP	0x02DD
(0235) 			  clock[i]=0;
     2D4 E080      LDI	R24,0
     2D5 E091      LDI	R25,1
     2D6 2FE4      MOV	R30,R20
     2D7 27FF      CLR	R31
     2D8 0FE8      ADD	R30,R24
     2D9 1FF9      ADC	R31,R25
     2DA 2422      CLR	R2
     2DB 8220      STD	Z+0,R2
     2DC 9543      INC	R20
     2DD 3044      CPI	R20,4
     2DE F3A8      BCS	0x02D4
(0236) 			 }
(0237) 			 }
(0238) 		
(0239) 		wait();		     
     2DF DF45      RCALL	_wait
(0240) 		  break;
     2E0 C077      RJMP	0x0358
(0241) 	 case 0xb0:  //key 2
(0242) 	    if(work_state==0x0) // 计时模式
     2E1 9020 010A LDS	R2,work_state
     2E3 2022      TST	R2
     2E4 F581      BNE	0x0315
(0243) 		  {if(time_change==0x1) //change second
     2E5 9180 0109 LDS	R24,time_change
     2E7 3081      CPI	R24,1
     2E8 F4A1      BNE	0x02FD
(0244) 		   {time[0]++;
     2E9 9180 0104 LDS	R24,time
     2EB 5F8F      SUBI	R24,0xFF
     2EC 9380 0104 STS	time,R24
(0245) 		   if(time[0]==0xa)
     2EE 308A      CPI	R24,0xA
     2EF F581      BNE	0x0320
(0246) 		    {time[0]=0;
     2F0 2422      CLR	R2
     2F1 9220 0104 STS	time,R2
(0247) 		     time[1]++;
     2F3 9180 0105 LDS	R24,time+1
     2F5 5F8F      SUBI	R24,0xFF
     2F6 9380 0105 STS	time+1,R24
(0248) 		     if(time[1]==0x6)
     2F8 3086      CPI	R24,6
     2F9 F531      BNE	0x0320
(0249) 		     time[1]=0;
     2FA 9220 0105 STS	time+1,R2
(0250) 			}
(0251) 		   }
     2FC C023      RJMP	0x0320
(0252) 		   else if(time_change==0x02)  //change minute
     2FD 9180 0109 LDS	R24,time_change
     2FF 3082      CPI	R24,2
     300 F4F9      BNE	0x0320
(0253) 		   {
(0254) 		    time[2]++;
     301 9180 0106 LDS	R24,time+2
     303 5F8F      SUBI	R24,0xFF
     304 9380 0106 STS	time+2,R24
(0255) 			if(time[2]==0xa)
     306 308A      CPI	R24,0xA
     307 F4C1      BNE	0x0320
(0256) 			{time[2]=0;
     308 2422      CLR	R2
     309 9220 0106 STS	time+2,R2
(0257) 			 time[3]++;
     30B 9180 0107 LDS	R24,time+3
     30D 5F8F      SUBI	R24,0xFF
     30E 9380 0107 STS	time+3,R24
(0258) 			 if(time[3]==0x6)
     310 3086      CPI	R24,6
     311 F471      BNE	0x0320
(0259) 			 time[3]=0;
     312 9220 0107 STS	time+3,R2
(0260) 			 }
(0261) 		   }
(0262) 		  }
     314 C00B      RJMP	0x0320
(0263) 		 else if(clock_start==0x00)   //跑表模式,已经启动
     315 9020 0108 LDS	R2,clock_start
     317 2022      TST	R2
     318 F421      BNE	0x031D
(0264) 		 clock_start=1;     //暂停
     319 E081      LDI	R24,1
     31A 9380 0108 STS	clock_start,R24
     31C C003      RJMP	0x0320
(0265) 		 else
(0266) 		  clock_start=0;
     31D 2422      CLR	R2
     31E 9220 0108 STS	clock_start,R2
(0267) 		 wait();
     320 DF04      RCALL	_wait
(0268) 		  break;
     321 C036      RJMP	0x0358
(0269) 	 case 0x70:  //key 3
(0270) 	 	  if(work_state==0x00)  // 计时模式
     322 9020 010A LDS	R2,work_state
     324 2022      TST	R2
     325 F589      BNE	0x0357
(0271) 		   {
(0272) 		   	if(time_change==0x01) // 秒
     326 9180 0109 LDS	R24,time_change
     328 3081      CPI	R24,1
     329 F4A9      BNE	0x033F
(0273) 			{
(0274) 			 time[0]--;
     32A 9180 0104 LDS	R24,time
     32C 5081      SUBI	R24,1
     32D 9380 0104 STS	time,R24
(0275) 			 if(time[0]==0xff)
     32F 3F8F      CPI	R24,0xFF
     330 F531      BNE	0x0357
(0276) 			 {
(0277) 			  time[0]=9;
     331 E089      LDI	R24,0x9
     332 9380 0104 STS	time,R24
(0278) 			  time[1]--;
     334 9180 0105 LDS	R24,time+1
     336 5081      SUBI	R24,1
     337 9380 0105 STS	time+1,R24
(0279) 			  if(time[1]==0xff)
     339 3F8F      CPI	R24,0xFF
     33A F4E1      BNE	0x0357
(0280) 			  time[1]=5;
     33B E085      LDI	R24,5
     33C 9380 0105 STS	time+1,R24
(0281) 			 }
(0282) 			}
     33E C018      RJMP	0x0357
(0283) 		   else if(time_change==0x02)  //decrease minute
     33F 9180 0109 LDS	R24,time_change
     341 3082      CPI	R24,2
     342 F4A1      BNE	0x0357
(0284) 		   {
(0285) 		   	time[2]--;
     343 9180 0106 LDS	R24,time+2
     345 5081      SUBI	R24,1
     346 9380 0106 STS	time+2,R24
(0286) 			if(time[2]==0xff)
     348 3F8F      CPI	R24,0xFF
     349 F469      BNE	0x0357
(0287) 			{
(0288) 			 time[2]=9;
     34A E089      LDI	R24,0x9
     34B 9380 0106 STS	time+2,R24
(0289) 			 time[3]--;
     34D 9180 0107 LDS	R24,time+3
     34F 5081      SUBI	R24,1
     350 9380 0107 STS	time+3,R24
(0290) 			 if(time[3]==0xff)
     352 3F8F      CPI	R24,0xFF
     353 F419      BNE	0x0357
(0291) 			 time[3]=5;
     354 E085      LDI	R24,5
     355 9380 0107 STS	time+3,R24
(0292) 			}
(0293) 		   }
(0294) 		   }
(0295) 		  wait();
FILE: <library>
     357 DECD      RCALL	_wait
     358 CF0F      RJMP	0x0268
     359 9508      RET
push_xgset300C:
     35A 935A      ST	R21,-Y
     35B 934A      ST	R20,-Y
     35C 92BA      ST	R11,-Y
     35D 92AA      ST	R10,-Y
     35E 9508      RET
pop_xgset300C:
     35F 90A9      LD	R10,Y+
     360 90B9      LD	R11,Y+
     361 9149      LD	R20,Y+
     362 9159      LD	R21,Y+
     363 9508      RET
lsl8:
     364 2311      TST	R17
     365 F019      BEQ	0x0369
     366 0F00      LSL	R16
     367 951A      DEC	R17
     368 CFFB      RJMP	lsl8
     369 9508      RET

⌨️ 快捷键说明

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