📄 万年历.lis
字号:
044C 00911400 lds R16,_temp
0450 1127 clr R17
0452 0E940000 xcall mod16s
0456 F801 movw R30,R16
0458 80E0 ldi R24,<_table1
045A 90E0 ldi R25,>_table1
045C E80F add R30,R24
045E F91F adc R31,R25
0460 2080 ldd R2,z+0
0462 3324 clr R3
0464 3B82 std y+3,R3
0466 2A82 std y+2,R2
0468 80E1 ldi R24,16
046A 90E0 ldi R25,0
046C 9983 std y+1,R25
046E 8883 std y+0,R24
0470 21E1 ldi R18,17
0472 30E0 ldi R19,0
0474 09EF ldi R16,249
0476 10E0 ldi R17,0
0478 0E940000 xcall _write_ASCII
047C .dbline -2
047C L1:
047C 2496 adiw R28,4
047E .dbline 0 ; func end
047E 0895 ret
0480 .dbend
0480 .dbfunc e get_days _get_days fc
0480 ; tian -> R20
0480 ; yue -> R20
.even
0480 _get_days::
0480 0E940000 xcall push_gset1
0484 402F mov R20,R16
0486 .dbline -1
0486 .dbline 54
0486 ;
0486 ;
0486 ; }
0486 ; /**********************************************/
0486 ; /* 确定天数*/
0486 ; /**********************************************/
0486 ; unsigned char get_days(unsigned char yue)
0486 ; {
0486 .dbline 56
0486 ; unsigned char tian;
0486 ; switch(yue)
0486 5527 clr R21
0488 4130 cpi R20,1
048A E0E0 ldi R30,0
048C 5E07 cpc R21,R30
048E 69F1 breq L14
0490 4230 cpi R20,2
0492 E0E0 ldi R30,0
0494 5E07 cpc R21,R30
0496 69F1 breq L16
0498 4330 cpi R20,3
049A E0E0 ldi R30,0
049C 5E07 cpc R21,R30
049E 29F1 breq L14
04A0 4430 cpi R20,4
04A2 E0E0 ldi R30,0
04A4 5E07 cpc R21,R30
04A6 19F1 breq L15
04A8 4530 cpi R20,5
04AA E0E0 ldi R30,0
04AC 5E07 cpc R21,R30
04AE E9F0 breq L14
04B0 4630 cpi R20,6
04B2 E0E0 ldi R30,0
04B4 5E07 cpc R21,R30
04B6 D9F0 breq L15
04B8 4730 cpi R20,7
04BA E0E0 ldi R30,0
04BC 5E07 cpc R21,R30
04BE A9F0 breq L14
04C0 4830 cpi R20,8
04C2 E0E0 ldi R30,0
04C4 5E07 cpc R21,R30
04C6 89F0 breq L14
04C8 4930 cpi R20,9
04CA E0E0 ldi R30,0
04CC 5E07 cpc R21,R30
04CE 79F0 breq L15
04D0 4A30 cpi R20,10
04D2 E0E0 ldi R30,0
04D4 5E07 cpc R21,R30
04D6 49F0 breq L14
04D8 4B30 cpi R20,11
04DA E0E0 ldi R30,0
04DC 5E07 cpc R21,R30
04DE 39F0 breq L15
04E0 4C30 cpi R20,12
04E2 E0E0 ldi R30,0
04E4 5E07 cpc R21,R30
04E6 09F0 breq L14
04E8 26C0 xjmp L12
04EA X0:
04EA .dbline 57
04EA ; {
04EA L14:
04EA .dbline 64
04EA ; case 1:
04EA ; case 3:
04EA ; case 5:
04EA ; case 7:
04EA ; case 8:
04EA ; case 10:
04EA ; case 12:tian=31;break;
04EA 4FE1 ldi R20,31
04EC .dbline 64
04EC 24C0 xjmp L12
04EE L15:
04EE .dbline 68
04EE ; case 4:
04EE ; case 6:
04EE ; case 9:
04EE ; case 11:tian=30;break;
04EE 4EE1 ldi R20,30
04F0 .dbline 68
04F0 22C0 xjmp L12
04F2 L16:
04F2 .dbline 69
04F2 ; case 2: if((year%4==0&&year%100!=0)||(year%400==0))tian=29;else tian=28;break;
04F2 80911500 lds R24,_year
04F6 90911600 lds R25,_year+1
04FA 8370 andi R24,3
04FC 9070 andi R25,0
04FE 8030 cpi R24,0
0500 8907 cpc R24,R25
0502 59F4 brne L20
0504 X1:
0504 24E6 ldi R18,100
0506 30E0 ldi R19,0
0508 00911500 lds R16,_year
050C 10911600 lds R17,_year+1
0510 0E940000 xcall mod16u
0514 0030 cpi R16,0
0516 0107 cpc R16,R17
0518 59F4 brne L19
051A X2:
051A L20:
051A 20E9 ldi R18,400
051C 31E0 ldi R19,1
051E 00911500 lds R16,_year
0522 10911600 lds R17,_year+1
0526 0E940000 xcall mod16u
052A 0030 cpi R16,0
052C 0107 cpc R16,R17
052E 11F4 brne L17
0530 X3:
0530 L19:
0530 .dbline 69
0530 4DE1 ldi R20,29
0532 01C0 xjmp L12
0534 L17:
0534 .dbline 69
0534 4CE1 ldi R20,28
0536 .dbline 69
0536 .dbline 70
0536 ; default:break;
0536 L12:
0536 .dbline 72
0536 ; }
0536 ; return tian;
0536 042F mov R16,R20
0538 .dbline -2
0538 L10:
0538 0E940000 xcall pop_gset1
053C .dbline 0 ; func end
053C 0895 ret
053E .dbsym r tian 20 c
053E .dbsym r yue 20 c
053E .dbend
053E .dbfunc e timer0_init _timer0_init fV
.even
053E _timer0_init::
053E .dbline -1
053E .dbline 79
053E ; }
053E ;
053E ; /**********************************************/
053E ; /* 定时器初始化 1秒*/
053E ; /**********************************************/
053E ; void timer0_init(void)
053E ; {
053E .dbline 80
053E ; TCCR0 = 0x00; //stop
053E 2224 clr R2
0540 23BE out 0x33,R2
0542 .dbline 81
0542 ; ASSR = 0x08; //set async mode
0542 88E0 ldi R24,8
0544 80BF out 0x30,R24
0546 .dbline 82
0546 ; TCNT0 = 0x00; //set count
0546 22BE out 0x32,R2
0548 .dbline 83
0548 ; TCCR0 = 0x05; //start timer 128分频
0548 85E0 ldi R24,5
054A 83BF out 0x33,R24
054C .dbline -2
054C L21:
054C .dbline 0 ; func end
054C 0895 ret
054E .dbend
.area vector(rom, abs)
.org 64
0040 0C94A702 jmp _timer0_ovf_isr
.area text(rom, con, rel)
054E .dbfile F:\调试\万年历.c
054E .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
.even
054E _timer0_ovf_isr::
054E 0E940000 xcall push_lset
0552 .dbline -1
0552 .dbline 90
0552 ; }
0552 ; /**********************************************/
0552 ; /* 定时器中断服务程序*/
0552 ; /**********************************************/
0552 ; #pragma interrupt_handler timer0_ovf_isr:17
0552 ; void timer0_ovf_isr(void)
0552 ; {
0552 .dbline 91
0552 ; second=second+1;
0552 80910E00 lds R24,_second
0556 8F5F subi R24,255 ; addi 1
0558 80930E00 sts _second,R24
055C .dbline 92
055C ; if(second==60)
055C 8C33 cpi R24,60
055E 09F0 breq X4
0560 48C0 xjmp L23
0562 X4:
0562 .dbline 93
0562 ; {
0562 .dbline 94
0562 ; second=0;
0562 2224 clr R2
0564 20920E00 sts _second,R2
0568 .dbline 95
0568 ; minute=minute+1;
0568 80910F00 lds R24,_minute
056C 8F5F subi R24,255 ; addi 1
056E 80930F00 sts _minute,R24
0572 .dbline 96
0572 ; if(minute==60)
0572 8C33 cpi R24,60
0574 09F0 breq X5
0576 3DC0 xjmp L25
0578 X5:
0578 .dbline 97
0578 ; {
0578 .dbline 98
0578 ; minute=0;
0578 20920F00 sts _minute,R2
057C .dbline 99
057C ; hour=hour+1;
057C 80911000 lds R24,_hour
0580 8F5F subi R24,255 ; addi 1
0582 80931000 sts _hour,R24
0586 .dbline 100
0586 ; if(hour==24)
0586 8831 cpi R24,24
0588 A1F5 brne L27
058A .dbline 101
058A ; {
058A .dbline 102
058A ; hour=0;
058A 20921000 sts _hour,R2
058E .dbline 103
058E ; week=week+1;
058E 80911100 lds R24,_week
0592 8F5F subi R24,255 ; addi 1
0594 80931100 sts _week,R24
0598 .dbline 104
0598 ; if(week>7)
0598 87E0 ldi R24,7
059A 20901100 lds R2,_week
059E 8215 cp R24,R2
05A0 18F4 brsh L29
05A2 .dbline 105
05A2 ; week=1;
05A2 81E0 ldi R24,1
05A4 80931100 sts _week,R24
05A8 L29:
05A8 .dbline 106
05A8 ; day=day+1;
05A8 80911200 lds R24,_day
05AC 8F5F subi R24,255 ; addi 1
05AE 80931200 sts _day,R24
05B2 .dbline 108
05B2 ;
05B2 ; if(day>get_days(month))
05B2 00911300 lds R16,_month
05B6 64DF xcall _get_days
05B8 20901200 lds R2,_day
05BC 0215 cp R16,R2
05BE C8F4 brsh L31
05C0 .dbline 109
05C0 ; {
05C0 .dbline 110
05C0 ; day=1;
05C0 81E0 ldi R24,1
05C2 80931200 sts _day,R24
05C6 .dbline 111
05C6 ; month=month+1;
05C6 80911300 lds R24,_month
05CA 8F5F subi R24,255 ; addi 1
05CC 80931300 sts _month,R24
05D0 .dbline 112
05D0 ; if(month>12)
05D0 8CE0 ldi R24,12
05D2 20901300 lds R2,_month
05D6 8215 cp R24,R2
05D8 60F4 brsh L33
05DA .dbline 113
05DA ; {
05DA .dbline 114
05DA ; month=1;
05DA 81E0 ldi R24,1
05DC 80931300 sts _month,R24
05E0 .dbline 115
05E0 ; year=year+1;
05E0 80911500 lds R24,_year
05E4 90911600 lds R25,_year+1
05E8 0196 adiw R24,1
05EA 90931600 sts _year+1,R25
05EE 80931500 sts _year,R24
05F2 .dbline 116
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -