📄 ac15-4.lst
字号:
0256 F409 BNE 0x0258
0257 C041 RJMP 0x0299
0258 ED8F LDI R24,0xDF
0259 E090 LDI R25,0
025A 1784 CP R24,R20
025B 0795 CPC R25,R21
025C F084 BLT 0x026D
025D 374F CPI R20,0x7F
025E E0E0 LDI R30,0
025F 075E CPC R21,R30
0260 F409 BNE 0x0262
0261 C05D RJMP 0x02BF
0262 374F CPI R20,0x7F
0263 E0E0 LDI R30,0
0264 075E CPC R21,R30
0265 F40C BGE 0x0267
0266 C093 RJMP 0x02FA
0267 3B4F CPI R20,0xBF
0268 E0E0 LDI R30,0
0269 075E CPC R21,R30
026A F409 BNE 0x026C
026B C03C RJMP 0x02A8
026C C08D RJMP 0x02FA
026D 3F47 CPI R20,0xF7
026E E0E0 LDI R30,0
026F 075E CPC R21,R30
0270 F409 BNE 0x0272
0271 C072 RJMP 0x02E4
0272 EF87 LDI R24,0xF7
0273 E090 LDI R25,0
0274 1784 CP R24,R20
0275 0795 CPC R25,R21
0276 F02C BLT 0x027C
0277 3E4F CPI R20,0xEF
0278 E0E0 LDI R30,0
0279 075E CPC R21,R30
027A F039 BEQ 0x0282
027B C07E RJMP 0x02FA
027C 3F4B CPI R20,0xFB
027D E0E0 LDI R30,0
027E 075E CPC R21,R30
027F F409 BNE 0x0281
0280 C04C RJMP 0x02CD
0281 C078 RJMP 0x02FA
(0275) {
(0276) case 0xef:time1.min++;
0282 91800065 LDS R24,time1+1
0284 5F8F SUBI R24,0xFF
0285 93800065 STS time1+1,R24
(0277) if(time1.min>59){time1.min=0;
0287 E38B LDI R24,0x3B
0288 90200065 LDS R2,time1+1
028A 1582 CP R24,R2
028B F008 BCS 0x028D
028C C06D RJMP 0x02FA
028D 2422 CLR R2
028E 92200065 STS time1+1,R2
(0278) if(time1.hour<23)time1.hour++;
0290 91800064 LDS R24,time1
0292 3187 CPI R24,0x17
0293 F008 BCS 0x0295
0294 C065 RJMP 0x02FA
0295 5F8F SUBI R24,0xFF
0296 93800064 STS time1,R24
(0279) }break;
0298 C061 RJMP 0x02FA
(0280) case 0xdf:time1.hour++;if(time1.hour>23)time1.hour=0;break;
0299 91800064 LDS R24,time1
029B 5F8F SUBI R24,0xFF
029C 93800064 STS time1,R24
029E E187 LDI R24,0x17
029F 90200064 LDS R2,time1
02A1 1582 CP R24,R2
02A2 F008 BCS 0x02A4
02A3 C056 RJMP 0x02FA
02A4 2422 CLR R2
02A5 92200064 STS time1,R2
02A7 C052 RJMP 0x02FA
(0281)
(0282) case 0xbf:time2.min++;
02A8 91800061 LDS R24,time2+1
02AA 5F8F SUBI R24,0xFF
02AB 93800061 STS time2+1,R24
(0283) if(time2.min>59){time2.min=0;
02AD E38B LDI R24,0x3B
02AE 90200061 LDS R2,time2+1
02B0 1582 CP R24,R2
02B1 F008 BCS 0x02B3
02B2 C047 RJMP 0x02FA
02B3 2422 CLR R2
02B4 92200061 STS time2+1,R2
(0284) if(time2.hour<23)time2.hour++;
02B6 91800060 LDS R24,time2
02B8 3187 CPI R24,0x17
02B9 F008 BCS 0x02BB
02BA C03F RJMP 0x02FA
02BB 5F8F SUBI R24,0xFF
02BC 93800060 STS time2,R24
(0285) }break;
02BE C03B RJMP 0x02FA
(0286) case 0x7f:time2.hour++;if(time2.hour>23)time2.hour=0;break;
02BF 91800060 LDS R24,time2
02C1 5F8F SUBI R24,0xFF
02C2 93800060 STS time2,R24
02C4 E187 LDI R24,0x17
02C5 90200060 LDS R2,time2
02C7 1582 CP R24,R2
02C8 F588 BCC 0x02FA
02C9 2422 CLR R2
02CA 92200060 STS time2,R2
02CC C02D RJMP 0x02FA
(0287)
(0288) //*************************
(0289) case 0xfb:i2c_Write(11,time2.hour);
02CD 91200060 LDS R18,time2
02CF E00B LDI R16,0xB
02D0 DE8D RCALL _i2c_Write
(0290) delay_ms(10);
02D1 E00A LDI R16,0xA
02D2 E010 LDI R17,0
02D3 D08D RCALL _delay_ms
(0291) i2c_Write(12,time2.min);
02D4 91200061 LDS R18,time2+1
02D6 E00C LDI R16,0xC
02D7 DE86 RCALL _i2c_Write
(0292) delay_ms(10);
02D8 E00A LDI R16,0xA
02D9 E010 LDI R17,0
02DA D086 RCALL _delay_ms
(0293) DisplayOneChar(13,1,0x57);
02DB E587 LDI R24,0x57
02DC 8388 STD Y+0,R24
02DD E021 LDI R18,1
02DE E00D LDI R16,0xD
02DF DDBB RCALL _DisplayOneChar
(0294) delay_ms(10);break;
02E0 E00A LDI R16,0xA
02E1 E010 LDI R17,0
02E2 D07E RCALL _delay_ms
02E3 C016 RJMP 0x02FA
(0295) case 0xf7:time2.hour=i2c_Read(11);
02E4 E00B LDI R16,0xB
02E5 DE28 RCALL _i2c_Read
02E6 93000060 STS time2,R16
(0296) delay_ms(10);
02E8 E00A LDI R16,0xA
02E9 E010 LDI R17,0
02EA D076 RCALL _delay_ms
(0297) time2.min=i2c_Read(12);
02EB E00C LDI R16,0xC
02EC DE21 RCALL _i2c_Read
02ED 93000061 STS time2+1,R16
(0298) delay_ms(10);
02EF E00A LDI R16,0xA
02F0 E010 LDI R17,0
02F1 D06F RCALL _delay_ms
(0299) DisplayOneChar(13,1,0x52);
02F2 E582 LDI R24,0x52
02F3 8388 STD Y+0,R24
02F4 E021 LDI R18,1
02F5 E00D LDI R16,0xD
02F6 DDA4 RCALL _DisplayOneChar
(0300) delay_ms(10);break;
02F7 E00A LDI R16,0xA
02F8 E010 LDI R17,0
02F9 D067 RCALL _delay_ms
(0301) default:break;
(0302) }
(0303) delay_ms(300);
02FA E20C LDI R16,0x2C
02FB E011 LDI R17,1
02FC D064 RCALL _delay_ms
(0304) DisplayOneChar(13,1,0x20);
02FD E280 LDI R24,0x20
02FE 8388 STD Y+0,R24
02FF E021 LDI R18,1
0300 E00D LDI R16,0xD
0301 DD99 RCALL _DisplayOneChar
(0305) delay_ms(10);
0302 E00A LDI R16,0xA
0303 E010 LDI R17,0
0304 D05C RCALL _delay_ms
0305 CEBD RJMP 0x01C3
0306 9622 ADIW R28,2
0307 9508 RET
_timer1_ovf_isr:
0308 922A ST R2,-Y
0309 923A ST R3,-Y
030A 938A ST R24,-Y
030B 939A ST R25,-Y
030C B62F IN R2,0x3F
030D 922A ST R2,-Y
(0306)
(0307) }
(0308) }
(0309) /***********************定时器T1中断子函数**********************/
(0310) #pragma interrupt_handler timer1_ovf_isr:9
(0311) void timer1_ovf_isr(void)
(0312) {
(0313) //TIMER1 has overflowed
(0314) TCNT1H = 0xF3; //reload counter high value
030E EF83 LDI R24,0xF3
030F BD8D OUT 0x2D,R24
(0315) TCNT1L = 0xCB; //reload counter low value
0310 EC8B LDI R24,0xCB
0311 BD8C OUT 0x2C,R24
(0316) if(++time1.dida>=10){time1.dida=0;time1.sec++;}
0312 91800067 LDS R24,time1+3
0314 5F8F SUBI R24,0xFF
0315 2E28 MOV R2,R24
0316 92200067 STS time1+3,R2
0318 308A CPI R24,0xA
0319 F040 BCS 0x0322
031A 2422 CLR R2
031B 92200067 STS time1+3,R2
031D 91800066 LDS R24,time1+2
031F 5F8F SUBI R24,0xFF
0320 93800066 STS time1+2,R24
(0317) if(time1.sec>=60){time1.sec=0;time1.min++;}
0322 91800066 LDS R24,time1+2
0324 338C CPI R24,0x3C
0325 F040 BCS 0x032E
0326 2422 CLR R2
0327 92200066 STS time1+2,R2
0329 91800065 LDS R24,time1+1
032B 5F8F SUBI R24,0xFF
032C 93800065 STS time1+1,R24
(0318) if(time1.min>=60){time1.min=0;time1.hour++;}
032E 91800065 LDS R24,time1+1
0330 338C CPI R24,0x3C
0331 F040 BCS 0x033A
0332 2422 CLR R2
0333 92200065 STS time1+1,R2
0335 91800064 LDS R24,time1
0337 5F8F SUBI R24,0xFF
0338 93800064 STS time1,R24
(0319) if(time1.hour>=24){time1.hour=0;}
033A 91800064 LDS R24,time1
033C 3188 CPI R24,0x18
033D F018 BCS 0x0341
033E 2422 CLR R2
033F 92200064 STS time1,R2
(0320) //-------------------
(0321) if((time1.hour==time2.hour)&&(time1.min==time2.min))LED_0;
0341 90200060 LDS R2,time2
0343 90300064 LDS R3,time1
0345 1432 CP R3,R2
0346 F441 BNE 0x034F
0347 90200061 LDS R2,time2+1
0349 90300065 LDS R3,time1+1
034B 1432 CP R3,R2
034C F411 BNE 0x034F
034D 98C7 CBI 0x18,7
034E C001 RJMP 0x0350
(0322) else LED_1;
034F 9AC7 SBI 0x18,7
0350 9029 LD R2,Y+
0351 BE2F OUT 0x3F,R2
0352 9199 LD R25,Y+
0353 9189 LD R24,Y+
0354 9039 LD R3,Y+
0355 9029 LD R2,Y+
0356 9518 RETI
(0323) }
(0324) /*********************************************/
(0325) void init_devices(void)
(0326) {
(0327) //stop errant interrupts until set up
(0328) CLI(); //disable all interrupts
_init_devices:
0357 94F8 BCLR 7
(0329) port_init();
0358 DDA6 RCALL _port_init
(0330) timer1_init();
0359 DE41 RCALL _timer1_init
(0331) MCUCR = 0x00;
035A 2422 CLR R2
035B BE25 OUT 0x35,R2
(0332) GICR = 0x00;
035C BE2B OUT 0x3B,R2
(0333) TIMSK = 0x04; //timer interrupt sources
035D E084 LDI R24,4
035E BF89 OUT 0x39,R24
(0334) SEI(); //re-enable interrupts
035F 9478 BSET 7
0360 9508 RET
_delay_ms:
time --> R20
0361 940E03A1 CALL push_gset1
0363 01A8 MOVW R20,R16
(0335) //all peripherals are now initialized
(0336) }
(0337)
(0338) /*******************器件初始化********************/
(0339) void delay_ms(unsigned int time)
(0340) {
0364 C005 RJMP 0x036A
(0341) while(time!=0)
(0342) {
(0343) delay_us(1000);
0365 EE08 LDI R16,0xE8
0366 E013 LDI R17,3
0367 D008 RCALL _delay_us
(0344) time--;
0368 5041 SUBI R20,1
0369 4050 SBCI R21,0
036A 3040 CPI R20,0
036B 0745 CPC R20,R21
036C F7C1 BNE 0x0365
036D 940E03A4 CALL pop_gset1
036F 9508 RET
(0345) }
(0346) }
(0347)
(0348) /*****************廷时子函数************************/
(0349) void delay_us(int time)
(0350) {
(0351) do
(0352) {
(0353) time--;
_delay_us:
time --> R16
0370 5001 SUBI R16,1
0371 4010 SBCI R17,0
(0354) }
(0355) while (time>1);
FILE: <library>
0372 E081 LDI R24,1
0373 E090 LDI R25,0
0374 1780 CP R24,R16
0375 0791 CPC R25,R17
0376 F3CC BLT 0x0370
0377 9508 RET
mod8u:
0378 9468 BSET 6
0379 C001 RJMP xdiv8u
div8u:
037A 94E8 BCLR 6
xdiv8u:
037B 932A ST R18,-Y
037C 92FA ST R15,-Y
037D 92EA ST R14,-Y
037E 24FF CLR R15
037F 24EE CLR R14
0380 E120 LDI R18,0x10
0381 0F00 LSL R16
0382 1CFF ROL R15
0383 1CEE ROL R14
0384 16E1 CP R14,R17
0385 F010 BCS 0x0388
0386 1AE1 SUB R14,R17
0387 9503 INC R16
0388 952A DEC R18
0389 F7B9 BNE 0x0381
038A F40E BRTC 0x038C
038B 2D0E MOV R16,R14
038C 90E9 LD R14,Y+
038D 90F9 LD R15,Y+
038E 9129 LD R18,Y+
038F 9508 RET
pop_gset2:
0390 E0E2 LDI R30,2
0391 940C03A5 JMP pop
pop_gset3:
0393 E0E4 LDI R30,4
0394 940C03A5 JMP pop
pop_gset5:
0396 27EE CLR R30
0397 940C03A5 JMP pop
push_gset5:
0399 92FA ST R15,-Y
039A 92EA ST R14,-Y
push_gset4:
039B 92DA ST R13,-Y
039C 92CA ST R12,-Y
push_gset3:
039D 92BA ST R11,-Y
039E 92AA ST R10,-Y
push_gset2:
039F 937A ST R23,-Y
03A0 936A ST R22,-Y
push_gset1:
03A1 935A ST R21,-Y
03A2 934A ST R20,-Y
03A3 9508 RET
pop_gset1:
03A4 E0E1 LDI R30,1
pop:
03A5 9149 LD R20,Y+
03A6 9159 LD R21,Y+
03A7 FDE0 SBRC R30,0
03A8 9508 RET
03A9 9169 LD R22,Y+
03AA 9179 LD R23,Y+
03AB FDE1 SBRC R30,1
03AC 9508 RET
03AD 90A9 LD R10,Y+
03AE 90B9 LD R11,Y+
03AF FDE2 SBRC R30,2
03B0 9508 RET
03B1 90C9 LD R12,Y+
03B2 90D9 LD R13,Y+
03B3 FDE3 SBRC R30,3
03B4 9508 RET
03B5 90E9 LD R14,Y+
03B6 90F9 LD R15,Y+
03B7 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -