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

📄 demoa-16sm.lst

📁 大量ATMEGA16实例, 都可以运行,包括驱动LCD1602, 上位机显示等多功能
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0038) 	  swin3=PINC&0xc0;
     2B1 B383      IN	R24,0x13
     2B2 7C80      ANDI	R24,0xC0
     2B3 9380 025A STS	swin3,R24
(0039) 	  swin3=swin3>>6;
     2B5 2E28      MOV	R2,R24
     2B6 9426      LSR	R2
     2B7 9426      LSR	R2
     2B8 9426      LSR	R2
     2B9 9426      LSR	R2
     2BA 9426      LSR	R2
     2BB 9426      LSR	R2
     2BC 9220 025A STS	swin3,R2
(0040) 	 	
(0041) 	  if(swin3==0)
     2BE 2022      TST	R2
     2BF F459      BNE	0x02CB
(0042) 	  	{
(0043) 	  	PORTD=pattern1[led_index];	  
     2C0 E18A      LDI	R24,0x1A
     2C1 E092      LDI	R25,2
     2C2 91E0 0216 LDS	R30,led_index
     2C4 91F0 0217 LDS	R31,led_index+1
     2C6 0FE8      ADD	R30,R24
     2C7 1FF9      ADC	R31,R25
     2C8 8020      LDD	R2,Z+0
     2C9 BA22      OUT	0x12,R2
(0044) 	  	}
     2CA C028      RJMP	0x02F3
(0045) 	  else if(swin3==0x01)
     2CB 9180 025A LDS	R24,swin3
     2CD 3081      CPI	R24,1
     2CE F459      BNE	0x02DA
(0046) 	    {
(0047) 	  	PORTD=pattern2[led_index];	  
     2CF E289      LDI	R24,0x29
     2D0 E092      LDI	R25,2
     2D1 91E0 0216 LDS	R30,led_index
     2D3 91F0 0217 LDS	R31,led_index+1
     2D5 0FE8      ADD	R30,R24
     2D6 1FF9      ADC	R31,R25
     2D7 8020      LDD	R2,Z+0
     2D8 BA22      OUT	0x12,R2
(0048) 	  	}
     2D9 C019      RJMP	0x02F3
(0049) 	  else if(swin3==0x02)
     2DA 9180 025A LDS	R24,swin3
     2DC 3082      CPI	R24,2
     2DD F459      BNE	0x02E9
(0050) 	    {
(0051) 	    PORTD=pattern3[led_index];	  
     2DE E388      LDI	R24,0x38
     2DF E092      LDI	R25,2
     2E0 91E0 0216 LDS	R30,led_index
     2E2 91F0 0217 LDS	R31,led_index+1
     2E4 0FE8      ADD	R30,R24
     2E5 1FF9      ADC	R31,R25
     2E6 8020      LDD	R2,Z+0
     2E7 BA22      OUT	0x12,R2
(0052) 	    }
     2E8 C00A      RJMP	0x02F3
(0053) 	  else
(0054) 	    {
(0055) 	    PORTD=pattern4[led_index];	  
     2E9 E487      LDI	R24,0x47
     2EA E092      LDI	R25,2
     2EB 91E0 0216 LDS	R30,led_index
     2ED 91F0 0217 LDS	R31,led_index+1
     2EF 0FE8      ADD	R30,R24
     2F0 1FF9      ADC	R31,R25
     2F1 8020      LDD	R2,Z+0
     2F2 BA22      OUT	0x12,R2
(0056) 	    }
(0057) 	  led_index++;
     2F3 9180 0216 LDS	R24,led_index
     2F5 9190 0217 LDS	R25,led_index+1
     2F7 9601      ADIW	R24,1
     2F8 9390 0217 STS	led_index+1,R25
     2FA 9380 0216 STS	led_index,R24
(0058) 	  if(led_index>14)
     2FC E08E      LDI	R24,0xE
     2FD E090      LDI	R25,0
     2FE 9020 0216 LDS	R2,led_index
     300 9030 0217 LDS	R3,led_index+1
     302 1582      CP	R24,R2
     303 0593      CPC	R25,R3
     304 F434      BGE	0x030B
(0059) 	     led_index=0;	
     305 2422      CLR	R2
     306 2433      CLR	R3
     307 9230 0217 STS	led_index+1,R3
     309 9220 0216 STS	led_index,R2
(0060) 	  }	
(0061) 	  swin3=~PINC&0x0f;
     30B B383      IN	R24,0x13
     30C 9580      COM	R24
     30D 708F      ANDI	R24,0xF
     30E 9380 025A STS	swin3,R24
(0062) 	delay(100+50*swin3);
     310 2E28      MOV	R2,R24
     311 E382      LDI	R24,0x32
     312 9D82      MUL	R24,R2
     313 0180      MOVW	R16,R0
     314 590C      SUBI	R16,0x9C
     315 4F1F      SBCI	R17,0xFF
     316 DF7B      RCALL	_delay
     317 9508      RET
_BinToBCD:
  data                 --> R20
     318 934A      ST	R20,-Y
     319 935A      ST	R21,-Y
     31A 01A8      MOVW	R20,R16
(0063)   }
(0064) 
(0065) void BinToBCD(int data)
(0066) {
(0067)  BCD0=0;
     31B 2422      CLR	R2
     31C 9220 0260 STS	BCD0,R2
(0068)  BCD1=0;
     31E 9220 025F STS	BCD1,R2
(0069)  BCD2=0;
     320 9220 025E STS	BCD2,R2
(0070)  BCD3=0;
     322 9220 025D STS	BCD3,R2
(0071)  if(data>=10000)
     324 3140      CPI	R20,0x10
     325 E2E7      LDI	R30,0x27
     326 075E      CPC	R21,R30
     327 F014      BLT	0x032A
(0072)     data=0;
     328 2744      CLR	R20
     329 2755      CLR	R21
(0073)  if(data>=1000)
     32A 3E48      CPI	R20,0xE8
     32B E0E3      LDI	R30,3
     32C 075E      CPC	R21,R30
     32D F06C      BLT	0x033B
(0074)     {
(0075)     BCD3=data/1000;
     32E EE28      LDI	R18,0xE8
     32F E033      LDI	R19,3
     330 018A      MOVW	R16,R20
     331 940E 03C6 CALL	div16s
     333 9300 025D STS	BCD3,R16
(0076) 	data=data%1000;
     335 EE28      LDI	R18,0xE8
     336 E033      LDI	R19,3
     337 018A      MOVW	R16,R20
     338 940E 03C2 CALL	mod16s
     33A 01A8      MOVW	R20,R16
(0077) 	}	
(0078)  if(data>=100)
     33B 3644      CPI	R20,0x64
     33C E0E0      LDI	R30,0
     33D 075E      CPC	R21,R30
     33E F06C      BLT	0x034C
(0079)     {
(0080)     BCD2=data/100;
     33F E624      LDI	R18,0x64
     340 E030      LDI	R19,0
     341 018A      MOVW	R16,R20
     342 940E 03C6 CALL	div16s
     344 9300 025E STS	BCD2,R16
(0081) 	data=data%100;
     346 E624      LDI	R18,0x64
     347 E030      LDI	R19,0
     348 018A      MOVW	R16,R20
     349 940E 03C2 CALL	mod16s
     34B 01A8      MOVW	R20,R16
(0082) 	}	
(0083) 	
(0084)  if(data>=10)
     34C 304A      CPI	R20,0xA
     34D E0E0      LDI	R30,0
     34E 075E      CPC	R21,R30
     34F F06C      BLT	0x035D
(0085)     {
(0086)     BCD1=data/10;
     350 E02A      LDI	R18,0xA
     351 E030      LDI	R19,0
     352 018A      MOVW	R16,R20
     353 940E 03C6 CALL	div16s
     355 9300 025F STS	BCD1,R16
(0087) 	data=data%10;
     357 E02A      LDI	R18,0xA
     358 E030      LDI	R19,0
     359 018A      MOVW	R16,R20
     35A 940E 03C2 CALL	mod16s
     35C 01A8      MOVW	R20,R16
(0088) 	}		
(0089)  BCD0=data;	
     35D 9340 0260 STS	BCD0,R20
     35F 9159      LD	R21,Y+
     360 9149      LD	R20,Y+
     361 9508      RET
(0090) }
(0091) 
(0092) void dispseg(void)
(0093) {
(0094)  PORTB=~segconv[BCD0];
_dispseg:
     362 E08C      LDI	R24,0xC
     363 E092      LDI	R25,2
     364 91E0 0260 LDS	R30,BCD0
     366 27FF      CLR	R31
     367 0FE8      ADD	R30,R24
     368 1FF9      ADC	R31,R25
     369 8020      LDD	R2,Z+0
     36A 9420      COM	R2
     36B BA28      OUT	0x18,R2
(0095)  PORTA=dig0;
     36C E6E1      LDI	R30,0x61
     36D E0F1      LDI	R31,1
     36E 9026      ELPM	R2,1(Z)
     36F BA2B      OUT	0x1B,R2
(0096)  led_disp();
     370 DF37      RCALL	_led_disp
(0097)  PORTB=~segconv[BCD1];
     371 E08C      LDI	R24,0xC
     372 E092      LDI	R25,2
     373 91E0 025F LDS	R30,BCD1
     375 27FF      CLR	R31
     376 0FE8      ADD	R30,R24
     377 1FF9      ADC	R31,R25
     378 8020      LDD	R2,Z+0
     379 9420      COM	R2
     37A BA28      OUT	0x18,R2
(0098)  PORTA=dig1;
     37B E6E2      LDI	R30,0x62
     37C E0F1      LDI	R31,1
     37D 9026      ELPM	R2,1(Z)
     37E BA2B      OUT	0x1B,R2
(0099)  led_disp();
     37F DF28      RCALL	_led_disp
(0100)  PORTB=~segconv[BCD2];
     380 E08C      LDI	R24,0xC
     381 E092      LDI	R25,2
     382 91E0 025E LDS	R30,BCD2
     384 27FF      CLR	R31
     385 0FE8      ADD	R30,R24
     386 1FF9      ADC	R31,R25
     387 8020      LDD	R2,Z+0
     388 9420      COM	R2
     389 BA28      OUT	0x18,R2
(0101)  PORTA=dig2;
     38A E6E3      LDI	R30,0x63
     38B E0F1      LDI	R31,1
     38C 9026      ELPM	R2,1(Z)
     38D BA2B      OUT	0x1B,R2
(0102)  led_disp();
     38E DF19      RCALL	_led_disp
(0103)  PORTB=~segconv[BCD3];
     38F E08C      LDI	R24,0xC
     390 E092      LDI	R25,2
     391 91E0 025D LDS	R30,BCD3
     393 27FF      CLR	R31
     394 0FE8      ADD	R30,R24
     395 1FF9      ADC	R31,R25
     396 8020      LDD	R2,Z+0
     397 9420      COM	R2
     398 BA28      OUT	0x18,R2
(0104)  PORTA=dig3;
     399 E6E4      LDI	R30,0x64
     39A E0F1      LDI	R31,1
     39B 9026      ELPM	R2,1(Z)
     39C BA2B      OUT	0x1B,R2
(0105)  led_disp();
     39D DF0A      RCALL	_led_disp
(0106)  time_over++;
     39E 9180 0218 LDS	R24,time_over
     3A0 9190 0219 LDS	R25,time_over+1
     3A2 9601      ADIW	R24,1
     3A3 9390 0219 STS	time_over+1,R25
     3A5 9380 0218 STS	time_over,R24
(0107)  if(time_over>10)
     3A7 E08A      LDI	R24,0xA
     3A8 E090      LDI	R25,0
     3A9 9020 0218 LDS	R2,time_over
     3AB 9030 0219 LDS	R3,time_over+1
     3AD 1582      CP	R24,R2
     3AE 0593      CPC	R25,R3
     3AF F434      BGE	0x03B6
(0108)     time_over=0;
     3B0 2422      CLR	R2
     3B1 2433      CLR	R3
     3B2 9230 0219 STS	time_over+1,R3
     3B4 9220 0218 STS	time_over,R2
     3B6 9508      RET
(0109) }
(0110) 
(0111) void dot_on(void)
(0112) {
(0113)  PORTB=~0x80;
_dot_on:
     3B7 E78F      LDI	R24,0x7F
     3B8 EF9F      LDI	R25,0xFF
     3B9 BB88      OUT	0x18,R24
(0114)  PORTA=dot; 
     3BA E6E5      LDI	R30,0x65
     3BB E0F1      LDI	R31,1
     3BC 9026      ELPM	R2,1(Z)
     3BD BA2B      OUT	0x1B,R2
(0115)  delay(20);
FILE: <library>
     3BE E104      LDI	R16,0x14
     3BF E010      LDI	R17,0
     3C0 DED1      RCALL	_delay
     3C1 9508      RET
mod16s:
     3C2 9468      BSET	6
     3C3 92DA      ST	R13,-Y
     3C4 2ED1      MOV	R13,R17
     3C5 C004      RJMP	0x03CA
div16s:
     3C6 94E8      BCLR	6
     3C7 92DA      ST	R13,-Y
     3C8 2ED1      MOV	R13,R17
     3C9 26D3      EOR	R13,R19
     3CA FF17      SBRS	R17,7
     3CB C004      RJMP	0x03D0
     3CC 9510      COM	R17
     3CD 9500      COM	R16
     3CE 5F0F      SUBI	R16,0xFF
     3CF 4F1F      SBCI	R17,0xFF
     3D0 FF37      SBRS	R19,7
     3D1 C004      RJMP	0x03D6
     3D2 9530      COM	R19
     3D3 9520      COM	R18
     3D4 5F2F      SUBI	R18,0xFF
     3D5 4F3F      SBCI	R19,0xFF
     3D6 940E 03E3 CALL	xdiv16u
     3D8 FED7      SBRS	R13,7
     3D9 C004      RJMP	0x03DE
     3DA 9510      COM	R17
     3DB 9500      COM	R16
     3DC 5F0F      SUBI	R16,0xFF
     3DD 4F1F      SBCI	R17,0xFF
     3DE 90D9      LD	R13,Y+
     3DF 9508      RET
mod16u:
     3E0 9468      BSET	6
     3E1 C001      RJMP	xdiv16u
div16u:
     3E2 94E8      BCLR	6
xdiv16u:
     3E3 92EA      ST	R14,-Y
     3E4 92FA      ST	R15,-Y
     3E5 938A      ST	R24,-Y
     3E6 24EE      CLR	R14
     3E7 24FF      CLR	R15
     3E8 E180      LDI	R24,0x10
     3E9 0F00      LSL	R16
     3EA 1F11      ROL	R17
     3EB 1CEE      ROL	R14
     3EC 1CFF      ROL	R15
     3ED 16E2      CP	R14,R18
     3EE 06F3      CPC	R15,R19
     3EF F018      BCS	0x03F3
     3F0 1AE2      SUB	R14,R18
     3F1 0AF3      SBC	R15,R19
     3F2 9503      INC	R16
     3F3 958A      DEC	R24
     3F4 F7A1      BNE	0x03E9
     3F5 F416      BRTC	0x03F8
     3F6 2D0E      MOV	R16,R14
     3F7 2D1F      MOV	R17,R15
     3F8 9189      LD	R24,Y+
     3F9 90F9      LD	R15,Y+
     3FA 90E9      LD	R14,Y+
     3FB 9508      RET
push_xgset300C:
     3FC 935A      ST	R21,-Y
     3FD 934A      ST	R20,-Y
     3FE 92BA      ST	R11,-Y
     3FF 92AA      ST	R10,-Y
     400 9508      RET
pop_xgset300C:
     401 90A9      LD	R10,Y+
     402 90B9      LD	R11,Y+
     403 9149      LD	R20,Y+
     404 9159      LD	R21,Y+
     405 9508      RET
push_xgsetF000:
     406 937A      ST	R23,-Y
     407 936A      ST	R22,-Y
     408 935A      ST	R21,-Y
     409 934A      ST	R20,-Y
     40A 9508      RET
pop_xgsetF000:
     40B 9149      LD	R20,Y+
     40C 9159      LD	R21,Y+
     40D 9169      LD	R22,Y+
     40E 9179      LD	R23,Y+
     40F 9508      RET
push_xgset303C:
     410 935A      ST	R21,-Y
     411 934A      ST	R20,-Y
     412 92DA      ST	R13,-Y
     413 92CA      ST	R12,-Y
     414 92BA      ST	R11,-Y
     415 92AA      ST	R10,-Y
     416 9508      RET
pop_xgset303C:
     417 90A9      LD	R10,Y+
     418 90B9      LD	R11,Y+
     419 90C9      LD	R12,Y+
     41A 90D9      LD	R13,Y+
     41B 9149      LD	R20,Y+
     41C 9159      LD	R21,Y+
     41D 9508      RET

⌨️ 快捷键说明

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