📄 timer.lst
字号:
(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 + -