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

📄 timer.lst

📁 利用时间片思想设计的一个AVR单片机的时钟程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0081) 	LCD_write_string(8,0," ");
    024F E68A      LDI	R24,0x6A
    0250 E090      LDI	R25,0
    0251 8399      STD	Y+1,R25
    0252 8388      STD	Y+0,R24
    0253 2722      CLR	R18
    0254 E008      LDI	R16,0x8
    0255 DEBB      RCALL	_LCD_write_string
(0082) 	LCD_write_uint8(9, 0, Time.hour, 2);
    0256 E082      LDI	R24,2
    0257 838A      STD	Y+2,R24
    0258 90200071  LDS	R2,Time+3
    025A 2433      CLR	R3
    025B 8239      STD	Y+1,R3
    025C 8228      STD	Y+0,R2
    025D 2722      CLR	R18
    025E E009      LDI	R16,0x9
    025F DECF      RCALL	_LCD_write_uint8
(0083) 	LCD_write_string(11,0,":");
    0260 E688      LDI	R24,0x68
    0261 E090      LDI	R25,0
    0262 8399      STD	Y+1,R25
    0263 8388      STD	Y+0,R24
    0264 2722      CLR	R18
    0265 E00B      LDI	R16,0xB
    0266 DEAA      RCALL	_LCD_write_string
(0084) 	LCD_write_uint8(12, 0, Time.minute, 2);
    0267 E082      LDI	R24,2
    0268 838A      STD	Y+2,R24
    0269 90200072  LDS	R2,0x72
    026B 2433      CLR	R3
    026C 8239      STD	Y+1,R3
    026D 8228      STD	Y+0,R2
    026E 2722      CLR	R18
    026F E00C      LDI	R16,0xC
    0270 DEBE      RCALL	_LCD_write_uint8
(0085) 	LCD_write_string(14,0,":");
    0271 E688      LDI	R24,0x68
    0272 E090      LDI	R25,0
    0273 8399      STD	Y+1,R25
    0274 8388      STD	Y+0,R24
    0275 2722      CLR	R18
    0276 E00E      LDI	R16,0xE
    0277 DE99      RCALL	_LCD_write_string
(0086) 	LCD_write_uint8(15, 0, Time.second, 2);	
    0278 E082      LDI	R24,2
    0279 838A      STD	Y+2,R24
    027A 90200073  LDS	R2,0x73
    027C 2433      CLR	R3
    027D 8239      STD	Y+1,R3
    027E 8228      STD	Y+0,R2
    027F 2722      CLR	R18
    0280 E00F      LDI	R16,0xF
    0281 DEAD      RCALL	_LCD_write_uint8
    0282 9623      ADIW	R28,3
    0283 9508      RET
(0087) }
(0088) 
(0089) void	TimeAdd(void)
(0090) {
(0091) 	Time.second++;
_TimeAdd:
    0284 91800073  LDS	R24,0x73
    0286 5F8F      SUBI	R24,0xFF
    0287 93800073  STS	0x73,R24
(0092) 	if( Time.second == 60 )
    0289 338C      CPI	R24,0x3C
    028A F009      BEQ	0x028C
    028B C08D      RJMP	0x0319
(0093) 	{	Time.second = 0;	Time.minute++;
    028C 2422      CLR	R2
    028D 92200073  STS	0x73,R2
    028F 91800072  LDS	R24,0x72
    0291 5F8F      SUBI	R24,0xFF
    0292 93800072  STS	0x72,R24
(0094) 		if( Time.minute == 60 )
    0294 338C      CPI	R24,0x3C
    0295 F009      BEQ	0x0297
    0296 C082      RJMP	0x0319
(0095) 		{	Time.minute = 0;	Time.hour++;
    0297 92200072  STS	0x72,R2
    0299 91800071  LDS	R24,Time+3
    029B 5F8F      SUBI	R24,0xFF
    029C 93800071  STS	Time+3,R24
(0096) 			if( Time.hour == 24 )
    029E 3188      CPI	R24,0x18
    029F F009      BEQ	0x02A1
    02A0 C078      RJMP	0x0319
(0097) 			{	Time.hour = 0;	Time.day++;
    02A1 92200071  STS	Time+3,R2
    02A3 91800070  LDS	R24,Time+2
    02A5 5F8F      SUBI	R24,0xFF
    02A6 93800070  STS	Time+2,R24
(0098) 				//////////////////////////////////////////////
(0099) 				if( Time.month == 2 )
    02A8 9180006F  LDS	R24,Time+1
    02AA 3082      CPI	R24,2
    02AB F009      BEQ	0x02AD
    02AC C037      RJMP	0x02E4
(0100) 				{	if( (Time.year%4) == 0 )	//闰年28天
    02AD E014      LDI	R17,4
    02AE 9100006E  LDS	R16,Time
    02B0 940E038E  CALL	mod8u
    02B2 2300      TST	R16
    02B3 F4C1      BNE	0x02CC
(0101) 					{	if(Time.day==29){Time.day=0;Time.month++;if(Time.month==12){Time.month=0;Time.year++;}}	}
    02B4 91800070  LDS	R24,Time+2
    02B6 318D      CPI	R24,0x1D
    02B7 F009      BEQ	0x02B9
    02B8 C060      RJMP	0x0319
    02B9 2422      CLR	R2
    02BA 92200070  STS	Time+2,R2
    02BC 9180006F  LDS	R24,Time+1
    02BE 5F8F      SUBI	R24,0xFF
    02BF 9380006F  STS	Time+1,R24
    02C1 308C      CPI	R24,0xC
    02C2 F009      BEQ	0x02C4
    02C3 C055      RJMP	0x0319
    02C4 9220006F  STS	Time+1,R2
    02C6 9180006E  LDS	R24,Time
    02C8 5F8F      SUBI	R24,0xFF
    02C9 9380006E  STS	Time,R24
    02CB C04D      RJMP	0x0319
(0102) 					else						//29天
(0103) 					{	if(Time.day==30){Time.day=0;Time.month++;if(Time.month==12){Time.month=0;Time.year++;}}	}
    02CC 91800070  LDS	R24,Time+2
    02CE 318E      CPI	R24,0x1E
    02CF F009      BEQ	0x02D1
    02D0 C048      RJMP	0x0319
    02D1 2422      CLR	R2
    02D2 92200070  STS	Time+2,R2
    02D4 9180006F  LDS	R24,Time+1
    02D6 5F8F      SUBI	R24,0xFF
    02D7 9380006F  STS	Time+1,R24
    02D9 308C      CPI	R24,0xC
    02DA F009      BEQ	0x02DC
    02DB C03D      RJMP	0x0319
    02DC 9220006F  STS	Time+1,R2
    02DE 9180006E  LDS	R24,Time
    02E0 5F8F      SUBI	R24,0xFF
    02E1 9380006E  STS	Time,R24
(0104) 				}
    02E3 C035      RJMP	0x0319
(0105) 				else if( (Time.month==4) || (Time.month==6) || (Time.month==9) || (Time.month==11) )
    02E4 9180006F  LDS	R24,Time+1
    02E6 3084      CPI	R24,4
    02E7 F031      BEQ	0x02EE
    02E8 3086      CPI	R24,6
    02E9 F021      BEQ	0x02EE
    02EA 3089      CPI	R24,0x9
    02EB F011      BEQ	0x02EE
    02EC 308B      CPI	R24,0xB
    02ED F4B1      BNE	0x0304
(0106) 				{	if(Time.day==31){Time.day=0;Time.month++;if(Time.month==12){Time.month=0;Time.year++;}}	}
    02EE 91800070  LDS	R24,Time+2
    02F0 318F      CPI	R24,0x1F
    02F1 F539      BNE	0x0319
    02F2 2422      CLR	R2
    02F3 92200070  STS	Time+2,R2
    02F5 9180006F  LDS	R24,Time+1
    02F7 5F8F      SUBI	R24,0xFF
    02F8 9380006F  STS	Time+1,R24
    02FA 308C      CPI	R24,0xC
    02FB F4E9      BNE	0x0319
    02FC 9220006F  STS	Time+1,R2
    02FE 9180006E  LDS	R24,Time
    0300 5F8F      SUBI	R24,0xFF
    0301 9380006E  STS	Time,R24
    0303 C015      RJMP	0x0319
(0107) 				else
(0108) 				{	if(Time.day==32){Time.day=0;Time.month++;if(Time.month==12){Time.month=0;Time.year++;}}	}
    0304 91800070  LDS	R24,Time+2
    0306 3280      CPI	R24,0x20
    0307 F489      BNE	0x0319
    0308 2422      CLR	R2
    0309 92200070  STS	Time+2,R2
    030B 9180006F  LDS	R24,Time+1
    030D 5F8F      SUBI	R24,0xFF
    030E 9380006F  STS	Time+1,R24
    0310 308C      CPI	R24,0xC
    0311 F439      BNE	0x0319
    0312 9220006F  STS	Time+1,R2
    0314 9180006E  LDS	R24,Time
    0316 5F8F      SUBI	R24,0xFF
    0317 9380006E  STS	Time,R24
(0109) 				//////////////////////////////////////////////
(0110) 			}
(0111) 		}
(0112) 	}
    0319 9508      RET
_Timer1:
    031A 922A      ST	R2,-Y
    031B 938A      ST	R24,-Y
    031C 939A      ST	R25,-Y
    031D B62F      IN	R2,0x3F
    031E 922A      ST	R2,-Y
FILE: G:\Demo\Start.c
(0001) #include	<iom16v.h>                                                                          
(0002) #include	<macros.h>
(0003) 
(0004) #include	"Define.h"
(0005) #include	"LCD_1602.h"
(0006) #include	"Deal.h"
(0007) 
(0008) 
(0009) #pragma interrupt_handler Timer1:9
(0010) void	Timer1(void)
(0011) {	SysTCNT = SysTime;
    031F E88F      LDI	R24,0x8F
    0320 EF9D      LDI	R25,0xFD
    0321 BD9D      OUT	0x2D,R25
    0322 BD8C      OUT	0x2C,R24
(0012) 	ScanKeyFlag = 1;
    0323 E081      LDI	R24,1
    0324 93800062  STS	ScanKeyFlag,R24
(0013) 	
(0014) 	SysCount++;
    0326 91800060  LDS	R24,SysCount
    0328 5F8F      SUBI	R24,0xFF
    0329 93800060  STS	SysCount,R24
(0015) 	if( SysCount == 50 )
    032B 3382      CPI	R24,0x32
    032C F431      BNE	0x0333
(0016) 	{	DispTimeFlag = 1;	SysCount = 0;	}
    032D E081      LDI	R24,1
    032E 93800063  STS	DispTimeFlag,R24
    0330 2422      CLR	R2
    0331 92200060  STS	SysCount,R2
(0017) 
(0018) 	TimeCount++;
    0333 91800061  LDS	R24,TimeCount
    0335 5F8F      SUBI	R24,0xFF
    0336 93800061  STS	TimeCount,R24
(0019) 	if( TimeCount == 100 )
    0338 3684      CPI	R24,0x64
    0339 F431      BNE	0x0340
(0020) 	{	TimeAddFlag = 1;	TimeCount = 0;	}
    033A E081      LDI	R24,1
    033B 93800064  STS	TimeAddFlag,R24
    033D 2422      CLR	R2
    033E 92200061  STS	TimeCount,R2
    0340 9029      LD	R2,Y+
    0341 BE2F      OUT	0x3F,R2
    0342 9199      LD	R25,Y+
    0343 9189      LD	R24,Y+
    0344 9029      LD	R2,Y+
    0345 9518      RETI
(0021) }
(0022) 
(0023) void	main(void)
(0024) {	SysIntial();
_main:
    0346 D01E      RCALL	_SysIntial
    0347 C01B      RJMP	0x0363
(0025) 	//LCD_write_string(0,0,"Welcome");
(0026) 	while(1)
(0027) 	{	
(0028) 		if( ScanKeyFlag == 1 )
    0348 91800062  LDS	R24,ScanKeyFlag
    034A 3081      CPI	R24,1
    034B F439      BNE	0x0353
(0029) 		{	if( ScanKey() == 1 )
    034C DE59      RCALL	_ScanKey
    034D 3001      CPI	R16,1
    034E F409      BNE	0x0350
(0030) 			{	DealKey();	}
    034F DEC9      RCALL	_DealKey
(0031) 			ScanKeyFlag = 0;	
    0350 2422      CLR	R2
    0351 92200062  STS	ScanKeyFlag,R2
(0032) 		}
(0033) 		
(0034) 		if( DispTimeFlag == 1 )
    0353 91800063  LDS	R24,DispTimeFlag
    0355 3081      CPI	R24,1
    0356 F421      BNE	0x035B
(0035) 		{	DispTime();	
    0357 DECA      RCALL	_DispTime
(0036) 			DispTimeFlag = 0;	
    0358 2422      CLR	R2
    0359 92200063  STS	DispTimeFlag,R2
(0037) 		}
(0038) 		
(0039) 		if( TimeAddFlag == 1 )
    035B 91800064  LDS	R24,TimeAddFlag
    035D 3081      CPI	R24,1
    035E F421      BNE	0x0363
(0040) 		{	TimeAdd();	TimeAddFlag = 0;	}
    035F DF24      RCALL	_TimeAdd
    0360 2422      CLR	R2
    0361 92200064  STS	TimeAddFlag,R2
    0363 CFE4      RJMP	0x0348
    0364 9508      RET
(0041) 	}	
(0042) }
(0043) 
(0044) void	SysIntial(void)
(0045) {	InitalKey();
_SysIntial:
    0365 DE3B      RCALL	_InitalKey
(0046) 	LCD_init();
    0366 DCEB      RCALL	_LCD_init
(0047) 	
(0048) 	SysTCNT = SysTime;							//计算溢出个数
    0367 E88F      LDI	R24,0x8F
    0368 EF9D      LDI	R25,0xFD
    0369 BD9D      OUT	0x2D,R25
    036A BD8C      OUT	0x2C,R24
(0049) 	SysTIMSK |= 1 << TOIE1;						//开启系统时钟溢出中断
    036B B789      IN	R24,0x39
    036C 6084      ORI	R24,4
    036D BF89      OUT	0x39,R24
(0050) 	SREG |= 0x80;					//enable grobal interrupt
    036E 9478      BSET	7
(0051) 	SysTCCR = SysIspEn;
FILE: <library>
    036F E084      LDI	R24,4
    0370 BD8E      OUT	0x2E,R24
    0371 9508      RET
mod16u:
    0372 9468      BSET	6
    0373 C001      RJMP	xdiv16u
div16u:
    0374 94E8      BCLR	6
xdiv16u:
    0375 92EA      ST	R14,-Y
    0376 92FA      ST	R15,-Y
    0377 938A      ST	R24,-Y
    0378 24EE      CLR	R14
    0379 24FF      CLR	R15
    037A E180      LDI	R24,0x10
    037B 0F00      LSL	R16
    037C 1F11      ROL	R17
    037D 1CEE      ROL	R14
    037E 1CFF      ROL	R15
    037F 16E2      CP	R14,R18
    0380 06F3      CPC	R15,R19
    0381 F018      BCS	0x0385
    0382 1AE2      SUB	R14,R18
    0383 0AF3      SBC	R15,R19
    0384 9503      INC	R16
    0385 958A      DEC	R24
    0386 F7A1      BNE	0x037B
    0387 F416      BRTC	0x038A
    0388 2D0E      MOV	R16,R14
    0389 2D1F      MOV	R17,R15
    038A 9189      LD	R24,Y+
    038B 90F9      LD	R15,Y+
    038C 90E9      LD	R14,Y+
    038D 9508      RET
mod8u:
    038E 9468      BSET	6
    038F C001      RJMP	xdiv8u
div8u:
    0390 94E8      BCLR	6
xdiv8u:
    0391 932A      ST	R18,-Y
    0392 92FA      ST	R15,-Y
    0393 92EA      ST	R14,-Y
    0394 24FF      CLR	R15
    0395 24EE      CLR	R14
    0396 E120      LDI	R18,0x10
    0397 0F00      LSL	R16
    0398 1CFF      ROL	R15
    0399 1CEE      ROL	R14
    039A 16E1      CP	R14,R17
    039B F010      BCS	0x039E
    039C 1AE1      SUB	R14,R17
    039D 9503      INC	R16
    039E 952A      DEC	R18
    039F F7B9      BNE	0x0397
    03A0 F40E      BRTC	0x03A2
    03A1 2D0E      MOV	R16,R14
    03A2 90E9      LD	R14,Y+
    03A3 90F9      LD	R15,Y+
    03A4 9129      LD	R18,Y+
    03A5 9508      RET
pop_gset2:
    03A6 E0E2      LDI	R30,2
    03A7 940C03BB  JMP	pop
pop_gset3:
    03A9 E0E4      LDI	R30,4
    03AA 940C03BB  JMP	pop
pop_gset4:
    03AC E0E8      LDI	R30,0x8
    03AD 940C03BB  JMP	pop
push_gset5:
    03AF 92FA      ST	R15,-Y
    03B0 92EA      ST	R14,-Y
push_gset4:
    03B1 92DA      ST	R13,-Y
    03B2 92CA      ST	R12,-Y
push_gset3:
    03B3 92BA      ST	R11,-Y
    03B4 92AA      ST	R10,-Y
push_gset2:
    03B5 937A      ST	R23,-Y
    03B6 936A      ST	R22,-Y
push_gset1:
    03B7 935A      ST	R21,-Y
    03B8 934A      ST	R20,-Y
    03B9 9508      RET
pop_gset1:
    03BA E0E1      LDI	R30,1
pop:
    03BB 9149      LD	R20,Y+
    03BC 9159      LD	R21,Y+
    03BD FDE0      SBRC	R30,0
    03BE 9508      RET
    03BF 9169      LD	R22,Y+
    03C0 9179      LD	R23,Y+
    03C1 FDE1      SBRC	R30,1
    03C2 9508      RET
    03C3 90A9      LD	R10,Y+
    03C4 90B9      LD	R11,Y+
    03C5 FDE2      SBRC	R30,2
    03C6 9508      RET
    03C7 90C9      LD	R12,Y+
    03C8 90D9      LD	R13,Y+
    03C9 FDE3      SBRC	R30,3
    03CA 9508      RET
    03CB 90E9      LD	R14,Y+
    03CC 90F9      LD	R15,Y+
    03CD 9508      RET

⌨️ 快捷键说明

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