📄 main.lis
字号:
.module main.c
.area data
0000 _ch::
0000 .blkb 28
.area idata
0000 706C65617365207365742074696D6521 .byte 'p,'l,'e,'a,'s,'e,32,'s,'e,'t,32,'t,'i,'m,'e,33
0010 457072657373202742274500 .byte 'E,'p,'r,'e,'s,'s,32,39,'B,39,'E,0
.area data
001C _c::
001C .blkb 19
.area idata
001C 74696D65206F75742145476574207570 .byte 't,'i,'m,'e,32,'o,'u,'t,33,'E,'G,'e,'t,32,'u,'p
002C 214500 .byte 33,'E,0
.area data
002F _init::
002F .blkb 21
.area idata
002F 303030302D30302D30304530303A3030 .byte 48,48,48,48,45,48,48,45,48,48,'E,48,48,58,48,48
003F 3A30304500 .byte 58,48,48,'E,0
.area data
0044 _show::
0044 .blkb 1
.area idata
0044 20 .byte 32
.area data
0045 .blkb 31
.area idata
0045 00000000000000000000 .word 0,0,0,0,0
004F 00000000000000000000 .word 0,0,0,0,0
0059 00000000000000000000 .word 0,0,0,0,0
0063 00 .byte 0
.area data
.area text
0000 _main::
0000 ; /*-----------------------------------------------------*
0000 ; *工 程 名:
0000 ; *硬件连接:
0000 ; *程序描述: SD-HC08 模板生成
0000 ; */
0000 ; /*[头文件]*/
0000 ; #include "GP32C.h" //映像寄存器地址头文件
0000 ; #include "clock.h"
0000 ;
0000 ;
0000 ; unsigned char ch[]={"please set time!Epress 'B'E"};
0000 ; unsigned char c[]={"time out!EGet up!E"};
0000 ; unsigned char init[]={"0000-00-00E00:00:00E"};
0000 ; unsigned char show[32]={' '};
0000 ; unsigned char timer[2];
0000 ; unsigned char time[3];
0000 ; unsigned int date[3];
0000 ; unsigned char out;
0000 ; unsigned char timertem[4];
0000 ; unsigned char timetem[4];
0000 ; unsigned char datetem[8];
0000 ; unsigned char showtime;
0000 ; unsigned char istimer;
0000 ; unsigned char issettime;
0000 ; /*[主函数]*/
0000 ; void main(void){
0000 ; asm("SEI");
0000 9B SEI
0001 ; showtime=0x01;istimer=0x00;issettime=0;//模式初始化
0001 A601 lda #1
0003 B702 sta *_showtime
0005 3F01 clr *_istimer
0007 3F00 clr *_issettime
0009 ; DDRD=0x01;out=1; //闹钟接口初始化
0009 A601 lda #1
000B B707 sta 0x7
000D A601 lda #1
000F B713 sta *_out
0011 ; timer[0]=0;timer[1]=0; //闹钟\时间初始化
0011 3F1D clr *_timer
0013 3F1E clr *_timer+1
0015 ; time[0]=0;time[1]=0;time[2]=0;
0015 3F1A clr *_time
0017 3F1B clr *_time+1
0019 3F1C clr *_time+2
001B ; date[0]=0;date[1]=0;date[2]=0;
001B 3F15 clr *_date+1
001D 3F14 clr *_date
001F 3F17 clr *_date+2+1
0021 3F16 clr *_date+2
0023 3F19 clr *_date+4+1
0025 3F18 clr *_date+4
0027 ; LcdInit(); //LCD显示初始化
0027 CD0000 jsr _LcdInit
002A ; KB_Init(); //键盘初始化
002A CD0000 jsr _KB_Init
002D ; INTKBSCR&= ~(1<<IntBit); //开放键盘中断(IMASKk=1)
002D 131A bclr #1,0x1a
002F ; PTD=0;
002F 3F03 clr 0x3
0031 ; Timer1init(); //定时器初始化
0031 CD0000 jsr _Timer1init
0034 95 tsx
0035 ; asm("CLI");
0035 9A CLI
0036 202C bra L8
0038 L7:
0038 ; while(1){
0038 ; if(timer[0]==time[0]&&timer[1]==time[1]&&istimer==0x01){//闹钟启动//开始响铃60秒
0038 B61D lda *_timer
003A B11A cmp *_time
003C 2626 bne L10
003E B61E lda *_timer+1
0040 B11B cmp *_time+1
0042 2620 bne L10
0044 B601 lda *_istimer
0046 A101 cmp #1
0048 261A bne L10
004A ; showtime=0; //关闭时间显示
004A 3F02 clr *_showtime
004C ; lcdshow((unsigned char *)c);
004C A61C lda #<_c
004E 87 psha
004F A61C lda #>_c
0051 87 psha
0052 CD0000 jsr _lcdshow
0055 A702 ais #2
0057 ; beep(2);
0057 A602 lda #2
0059 87 psha
005A CD07BF jsr _beep
005D A701 ais #1
005F 95 tsx
0060 ; showtime=1; //开时间表显示
0060 A601 lda #1
0062 B702 sta *_showtime
0064 ; }
0064 L10:
0064 L8:
0064 20D2 bra L7
0066 X0:
0066 L1:
0066 .dbline 0 ; func end
0066 81 rts
0067 ; in -> 0,X
0067 _isadddate1::
0067 A7FF ais #-1
0069 95 tsx
006A ; }
006A ; }
006A ;
006A ; unsigned char isadddate1(void){//每月天数不一,判断对应月加1
006A ; unsigned char in=0x00;
006A 7F clr ,X
006B ; if((date[1]==1||date[1]==3||date[1]==5||date[1]==7||date[1]==8||date[1]==10||date[1]==12)&&date[2]>=32)
006B 5516 ldhx *_date+2
006D 650001 cphx #1
0070 95 tsx
0071 2730 beq L30
0073 5516 ldhx *_date+2
0075 650003 cphx #3
0078 95 tsx
0079 2728 beq L30
007B 5516 ldhx *_date+2
007D 650005 cphx #5
0080 95 tsx
0081 2720 beq L30
0083 5516 ldhx *_date+2
0085 650007 cphx #7
0088 95 tsx
0089 2718 beq L30
008B 5516 ldhx *_date+2
008D 650008 cphx #8
0090 95 tsx
0091 2710 beq L30
0093 5516 ldhx *_date+2
0095 65000A cphx #10
0098 95 tsx
0099 2708 beq L30
009B 5516 ldhx *_date+2
009D 65000C cphx #12
00A0 95 tsx
00A1 260E bne L15
00A3 L30:
00A3 5518 ldhx *_date+4
00A5 650020 cphx #32
00A8 95 tsx
00A9 2506 blo L15
00AB ; in=0x01;
00AB A601 lda #1
00AD F7 sta ,X
00AE CC0128 jmp L16
00B1 L15:
00B1 ; else if((date[1]==4||date[1]==6||date[1]==9||date[1]==11)&&date[2]>=31)
00B1 5516 ldhx *_date+2
00B3 650004 cphx #4
00B6 95 tsx
00B7 2718 beq L40
00B9 5516 ldhx *_date+2
00BB 650006 cphx #6
00BE 95 tsx
00BF 2710 beq L40
00C1 5516 ldhx *_date+2
00C3 650009 cphx #9
00C6 95 tsx
00C7 2708 beq L40
00C9 5516 ldhx *_date+2
00CB 65000B cphx #11
00CE 95 tsx
00CF 260D bne L31
00D1 L40:
00D1 5518 ldhx *_date+4
00D3 65001F cphx #31
00D6 95 tsx
00D7 2505 blo L31
00D9 ; in=0x01;
00D9 A601 lda #1
00DB F7 sta ,X
00DC 204A bra L32
00DE L31:
00DE ; else if((date[1]==2&&date[0]%4==0)&&date[2]==29)in=0x01;
00DE 5516 ldhx *_date+2
00E0 650002 cphx #2
00E3 95 tsx
00E4 261E bne L41
00E6 B615 lda *_date+1
00E8 A403 and #3
00EA B700 sta *__r1
00EC 4F clra
00ED B700 sta *__r0
00EF 5500 ldhx *__r0
00F1 650000 cphx #0
00F4 95 tsx
00F5 260D bne L41
00F7 5518 ldhx *_date+4
00F9 65001D cphx #29
00FC 95 tsx
00FD 2605 bne L41
00FF A601 lda #1
0101 F7 sta ,X
0102 2024 bra L42
0104 L41:
0104 ; else if((date[1]==2&&date[0]%4!=0)&&date[2]==28)in=0x01;
0104 5516 ldhx *_date+2
0106 650002 cphx #2
0109 95 tsx
010A 261C bne L45
010C B615 lda *_date+1
010E A403 and #3
0110 B700 sta *__r1
0112 4F clra
0113 B700 sta *__r0
0115 5500 ldhx *__r0
0117 650000 cphx #0
011A 95 tsx
011B 270B beq L45
011D 5518 ldhx *_date+4
011F 65001C cphx #28
0122 95 tsx
0123 2603 bne L45
0125 A601 lda #1
0127 F7 sta ,X
0128 L45:
0128 L42:
0128 L32:
0128 L16:
0128 ; return in;
0128 F6 lda ,X
0129 L14:
0129 A701 ais #1
012B .dbline 0 ; func end
012B 81 rts
012C ; in -> 0,X
012C _addtime::
012C A7FF ais #-1
012E 95 tsx
012F ; }
012F ; void addtime(void){ //日期,时间累加函数
012F ; unsigned char in;
012F ; time[2]++; //秒数加1
012F 3C1C inc *_time+2
0131 ; if (time[2]>=60){ //秒数未增加到60,转
0131 B61C lda *_time+2
0133 A13C cmp #60
0135 2504 blo L51
0137 ; time[2]=0; time[1]++; //秒数增加到60,清0,分钟数加1
0137 3F1C clr *_time+2
0139 3C1B inc *_time+1
013B ; }
013B L51:
013B ; if (time[1]>=60){ //分钟数未增到60,转
013B B61B lda *_time+1
013D A13C cmp #60
013F 250D blo L56
0141 ; time[1]=0; time[0]++; //分钟数增加到60,清0,小时数加1
0141 3F1B clr *_time+1
0143 3C1A inc *_time
0145 ; beep(1);
0145 A601 lda #1
0147 87 psha
0148 CD07BF jsr _beep
014B A701 ais #1
014D 95 tsx
014E ; }
014E L56:
014E ; if (time[0]>=24){ //小时数未增到24,转
014E B61A lda *_time
0150 A118 cmp #24
0152 250E blo L60
0154 ; time[0]=0; //时数增加到24,清0
0154 3F1A clr *_time
0156 ; date[2]++;
0156 B619 lda *_date+4+1
0158 AB01 add #1
015A B719 sta *_date+4+1
015C B618 lda *_date+4
015E A900 adc #0
0160 B718 sta *_date+4
0162 ; }
0162 L60:
0162 ; in=isadddate1();
0162 CD0067 jsr _isadddate1
0165 95 tsx
0166 B700 sta *__r1
0168 F7 sta ,X
0169 ; if(in==0x01){ //满足月份加1
0169 A101 cmp #1
016B 2612 bne L63
016D ; date[1]++; //月份加1
016D B617 lda *_date+2+1
016F AB01 add #1
0171 B717 sta *_date+2+1
0173 B616 lda *_date+2
0175 A900 adc #0
0177 B716 sta *_date+2
0179 ; date[2]=1; //天回1
0179 6E0018 mov #0,*_date+4
017C 6E0119 mov #1,*_date+4+1
017F ; }
017F L63:
017F ; if(date[1]>=13){ //月大于12
017F 5516 ldhx *_date+2
0181 65000D cphx #13
0184 95 tsx
0185 2512 blo L67
0187 ; date[0]++; //年加1,月回1
0187 B615 lda *_date+1
0189 AB01 add #1
018B B715 sta *_date+1
018D B614 lda *_date
018F A900 adc #0
0191 B714 sta *_date
0193 ; date[1]=1;
0193 6E0016 mov #0,*_date+2
0196 6E0117 mov #1,*_date+2+1
0199 ; }
0199 L67:
0199 L49:
0199 A701 ais #1
019B .dbline 0 ; func end
019B 81 rts
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -