📄 ac15-2.lst
字号:
(0295) DisplayOneChar(10,0,(time1.min%10)+0x30);
02AF E01A LDI R17,0xA
02B0 91000067 LDS R16,time1+1
02B2 940E0423 CALL mod8u
02B4 2F80 MOV R24,R16
02B5 5D80 SUBI R24,0xD0
02B6 8388 STD Y+0,R24
02B7 2722 CLR R18
02B8 E00A LDI R16,0xA
02B9 DDE1 RCALL _DisplayOneChar
(0296) Delay_nms(10);
02BA E00A LDI R16,0xA
02BB E010 LDI R17,0
02BC DE4C RCALL _Delay_nms
(0297) DisplayOneChar(12,0,(time1.sec/10)+0x30);
02BD E01A LDI R17,0xA
02BE 91000068 LDS R16,time1+2
02C0 940E0425 CALL div8u
02C2 2F80 MOV R24,R16
02C3 5D80 SUBI R24,0xD0
02C4 8388 STD Y+0,R24
02C5 2722 CLR R18
02C6 E00C LDI R16,0xC
02C7 DDD3 RCALL _DisplayOneChar
(0298) Delay_nms(10);
02C8 E00A LDI R16,0xA
02C9 E010 LDI R17,0
02CA DE3E RCALL _Delay_nms
(0299) DisplayOneChar(13,0,(time1.sec%10)+0x30);
02CB E01A LDI R17,0xA
02CC 91000068 LDS R16,time1+2
02CE 940E0423 CALL mod8u
02D0 2F80 MOV R24,R16
02D1 5D80 SUBI R24,0xD0
02D2 8388 STD Y+0,R24
02D3 2722 CLR R18
02D4 E00D LDI R16,0xD
02D5 DDC5 RCALL _DisplayOneChar
(0300) Delay_nms(10);
02D6 E00A LDI R16,0xA
02D7 E010 LDI R17,0
02D8 DE30 RCALL _Delay_nms
(0301)
(0302) DisplayOneChar(7,1,(time2.hour/10)+0x30);
02D9 E01A LDI R17,0xA
02DA 91000062 LDS R16,time2
02DC 940E0425 CALL div8u
02DE 2F80 MOV R24,R16
02DF 5D80 SUBI R24,0xD0
02E0 8388 STD Y+0,R24
02E1 E021 LDI R18,1
02E2 E007 LDI R16,7
02E3 DDB7 RCALL _DisplayOneChar
(0303) Delay_nms(10);
02E4 E00A LDI R16,0xA
02E5 E010 LDI R17,0
02E6 DE22 RCALL _Delay_nms
(0304) DisplayOneChar(8,1,(time2.hour%10)+0x30);
02E7 E01A LDI R17,0xA
02E8 91000062 LDS R16,time2
02EA 940E0423 CALL mod8u
02EC 2F80 MOV R24,R16
02ED 5D80 SUBI R24,0xD0
02EE 8388 STD Y+0,R24
02EF E021 LDI R18,1
02F0 E008 LDI R16,0x8
02F1 DDA9 RCALL _DisplayOneChar
(0305) Delay_nms(10);
02F2 E00A LDI R16,0xA
02F3 E010 LDI R17,0
02F4 DE14 RCALL _Delay_nms
(0306) DisplayOneChar(10,1,(time2.min/10)+0x30);
02F5 E01A LDI R17,0xA
02F6 91000063 LDS R16,time2+1
02F8 940E0425 CALL div8u
02FA 2F80 MOV R24,R16
02FB 5D80 SUBI R24,0xD0
02FC 8388 STD Y+0,R24
02FD E021 LDI R18,1
02FE E00A LDI R16,0xA
02FF DD9B RCALL _DisplayOneChar
(0307) Delay_nms(10);
0300 E00A LDI R16,0xA
0301 E010 LDI R17,0
0302 DE06 RCALL _Delay_nms
(0308) DisplayOneChar(11,1,(time2.min%10)+0x30);
0303 E01A LDI R17,0xA
0304 91000063 LDS R16,time2+1
0306 940E0423 CALL mod8u
0308 2F80 MOV R24,R16
0309 5D80 SUBI R24,0xD0
030A 8388 STD Y+0,R24
030B E021 LDI R18,1
030C E00B LDI R16,0xB
030D DD8D RCALL _DisplayOneChar
(0309) Delay_nms(10);
030E E00A LDI R16,0xA
030F E010 LDI R17,0
0310 DDF8 RCALL _Delay_nms
(0310)
(0311) key_val=scan_key();
0311 DE13 RCALL _scan_key
0312 2F60 MOV R22,R16
(0312)
(0313) switch(key_val)
0313 2F46 MOV R20,R22
0314 2755 CLR R21
0315 3D4F CPI R20,0xDF
0316 E0E0 LDI R30,0
0317 075E CPC R21,R30
0318 F409 BNE 0x031A
0319 C041 RJMP 0x035B
031A ED8F LDI R24,0xDF
031B E090 LDI R25,0
031C 1784 CP R24,R20
031D 0795 CPC R25,R21
031E F084 BLT 0x032F
031F 374F CPI R20,0x7F
0320 E0E0 LDI R30,0
0321 075E CPC R21,R30
0322 F409 BNE 0x0324
0323 C05D RJMP 0x0381
0324 374F CPI R20,0x7F
0325 E0E0 LDI R30,0
0326 075E CPC R21,R30
0327 F40C BGE 0x0329
0328 C093 RJMP 0x03BC
0329 3B4F CPI R20,0xBF
032A E0E0 LDI R30,0
032B 075E CPC R21,R30
032C F409 BNE 0x032E
032D C03C RJMP 0x036A
032E C08D RJMP 0x03BC
032F 3F47 CPI R20,0xF7
0330 E0E0 LDI R30,0
0331 075E CPC R21,R30
0332 F409 BNE 0x0334
0333 C072 RJMP 0x03A6
0334 EF87 LDI R24,0xF7
0335 E090 LDI R25,0
0336 1784 CP R24,R20
0337 0795 CPC R25,R21
0338 F02C BLT 0x033E
0339 3E4F CPI R20,0xEF
033A E0E0 LDI R30,0
033B 075E CPC R21,R30
033C F039 BEQ 0x0344
033D C07E RJMP 0x03BC
033E 3F4B CPI R20,0xFB
033F E0E0 LDI R30,0
0340 075E CPC R21,R30
0341 F409 BNE 0x0343
0342 C04C RJMP 0x038F
0343 C078 RJMP 0x03BC
(0314) {
(0315) case 0xef:time1.min++;
0344 91800067 LDS R24,time1+1
0346 5F8F SUBI R24,0xFF
0347 93800067 STS time1+1,R24
(0316) if(time1.min>59){time1.min=0;
0349 E38B LDI R24,0x3B
034A 90200067 LDS R2,time1+1
034C 1582 CP R24,R2
034D F008 BCS 0x034F
034E C06D RJMP 0x03BC
034F 2422 CLR R2
0350 92200067 STS time1+1,R2
(0317) if(time1.hour<23)time1.hour++;
0352 91800066 LDS R24,time1
0354 3187 CPI R24,0x17
0355 F008 BCS 0x0357
0356 C065 RJMP 0x03BC
0357 5F8F SUBI R24,0xFF
0358 93800066 STS time1,R24
(0318) }break;
035A C061 RJMP 0x03BC
(0319) case 0xdf:time1.hour++;if(time1.hour>23)time1.hour=0;break; //加法调整"时"
035B 91800066 LDS R24,time1
035D 5F8F SUBI R24,0xFF
035E 93800066 STS time1,R24
0360 E187 LDI R24,0x17
0361 90200066 LDS R2,time1
0363 1582 CP R24,R2
0364 F008 BCS 0x0366
0365 C056 RJMP 0x03BC
0366 2422 CLR R2
0367 92200066 STS time1,R2
0369 C052 RJMP 0x03BC
(0320) case 0xbf:time2.min++;
036A 91800063 LDS R24,time2+1
036C 5F8F SUBI R24,0xFF
036D 93800063 STS time2+1,R24
(0321) if(time2.min>59){time2.min=0;
036F E38B LDI R24,0x3B
0370 90200063 LDS R2,time2+1
0372 1582 CP R24,R2
0373 F008 BCS 0x0375
0374 C047 RJMP 0x03BC
0375 2422 CLR R2
0376 92200063 STS time2+1,R2
(0322) if(time2.hour<23)time2.hour++;
0378 91800062 LDS R24,time2
037A 3187 CPI R24,0x17
037B F008 BCS 0x037D
037C C03F RJMP 0x03BC
037D 5F8F SUBI R24,0xFF
037E 93800062 STS time2,R24
(0323) }break;
0380 C03B RJMP 0x03BC
(0324) case 0x7f:time2.hour++;if(time2.hour>23)time2.hour=0;break;
0381 91800062 LDS R24,time2
0383 5F8F SUBI R24,0xFF
0384 93800062 STS time2,R24
0386 E187 LDI R24,0x17
0387 90200062 LDS R2,time2
0389 1582 CP R24,R2
038A F588 BCC 0x03BC
038B 2422 CLR R2
038C 92200062 STS time2,R2
038E C02D RJMP 0x03BC
(0325)
(0326) //*************************
(0327) case 0xfb:wr_24c01(11,time2.hour);
038F 91200062 LDS R18,time2
0391 E00B LDI R16,0xB
0392 DE8D RCALL _wr_24c01
(0328) Delay_nms(10);
0393 E00A LDI R16,0xA
0394 E010 LDI R17,0
0395 DD73 RCALL _Delay_nms
(0329) wr_24c01(12,time2.min);
0396 91200063 LDS R18,time2+1
0398 E00C LDI R16,0xC
0399 DE86 RCALL _wr_24c01
(0330) Delay_nms(10);
039A E00A LDI R16,0xA
039B E010 LDI R17,0
039C DD6C RCALL _Delay_nms
(0331) DisplayOneChar(13,1,0x57);
039D E587 LDI R24,0x57
039E 8388 STD Y+0,R24
039F E021 LDI R18,1
03A0 E00D LDI R16,0xD
03A1 DCF9 RCALL _DisplayOneChar
(0332) Delay_nms(10);break;
03A2 E00A LDI R16,0xA
03A3 E010 LDI R17,0
03A4 DD64 RCALL _Delay_nms
03A5 C016 RJMP 0x03BC
(0333) case 0xf7:time2.hour=rd_24c01(11);
03A6 E00B LDI R16,0xB
03A7 DE1B RCALL _rd_24c01
03A8 93000062 STS time2,R16
(0334) Delay_nms(10);
03AA E00A LDI R16,0xA
03AB E010 LDI R17,0
03AC DD5C RCALL _Delay_nms
(0335) time2.min=rd_24c01(12);
03AD E00C LDI R16,0xC
03AE DE14 RCALL _rd_24c01
03AF 93000063 STS time2+1,R16
(0336) Delay_nms(10);
03B1 E00A LDI R16,0xA
03B2 E010 LDI R17,0
03B3 DD55 RCALL _Delay_nms
(0337) DisplayOneChar(13,1,0x52);
03B4 E582 LDI R24,0x52
03B5 8388 STD Y+0,R24
03B6 E021 LDI R18,1
03B7 E00D LDI R16,0xD
03B8 DCE2 RCALL _DisplayOneChar
(0338) Delay_nms(10);break;
03B9 E00A LDI R16,0xA
03BA E010 LDI R17,0
03BB DD4D RCALL _Delay_nms
(0339) default:break;
(0340) }
(0341) Delay_nms(300);
03BC E20C LDI R16,0x2C
03BD E011 LDI R17,1
03BE DD4A RCALL _Delay_nms
(0342) DisplayOneChar(13,1,0x20);
03BF E280 LDI R24,0x20
03C0 8388 STD Y+0,R24
03C1 E021 LDI R18,1
03C2 E00D LDI R16,0xD
03C3 DCD7 RCALL _DisplayOneChar
(0343) Delay_nms(10);
03C4 E00A LDI R16,0xA
03C5 E010 LDI R17,0
03C6 DD42 RCALL _Delay_nms
03C7 CEBD RJMP 0x0285
03C8 9622 ADIW R28,2
03C9 9508 RET
_timer1_ovf_isr:
03CA 922A ST R2,-Y
03CB 923A ST R3,-Y
03CC 938A ST R24,-Y
03CD 939A ST R25,-Y
03CE B62F IN R2,0x3F
03CF 922A ST R2,-Y
(0344)
(0345) }
(0346) }
(0347) /*********************定时器T1中断子函数************************/
(0348) #pragma interrupt_handler timer1_ovf_isr:9
(0349) void timer1_ovf_isr(void)
(0350) {
(0351) //TIMER1 has overflowed
(0352) TCNT1H = 0xF3; //reload counter high value
03D0 EF83 LDI R24,0xF3
03D1 BD8D OUT 0x2D,R24
(0353) TCNT1L = 0xCB; //reload counter low value
03D2 EC8B LDI R24,0xCB
03D3 BD8C OUT 0x2C,R24
(0354) if(++time1.dida>=10){time1.dida=0;time1.sec++;}//计时
03D4 91800069 LDS R24,time1+3
03D6 5F8F SUBI R24,0xFF
03D7 2E28 MOV R2,R24
03D8 92200069 STS time1+3,R2
03DA 308A CPI R24,0xA
03DB F040 BCS 0x03E4
03DC 2422 CLR R2
03DD 92200069 STS time1+3,R2
03DF 91800068 LDS R24,time1+2
03E1 5F8F SUBI R24,0xFF
03E2 93800068 STS time1+2,R24
(0355) if(time1.sec>=60){time1.sec=0;time1.min++;}
03E4 91800068 LDS R24,time1+2
03E6 338C CPI R24,0x3C
03E7 F040 BCS 0x03F0
03E8 2422 CLR R2
03E9 92200068 STS time1+2,R2
03EB 91800067 LDS R24,time1+1
03ED 5F8F SUBI R24,0xFF
03EE 93800067 STS time1+1,R24
(0356) if(time1.min>=60){time1.min=0;time1.hour++;}
03F0 91800067 LDS R24,time1+1
03F2 338C CPI R24,0x3C
03F3 F040 BCS 0x03FC
03F4 2422 CLR R2
03F5 92200067 STS time1+1,R2
03F7 91800066 LDS R24,time1
03F9 5F8F SUBI R24,0xFF
03FA 93800066 STS time1,R24
(0357) if(time1.hour>=24){time1.hour=0;}
03FC 91800066 LDS R24,time1
03FE 3188 CPI R24,0x18
03FF F018 BCS 0x0403
0400 2422 CLR R2
0401 92200066 STS time1,R2
(0358) //-------------------
(0359) if((time1.hour==time2.hour)&&(time1.min==time2.min))LED_0;
0403 90200062 LDS R2,time2
0405 90300066 LDS R3,time1
0407 1432 CP R3,R2
0408 F441 BNE 0x0411
0409 90200063 LDS R2,time2+1
040B 90300067 LDS R3,time1+1
040D 1432 CP R3,R2
040E F411 BNE 0x0411
040F 98C7 CBI 0x18,7
0410 C001 RJMP 0x0412
(0360) else LED_1;
0411 9AC7 SBI 0x18,7
0412 9029 LD R2,Y+
0413 BE2F OUT 0x3F,R2
0414 9199 LD R25,Y+
0415 9189 LD R24,Y+
0416 9039 LD R3,Y+
0417 9029 LD R2,Y+
0418 9518 RETI
(0361) }
(0362) /**********************器件初始化***********************/
(0363) void init_devices(void)
(0364) {
(0365) //stop errant interrupts until set up
(0366) CLI(); //disable all interrupts
_init_devices:
0419 94F8 BCLR 7
(0367) port_init();
041A DCFD RCALL _port_init
(0368) timer1_init();
041B DE41 RCALL _timer1_init
(0369) MCUCR = 0x00;
041C 2422 CLR R2
041D BE25 OUT 0x35,R2
(0370) GICR = 0x00;
041E BE2B OUT 0x3B,R2
(0371) TIMSK = 0x04; //timer interrupt sources
041F E084 LDI R24,4
0420 BF89 OUT 0x39,R24
(0372) SEI(); //re-enable interrupts
FILE: <library>
0421 9478 BSET 7
0422 9508 RET
mod8u:
0423 9468 BSET 6
0424 C001 RJMP xdiv8u
div8u:
0425 94E8 BCLR 6
xdiv8u:
0426 932A ST R18,-Y
0427 92FA ST R15,-Y
0428 92EA ST R14,-Y
0429 24FF CLR R15
042A 24EE CLR R14
042B E120 LDI R18,0x10
042C 0F00 LSL R16
042D 1CFF ROL R15
042E 1CEE ROL R14
042F 16E1 CP R14,R17
0430 F010 BCS 0x0433
0431 1AE1 SUB R14,R17
0432 9503 INC R16
0433 952A DEC R18
0434 F7B9 BNE 0x042C
0435 F40E BRTC 0x0437
0436 2D0E MOV R16,R14
0437 90E9 LD R14,Y+
0438 90F9 LD R15,Y+
0439 9129 LD R18,Y+
043A 9508 RET
pop_gset2:
043B E0E2 LDI R30,2
043C 940C0450 JMP pop
pop_gset3:
043E E0E4 LDI R30,4
043F 940C0450 JMP pop
pop_gset5:
0441 27EE CLR R30
0442 940C0450 JMP pop
push_gset5:
0444 92FA ST R15,-Y
0445 92EA ST R14,-Y
push_gset4:
0446 92DA ST R13,-Y
0447 92CA ST R12,-Y
push_gset3:
0448 92BA ST R11,-Y
0449 92AA ST R10,-Y
push_gset2:
044A 937A ST R23,-Y
044B 936A ST R22,-Y
push_gset1:
044C 935A ST R21,-Y
044D 934A ST R20,-Y
044E 9508 RET
pop_gset1:
044F E0E1 LDI R30,1
pop:
0450 9149 LD R20,Y+
0451 9159 LD R21,Y+
0452 FDE0 SBRC R30,0
0453 9508 RET
0454 9169 LD R22,Y+
0455 9179 LD R23,Y+
0456 FDE1 SBRC R30,1
0457 9508 RET
0458 90A9 LD R10,Y+
0459 90B9 LD R11,Y+
045A FDE2 SBRC R30,2
045B 9508 RET
045C 90C9 LD R12,Y+
045D 90D9 LD R13,Y+
045E FDE3 SBRC R30,3
045F 9508 RET
0460 90E9 LD R14,Y+
0461 90F9 LD R15,Y+
0462 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -