📄 2.lis
字号:
04A8 30E0 ldi R19,0
04AA 00910500 lds R16,_month
04AE 1127 clr R17
04B0 0E940000 xcall div16s
04B4 F801 movw R30,R16
04B6 80E0 ldi R24,<_table
04B8 90E0 ldi R25,>_table
04BA E80F add R30,R24
04BC F91F adc R31,R25
04BE 2490 lpm R2,Z
04C0 3324 clr R3
04C2 3B82 std y+3,R3
04C4 2A82 std y+2,R2
04C6 80E1 ldi R24,16
04C8 90E0 ldi R25,0
04CA 9983 std y+1,R25
04CC 8883 std y+0,R24
04CE 2AE0 ldi R18,10
04D0 30E0 ldi R19,0
04D2 09EF ldi R16,249
04D4 10E0 ldi R17,0
04D6 C0DD xcall _write_ASCII
04D8 .dbline 142
04D8 ; write_ASCII(0xf9,11,16,table[month%10]);//月份低位
04D8 2AE0 ldi R18,10
04DA 30E0 ldi R19,0
04DC 00910500 lds R16,_month
04E0 1127 clr R17
04E2 0E940000 xcall mod16s
04E6 F801 movw R30,R16
04E8 80E0 ldi R24,<_table
04EA 90E0 ldi R25,>_table
04EC E80F add R30,R24
04EE F91F adc R31,R25
04F0 2490 lpm R2,Z
04F2 3324 clr R3
04F4 3B82 std y+3,R3
04F6 2A82 std y+2,R2
04F8 80E1 ldi R24,16
04FA 90E0 ldi R25,0
04FC 9983 std y+1,R25
04FE 8883 std y+0,R24
0500 2BE0 ldi R18,11
0502 30E0 ldi R19,0
0504 09EF ldi R16,249
0506 10E0 ldi R17,0
0508 A7DD xcall _write_ASCII
050A .dbline 143
050A ; write_ASCII(0xf9,14,16,table[days/10]);//日期高位
050A 2AE0 ldi R18,10
050C 30E0 ldi R19,0
050E 00910400 lds R16,_days
0512 1127 clr R17
0514 0E940000 xcall div16s
0518 F801 movw R30,R16
051A 80E0 ldi R24,<_table
051C 90E0 ldi R25,>_table
051E E80F add R30,R24
0520 F91F adc R31,R25
0522 2490 lpm R2,Z
0524 3324 clr R3
0526 3B82 std y+3,R3
0528 2A82 std y+2,R2
052A 80E1 ldi R24,16
052C 90E0 ldi R25,0
052E 9983 std y+1,R25
0530 8883 std y+0,R24
0532 2EE0 ldi R18,14
0534 30E0 ldi R19,0
0536 09EF ldi R16,249
0538 10E0 ldi R17,0
053A 8EDD xcall _write_ASCII
053C .dbline 144
053C ; write_ASCII(0xf9,15,16,table[days%10]);//日期低位
053C 2AE0 ldi R18,10
053E 30E0 ldi R19,0
0540 00910400 lds R16,_days
0544 1127 clr R17
0546 0E940000 xcall mod16s
054A F801 movw R30,R16
054C 80E0 ldi R24,<_table
054E 90E0 ldi R25,>_table
0550 E80F add R30,R24
0552 F91F adc R31,R25
0554 2490 lpm R2,Z
0556 3324 clr R3
0558 3B82 std y+3,R3
055A 2A82 std y+2,R2
055C 80E1 ldi R24,16
055E 90E0 ldi R25,0
0560 9983 std y+1,R25
0562 8883 std y+0,R24
0564 2FE0 ldi R18,15
0566 30E0 ldi R19,0
0568 09EF ldi R16,249
056A 10E0 ldi R17,0
056C 75DD xcall _write_ASCII
056E .dbline -2
056E L36:
056E 2496 adiw R28,4
0570 .dbline 0 ; func end
0570 0895 ret
0572 .dbend
0572 .dbfunc e get_days _get_days fc
0572 ; tian -> R20
0572 ; yue -> R20
.even
0572 _get_days::
0572 0E940000 xcall push_gset1
0576 402F mov R20,R16
0578 .dbline -1
0578 .dbline 150
0578 ; }
0578 ; /**********************************************/
0578 ; /* 确定天数*/
0578 ; /**********************************************/
0578 ; unsigned char get_days(unsigned char yue)
0578 ; {
0578 .dbline 152
0578 ; unsigned char tian;
0578 ; switch(yue)
0578 5527 clr R21
057A 4130 cpi R20,1
057C E0E0 ldi R30,0
057E 5E07 cpc R21,R30
0580 69F1 breq L53
0582 4230 cpi R20,2
0584 E0E0 ldi R30,0
0586 5E07 cpc R21,R30
0588 69F1 breq L55
058A 4330 cpi R20,3
058C E0E0 ldi R30,0
058E 5E07 cpc R21,R30
0590 29F1 breq L53
0592 4430 cpi R20,4
0594 E0E0 ldi R30,0
0596 5E07 cpc R21,R30
0598 19F1 breq L54
059A 4530 cpi R20,5
059C E0E0 ldi R30,0
059E 5E07 cpc R21,R30
05A0 E9F0 breq L53
05A2 4630 cpi R20,6
05A4 E0E0 ldi R30,0
05A6 5E07 cpc R21,R30
05A8 D9F0 breq L54
05AA 4730 cpi R20,7
05AC E0E0 ldi R30,0
05AE 5E07 cpc R21,R30
05B0 A9F0 breq L53
05B2 4830 cpi R20,8
05B4 E0E0 ldi R30,0
05B6 5E07 cpc R21,R30
05B8 89F0 breq L53
05BA 4930 cpi R20,9
05BC E0E0 ldi R30,0
05BE 5E07 cpc R21,R30
05C0 79F0 breq L54
05C2 4A30 cpi R20,10
05C4 E0E0 ldi R30,0
05C6 5E07 cpc R21,R30
05C8 49F0 breq L53
05CA 4B30 cpi R20,11
05CC E0E0 ldi R30,0
05CE 5E07 cpc R21,R30
05D0 39F0 breq L54
05D2 4C30 cpi R20,12
05D4 E0E0 ldi R30,0
05D6 5E07 cpc R21,R30
05D8 09F0 breq L53
05DA 26C0 xjmp L51
05DC X4:
05DC .dbline 153
05DC ; {
05DC L53:
05DC .dbline 160
05DC ; case 1:
05DC ; case 3:
05DC ; case 5:
05DC ; case 7:
05DC ; case 8:
05DC ; case 10:
05DC ; case 12:tian=31;break;
05DC 4FE1 ldi R20,31
05DE .dbline 160
05DE 24C0 xjmp L51
05E0 L54:
05E0 .dbline 164
05E0 ; case 4:
05E0 ; case 6:
05E0 ; case 9:
05E0 ; case 11:tian=30;break;
05E0 4EE1 ldi R20,30
05E2 .dbline 164
05E2 22C0 xjmp L51
05E4 L55:
05E4 .dbline 165
05E4 ; case 2: if((year%4==0&&year%100!=0)||(year%400==0))tian=29;else tian=28;break;
05E4 80910600 lds R24,_year
05E8 90910700 lds R25,_year+1
05EC 8370 andi R24,3
05EE 9070 andi R25,0
05F0 8030 cpi R24,0
05F2 8907 cpc R24,R25
05F4 59F4 brne L59
05F6 X5:
05F6 24E6 ldi R18,100
05F8 30E0 ldi R19,0
05FA 00910600 lds R16,_year
05FE 10910700 lds R17,_year+1
0602 0E940000 xcall mod16u
0606 0030 cpi R16,0
0608 0107 cpc R16,R17
060A 59F4 brne L58
060C X6:
060C L59:
060C 20E9 ldi R18,400
060E 31E0 ldi R19,1
0610 00910600 lds R16,_year
0614 10910700 lds R17,_year+1
0618 0E940000 xcall mod16u
061C 0030 cpi R16,0
061E 0107 cpc R16,R17
0620 11F4 brne L56
0622 X7:
0622 L58:
0622 .dbline 165
0622 4DE1 ldi R20,29
0624 01C0 xjmp L51
0626 L56:
0626 .dbline 165
0626 4CE1 ldi R20,28
0628 .dbline 165
0628 .dbline 166
0628 ; default:break;
0628 L51:
0628 .dbline 168
0628 ; }
0628 ; return tian;
0628 042F mov R16,R20
062A .dbline -2
062A L49:
062A 0E940000 xcall pop_gset1
062E .dbline 0 ; func end
062E 0895 ret
0630 .dbsym r tian 20 c
0630 .dbsym r yue 20 c
0630 .dbend
0630 .dbfunc e timer0_init _timer0_init fV
.even
0630 _timer0_init::
0630 .dbline -1
0630 .dbline 174
0630 ; }
0630 ; /**********************************************/
0630 ; /* 定时器初始化 1秒*/
0630 ; /**********************************************/
0630 ; void timer0_init(void)
0630 ; {
0630 .dbline 175
0630 ; TCCR0 = 0x00; //stop
0630 2224 clr R2
0632 23BE out 0x33,R2
0634 .dbline 176
0634 ; ASSR = 0x08; //set async mode
0634 88E0 ldi R24,8
0636 80BF out 0x30,R24
0638 .dbline 177
0638 ; TCNT0 = 0x00; //set count
0638 22BE out 0x32,R2
063A .dbline 178
063A ; TCCR0 = 0x05; //start timer
063A 85E0 ldi R24,5
063C 83BF out 0x33,R24
063E .dbline -2
063E L60:
063E .dbline 0 ; func end
063E 0895 ret
0640 .dbend
.area vector(rom, abs)
.org 64
0040 0C942003 jmp _timer0_ovf_isr
.area text(rom, con, rel)
0640 .dbfile E:\ATMEGA~1\万年历实验\2.c
0640 .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
.even
0640 _timer0_ovf_isr::
0640 0E940000 xcall push_lset
0644 .dbline -1
0644 .dbline 185
0644 ; }
0644 ; /**********************************************/
0644 ; /* 定时器中断服务程序*/
0644 ; /**********************************************/
0644 ; #pragma interrupt_handler timer0_ovf_isr:17
0644 ; void timer0_ovf_isr(void)
0644 ; {
0644 .dbline 186
0644 ; second=second+1;
0644 80910000 lds R24,_second
0648 8F5F subi R24,255 ; addi 1
064A 80930000 sts _second,R24
064E .dbline 187
064E ; if(second==60)
064E 8C33 cpi R24,60
0650 09F0 breq X8
0652 48C0 xjmp L62
0654 X8:
0654 .dbline 188
0654 ; {
0654 .dbline 189
0654 ; second=0;
0654 2224 clr R2
0656 20920000 sts _second,R2
065A .dbline 190
065A ; minute=minute+1;
065A 80910100 lds R24,_minute
065E 8F5F subi R24,255 ; addi 1
0660 80930100 sts _minute,R24
0664 .dbline 191
0664 ; if(minute==60)
0664 8C33 cpi R24,60
0666 09F0 breq X9
0668 3DC0 xjmp L64
066A X9:
066A .dbline 192
066A ; {
066A .dbline 193
066A ; minute=0;
066A 20920100 sts _minute,R2
066E .dbline 194
066E ; hour=hour+1;
066E 80910200 lds R24,_hour
0672 8F5F subi R24,255 ; addi 1
0674 80930200 sts _hour,R24
0678 .dbline 195
0678 ; if(hour==24)
0678 8831 cpi R24,24
067A A1F5 brne L66
067C .dbline 196
067C ; {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -