📄 pcat.lst
字号:
__text_start:
__start:
0461 EFCF LDI R28,0xFF
0462 E0DF LDI R29,0xF
0463 BFCD OUT P3D,R28
0464 BFDE OUT P3E,R29
0465 51C0 SUBI R28,0x10
0466 40D0 SBCI R29,0
0467 EA0A LDI R16,0xAA
0468 8308 STD R16,0+Y
0469 2400 CLR R0
046A E1E9 LDI R30,0x19
046B E0F1 LDI R31,1
046C E011 LDI R17,1
046D 37E9 CPI R30,0x79
046E 07F1 CPC R31,R17
046F F011 BEQ 0x0472
0470 9201 ST R0,Z+
0471 CFFB RJMP 0x046D
0472 8300 STD R16,0+Z
0473 E0E9 LDI R30,0x9
0474 E0F8 LDI R31,0x8
0475 E6A0 LDI R26,0x60
0476 E0B0 LDI R27,0
0477 E018 LDI R17,0x8
0478 3CE2 CPI R30,0xC2
0479 07F1 CPC R31,R17
047A F021 BEQ 0x047F
047B 95C8 LPM
047C 9631 ADIW R30,1
047D 920D ST R0,X+
047E CFF9 RJMP 0x0478
047F D4C4 RCALL _main
0480 0000 NOP
_exit:
0481 CFFF RJMP _exit
FILE: D:\ICC-AVR\Pc_At\time.c
(0000) #include<iom103.h>
(0001) unsigned char second;
(0002) unsigned char minute;
(0003) unsigned char hour;
(0004) unsigned char time[9];
(0005) unsigned char sound=0;
(0006) extern unsigned char keytime;
(0007) extern unsigned char keypad(void);
(0008) void timer0_init(void)
(0009) {
(0010) TCCR0 = 0x00; //stop
_timer0_init:
0482 2422 CLR R2
0483 BE23 OUT P33,R2
(0011) ASSR = 0x08; //set async mode
0484 E088 LDI R24,0x8
0485 BF80 OUT P30,R24
(0012) TCNT0 = 0x00; //set count
0486 BE22 OUT P32,R2
(0013) TCCR0 = 0x05; //start timer
0487 E085 LDI R24,5
0488 BF83 OUT P33,R24
(0014) }
0489 9508 RET
_timer0_ovf_isr:
048A 922A ST R2,-Y
048B 938A ST R24,-Y
048C 939A ST R25,-Y
048D B62F IN R2,P3F
048E 922A ST R2,-Y
(0015) #pragma interrupt_handler timer0_ovf_isr:17
(0016) void timer0_ovf_isr(void)
(0017) {
(0018) TCNT0 = 0x00; //reload counter value
048F 2422 CLR R2
0490 BE22 OUT P32,R2
(0019) keytime++;
0491 91800129 LDS R24,_keytime
0493 5F8F SUBI R24,0xFF
0494 93800129 STS R24,_keytime
(0020) if(second>=59)
0496 91800126 LDS R24,_second
0498 338B CPI R24,0x3B
0499 F0D8 BCS 0x04B5
(0021) {
(0022) second=0;
049A 92200126 STS R2,_second
(0023) if(minute>=59)
049C 91800125 LDS R24,_minute
049E 338B CPI R24,0x3B
049F F078 BCS 0x04AF
(0024) {
(0025) minute=0;
04A0 92200125 STS R2,_minute
(0026) if(hour>=23)
04A2 91800124 LDS R24,_hour
04A4 3187 CPI R24,0x17
04A5 F018 BCS 0x04A9
(0027) {
(0028) hour=0;
04A6 92200124 STS R2,_hour
(0029) }
04A8 C011 RJMP 0x04BA
(0030) else
(0031) {
(0032) hour++;
04A9 91800124 LDS R24,_hour
04AB 5F8F SUBI R24,0xFF
04AC 93800124 STS R24,_hour
(0033) }
(0034) }
04AE C00B RJMP 0x04BA
(0035) else
(0036) {
(0037) minute++;
04AF 91800125 LDS R24,_minute
04B1 5F8F SUBI R24,0xFF
04B2 93800125 STS R24,_minute
(0038) }
(0039) }
04B4 C005 RJMP 0x04BA
(0040) else
(0041) {
(0042) second++;
04B5 91800126 LDS R24,_second
04B7 5F8F SUBI R24,0xFF
04B8 93800126 STS R24,_second
(0043) }
(0044) if((PIND&0b00100000)==0) sound=1;
04BA 9985 SBIC P10,5
04BB C003 RJMP 0x04BF
04BC E081 LDI R24,1
04BD 93800060 STS R24,0x60
(0045) if (minute==0)
04BF 90200125 LDS R2,_minute
04C1 2022 TST R2
04C2 F461 BNE 0x04CF
(0046) {
(0047) if (sound==0)
04C3 90200060 LDS R2,0x60
04C5 2022 TST R2
04C6 F421 BNE 0x04CB
(0048) TIMSK|=0x40;
04C7 B787 IN R24,P37
04C8 6480 ORI R24,0x40
04C9 BF87 OUT P37,R24
04CA C00A RJMP 0x04D5
(0049) else
(0050) TIMSK&=0xbf;
04CB B787 IN R24,P37
04CC 7B8F ANDI R24,0xBF
04CD BF87 OUT P37,R24
(0051) }
04CE C006 RJMP 0x04D5
(0052) else
(0053) {
(0054) TIMSK&=0xbf;
04CF B787 IN R24,P37
04D0 7B8F ANDI R24,0xBF
04D1 BF87 OUT P37,R24
(0055) sound=0;
04D2 2422 CLR R2
04D3 92200060 STS R2,0x60
(0056) }
(0057) }
04D5 9029 LD R2,Y+
04D6 BE2F OUT P3F,R2
04D7 9199 LD R25,Y+
04D8 9189 LD R24,Y+
04D9 9029 LD R2,Y+
04DA 9518 RETI
_timetoasc:
temp --> R20
i --> R22
04DB 940E0D0B CALL push_gset2
04DD 9724 SBIW R28,4
(0058) void timetoasc(void)
(0059) {
(0060) unsigned char i;
(0061) unsigned char temp;
(0062) temp=hour;
04DE 91400124 LDS R20,_hour
(0063) for(i=0;i<2;i++)
04E0 2766 CLR R22
04E1 C017 RJMP 0x04F9
(0064) {
(0065) time[1-i]=temp%10+0x30;
04E2 2E26 MOV R2,R22
04E3 2433 CLR R3
04E4 E0E1 LDI R30,1
04E5 E0F0 LDI R31,0
04E6 19E2 SUB R30,R2
04E7 09F3 SBC R31,R3
04E8 E18B LDI R24,0x1B
04E9 E091 LDI R25,1
04EA 0FE8 ADD R30,R24
04EB 1FF9 ADC R31,R25
04EC E01A LDI R17,0xA
04ED 2F04 MOV R16,R20
04EE 940E0C97 CALL mod8u
04F0 2F80 MOV R24,R16
04F1 5D80 SUBI R24,0xD0
04F2 8380 STD R24,0+Z
(0066) temp=temp/10;
04F3 E01A LDI R17,0xA
04F4 2F04 MOV R16,R20
04F5 940E0C99 CALL div8u
04F7 2F40 MOV R20,R16
(0067) }
04F8 9563 INC R22
04F9 3062 CPI R22,2
04FA F338 BCS 0x04E2
(0068) time[2]=':';
04FB E38A LDI R24,0x3A
04FC 9380011D STS R24,_time+2
(0069) temp=minute;
04FE 91400125 LDS R20,_minute
(0070) for(i=0;i<2;i++)
0500 2766 CLR R22
0501 C017 RJMP 0x0519
(0071) {
(0072) time[4-i]=temp%10+0x30;
0502 2E26 MOV R2,R22
0503 2433 CLR R3
0504 E0E4 LDI R30,4
0505 E0F0 LDI R31,0
0506 19E2 SUB R30,R2
0507 09F3 SBC R31,R3
0508 E18B LDI R24,0x1B
0509 E091 LDI R25,1
050A 0FE8 ADD R30,R24
050B 1FF9 ADC R31,R25
050C E01A LDI R17,0xA
050D 2F04 MOV R16,R20
050E 940E0C97 CALL mod8u
0510 2F80 MOV R24,R16
0511 5D80 SUBI R24,0xD0
0512 8380 STD R24,0+Z
(0073) temp=temp/10;
0513 E01A LDI R17,0xA
0514 2F04 MOV R16,R20
0515 940E0C99 CALL div8u
0517 2F40 MOV R20,R16
(0074) }
0518 9563 INC R22
0519 3062 CPI R22,2
051A F338 BCS 0x0502
(0075) time[5]=':';
051B E38A LDI R24,0x3A
051C 93800120 STS R24,0x120
(0076) temp=second;
051E 91400126 LDS R20,_second
(0077) for(i=0;i<2;i++)
0520 2766 CLR R22
0521 C017 RJMP 0x0539
(0078) {
(0079) time[7-i]=temp%10+0x30;
0522 2E26 MOV R2,R22
0523 2433 CLR R3
0524 E0E7 LDI R30,7
0525 E0F0 LDI R31,0
0526 19E2 SUB R30,R2
0527 09F3 SBC R31,R3
0528 E18B LDI R24,0x1B
0529 E091 LDI R25,1
052A 0FE8 ADD R30,R24
052B 1FF9 ADC R31,R25
052C E01A LDI R17,0xA
052D 2F04 MOV R16,R20
052E 940E0C97 CALL mod8u
0530 2F80 MOV R24,R16
0531 5D80 SUBI R24,0xD0
0532 8380 STD R24,0+Z
(0080) temp=temp/10;
0533 E01A LDI R17,0xA
0534 2F04 MOV R16,R20
0535 940E0C99 CALL div8u
0537 2F40 MOV R20,R16
(0081) }
0538 9563 INC R22
0539 3062 CPI R22,2
053A F338 BCS 0x0522
(0082) time[8]=0;
053B 2422 CLR R2
053C 92200123 STS R2,0x123
053E 940E0D9D CALL 0xD9D
(0083) cls(0,3,1,8);
0540 D1FA RCALL _cls
0541 940E0DD6 CALL 0xDD6
(0084) asc_tran(4,52,time);
0543 D289 RCALL _asc_tran
0544 0000 NOP
(0085) }
0545 9624 ADIW R28,4
0546 940E0D1B CALL pop_gset2
0548 9508 RET
(0086) void timer2_init(void)
(0087) {
(0088) TCCR2 = 0x00;
_timer2_init:
0549 2422 CLR R2
054A BC25 OUT P25,R2
(0089) TCNT2 = 0xe1;
054B EE81 LDI R24,0xE1
054C BD84 OUT P24,R24
(0090) TCCR2 = 0x03;
054D E083 LDI R24,3
054E BD85 OUT P25,R24
(0091) }
054F 9508 RET
_timer2_ovf_isr:
0550 922A ST R2,-Y
0551 923A ST R3,-Y
0552 938A ST R24,-Y
0553 939A ST R25,-Y
0554 93EA ST R30,-Y
0555 B62F IN R2,P3F
0556 922A ST R2,-Y
(0092) #pragma interrupt_handler timer2_ovf_isr:11
(0093) void timer2_ovf_isr(void)
(0094) {
(0095) static unsigned int i;
(0096) TCNT2 = 0xe1; //reload counter value
0557 EE81 LDI R24,0xE1
0558 BD84 OUT P24,R24
(0097) i++;
0559 9190011A LDS R25,0x11A
055B 91800119 LDS R24,0x119
055D 9601 ADIW R24,1
055E 9390011A STS R25,0x11A
0560 93800119 STS R24,0x119
(0098) if(i<800)
0562 3280 CPI R24,0x20
0563 E0E3 LDI R30,3
0564 079E CPC R25,R30
0565 F420 BCC 0x056A
(0099) {
(0100) PORTB^=0x80;
0566 E880 LDI R24,0x80
0567 B228 IN R2,P18
0568 2628 EOR R2,R24
0569 BA28 OUT P18,R2
(0101) }
(0102) if(i>1600)
056A E480 LDI R24,0x40
056B E096 LDI R25,6
056C 9030011A LDS R3,0x11A
056E 90200119 LDS R2,0x119
0570 1582 CP R24,R2
0571 0593 CPC R25,R3
0572 F430 BCC 0x0579
(0103) i=0;
0573 2422 CLR R2
0574 2433 CLR R3
0575 9230011A STS R3,0x11A
0577 92200119 STS R2,0x119
(0104) }
0579 9029 LD R2,Y+
057A BE2F OUT P3F,R2
057B 91E9 LD R30,Y+
057C 9199 LD R25,Y+
057D 9189 LD R24,Y+
057E 9039 LD R3,Y+
057F 9029 LD R2,Y+
0580 9518 RETI
_timecal:
step --> R10
temp --> R20
0581 940E0D17 CALL push_gset5
0583 9724 SBIW R28,4
(0105) void timecal(void)
(0106) {
(0107) unsigned char temp,step;
(0108) ocmj_write(0xf4);
0584 EF04 LDI R16,0xF4
0585 E010 LDI R17,0
0586 D181 RCALL _ocmj_write
0587 0000 NOP
(0109) hz_tran(2,1,"输入时间");
0588 E788 LDI R24,0x78
0589 940E0D98 CALL 0xD98
058B E030 LDI R19,0
058C E002 LDI R16,2
058D E010 LDI R17,0
058E D21A RCALL _hz_tran
058F 0000 NOP
(0110) hz_tran(1,2,"按");
0590 E785 LDI R24,0x75
0591 940E0DBC CALL 0xDBC
0593 E030 LDI R19,0
0594 E001 LDI R16,1
0595 E010 LDI R17,0
0596 D212 RCALL _hz_tran
0597 0000 NOP
(0111) asc_tran(4,36,"SHIFT");
0598 E68F LDI R24,0x6F
0599 E090 LDI R25,0
059A 8388 STD R24,0+Y
059B 8399 STD R25,1+Y
059C E224 LDI R18,0x24
059D E030 LDI R19,0
059E E004 LDI R16,4
059F E010 LDI R17,0
05A0 D22C RCALL _asc_tran
05A1 0000 NOP
(0112) hz_tran(5,2,"确定");
05A2 E68A LDI R24,0x6A
05A3 940E0DBC CALL 0xDBC
05A5 E030 LDI R19,0
05A6 E005 LDI R16,5
05A7 E010 LDI R17,0
05A8 D200 RCALL _hz_tran
05A9 0000 NOP
(0113) asc_tran(4,52,"__:__:__");
05AA E681 LDI R24,0x61
05AB E090 LDI R25,0
05AC 8388 STD R24,0+Y
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -