📄 main.s
字号:
.module main.c
.area data
_Time::
.blkb 2
.area idata
.word 2000
.area data
.blkb 1
.area idata
.byte 1
.area data
.blkb 1
.area idata
.byte 1
.area data
.blkb 1
.area idata
.byte 12
.area data
.blkb 1
.area idata
.byte 0
.area data
.blkb 1
.area idata
.byte 0
.area data
_Alarm::
.blkb 2
.area idata
.word 2000
.area data
.blkb 1
.area idata
.byte 1
.area data
.blkb 1
.area idata
.byte 1
.area data
.blkb 1
.area idata
.byte 7
.area data
.blkb 1
.area idata
.byte 30
.area data
.blkb 1
.area idata
.byte 0
.area data
_LCD_buff::
.blkb 32
.area idata
.byte 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
.byte 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
.area data
_Timer_5sec_trigger::
.blkb 1
.area idata
.byte 0
.area data
_Timer_5sec_counter::
.blkb 1
.area idata
.byte 0
.area data
_Alarm_counter::
.blkb 1
.area idata
.byte 0
.area data
_Alarm_enable_flag::
.blkb 1
.area idata
.byte 0
.area data
_Alarm_trigger::
.blkb 1
.area idata
.byte 0
.area data
_Select_key_is_pressed_flag::
.blkb 1
.area idata
.byte 0
.area data
_Up_Modify_key_is_pressed_flag::
.blkb 1
.area idata
.byte 0
.area data
_Down_Modify_key_is_pressed_flag::
.blkb 1
.area idata
.byte 0
.area data
_Normal_show_time::
.blkb 1
.area idata
.byte 1
.area data
_Time_fresh::
.blkb 1
.area idata
.byte 1
.area data
_Minute_second_integral_flag::
.blkb 1
.area idata
.byte 0
.area data
_Integral_counter::
.blkb 1
.area idata
.byte 0
.area data
.area text
; j -> 7,X
; i -> 8,X
_main::
ais #-9
tsx
; /*-----------------------------------------------------*
; *工 程 名:
; *硬件连接:
; *程序描述: SD-HC08 模板生成
; */
; /*[头文件]*/
; #include "GP32C.h" //映像寄存器地址头文件
; #include "userdefine.h"
; #include "KB.h"
;
; #define TSTOPBit 5 //定时器计数停止位
; #define TOFBit 7 //定时器溢出标志位
;
; extern void lcdshow(unsigned char *str);
; extern void Lcd_show_cursor(char x,char y);
;
; void Time_Var2char(Time_Struct Time);
; void Timer1init(void);
; void Year_adjust(void);
; void Month_adjust(void);
; void Day_adjust(void);
; void Hour_adjust(void);
; void Minute_adjust(void);
; void A_Year_adjust(void);
; void A_Month_adjust(void);
; void A_Day_adjust(void);
; void A_Hour_adjust(void);
; void A_Minute_adjust(void);
; void Alarm_handle(void);
; void Alarm_play(void);
; void Alarm_Off(void);
; void swap(char *m,char *n);
;
;
; Time_Struct Time={2000,1,1,12,0,0};
; Time_Struct Alarm={2000,1,1,7,30,0};
; unsigned char LCD_buff[32]=" ";
; char Timer_5sec_trigger=0;
; char Timer_5sec_counter=0,Alarm_counter=0;
; char Alarm_enable_flag=0,Alarm_trigger=0;
; char Select_key_is_pressed_flag=0,Up_Modify_key_is_pressed_flag=0,Down_Modify_key_is_pressed_flag=0;
; char Normal_show_time=1,Time_fresh=1,Alarm_fresh;
; char Minute_second_integral_flag=0,Integral_counter=0;
;
; /*[主函数]*/
; void main()
; {
; char i,j=0;
clr 7,X
; asm("SEI"); //关总中断
SEI
; Timer1init(); //调定时器1初始化子程序
jsr _Timer1init
; KB_Init();
jsr _KB_Init
; INTKBSCR&= ~(1<<IntBit); //开放键盘中断(IMASKk=1)
bclr #1,0x1a
; Alarm_Off();
jsr _Alarm_Off
tsx
; asm("CLI"); //开总中断
CLI
jmp L5
L4:
; while(1)
; {
; j++;
inc 7,X
jmp L8
L7:
; while(1)
; {
; if(Normal_show_time&&Time_fresh)
lda *_Normal_show_time
beq L10
lda *_Time_fresh
beq L10
; {
; Alarm_counter++;
inc *_Alarm_counter
; for(i=11;i<16;i++)
lda #11
sta 8,X
bra L15
L12:
clr *__r0
lda 8,X
add #<_LCD_buff
sta *__r1
lda *__r0
adc #>_LCD_buff
sta *__r0
lda #32
ldhx *__r0
sta ,x
tsx
L13:
inc 8,X
L15:
lda 8,X
cmp #16
blo L12
; {
; LCD_buff[i]=' ';
; }
; Time_Var2char(Time);
sthx *__r0
ldhx #_Time
lda ,x
sta *__r4
lda 1,x
sta *__r5
lda 2,x
sta *__r6
lda 3,x
sta *__r7
lda 4,x
sta *__r8
lda 5,x
sta *__r9
lda 6,x
sta *__r10
ldhx *__r0
lda *__r4
sta ,x
lda *__r5
sta 1,x
lda *__r6
sta 2,x
lda *__r7
sta 3,x
lda *__r8
sta 4,x
lda *__r9
sta 5,x
lda *__r10
sta 6,x
tsx
pshx
pshh
jsr _Time_Var2char
ais #2
; lcdshow((unsigned char *)LCD_buff);
lda #<_LCD_buff
psha
lda #>_LCD_buff
psha
jsr _lcdshow
ais #2
tsx
; Time_fresh=0;
clr *_Time_fresh
; }
L10:
; if(!Normal_show_time&&Alarm_fresh)
lda *_Normal_show_time
bne L16
lda *_Alarm_fresh
beq L16
; {
; Alarm_fresh=0;
clr *_Alarm_fresh
; Time_Var2char(Alarm);
sthx *__r0
ldhx #_Alarm
lda ,x
sta *__r4
lda 1,x
sta *__r5
lda 2,x
sta *__r6
lda 3,x
sta *__r7
lda 4,x
sta *__r8
lda 5,x
sta *__r9
lda 6,x
sta *__r10
ldhx *__r0
lda *__r4
sta ,x
lda *__r5
sta 1,x
lda *__r6
sta 2,x
lda *__r7
sta 3,x
lda *__r8
sta 4,x
lda *__r9
sta 5,x
lda *__r10
sta 6,x
tsx
pshx
pshh
jsr _Time_Var2char
ais #2
; lcdshow((unsigned char *)LCD_buff);
lda #<_LCD_buff
psha
lda #>_LCD_buff
psha
jsr _lcdshow
ais #2
tsx
; }
L16:
; if(Alarm_trigger)
lda *_Alarm_trigger
beq L18
; {
; if(Alarm_counter<20)
lda *_Alarm_counter
cmp #20
bhs L20
; Alarm_play();
jsr _Alarm_play
tsx
bra L21
L20:
; else
; {
; Alarm_trigger=0;
clr *_Alarm_trigger
; Alarm_counter=0;
clr *_Alarm_counter
; Alarm_Off();
jsr _Alarm_Off
tsx
; }
L21:
; }
L18:
; if(Minute_second_integral_flag)
lda *_Minute_second_integral_flag
beq L22
; {
; if(Integral_counter<5)
lda *_Integral_counter
cmp #5
bhs L24
; Alarm_play();
jsr _Alarm_play
tsx
bra L25
L24:
; else
; {
; Minute_second_integral_flag=0;
clr *_Minute_second_integral_flag
; Integral_counter=0;
clr *_Integral_counter
; Alarm_Off();
jsr _Alarm_Off
tsx
; }
L25:
; }
L22:
; if(Timer_5sec_trigger)
lda *_Timer_5sec_trigger
bne X13
jmp L26
X13:
; {
; if(Timer_5sec_counter>5)
lda *_Timer_5sec_counter
cmp #5
bls L28
; {
;
; Timer_5sec_trigger=0;
clr *_Timer_5sec_trigger
; Timer_5sec_counter=0;
clr *_Timer_5sec_counter
; Select_key_is_pressed_flag=0;
clr *_Select_key_is_pressed_flag
; Normal_show_time=1;
lda #1
sta *_Normal_show_time
; break;
jmp L9
L28:
; }
; if(Select_key_is_pressed_flag==0)
lda *_Select_key_is_pressed_flag
bne L30
; {
; Timer_5sec_trigger=0;
clr *_Timer_5sec_trigger
; Timer_5sec_counter=0;
clr *_Timer_5sec_counter
; break;
jmp L9
L30:
; }
; switch(Select_key_is_pressed_flag%11)
clr *__r0
lda *_Select_key_is_pressed_flag
sta *__rlo
mov *__r0,*__rhi
lda #11
psha
clra
psha
jsr __divmod16s
pula
sta 5,X
pula
sta 6,X
lda 5,X
bne X0
lda 6,X
beq L35
X0:
lda 5,X
bne X1
lda 6,X
cmp #1
beq L36
X1:
lda 5,X
bne X2
lda 6,X
cmp #2
beq L37
X2:
lda 5,X
bne X3
lda 6,X
cmp #3
beq L38
X3:
lda 5,X
bne X4
lda 6,X
cmp #4
beq L39
X4:
lda 5,X
bne X5
lda 6,X
cmp #5
beq L40
X5:
lda 5,X
bne X6
lda 6,X
cmp #6
beq L41
X6:
lda 5,X
bne X7
lda 6,X
cmp #7
beq L42
X7:
lda 5,X
bne X8
lda 6,X
cmp #8
beq L43
X8:
lda 5,X
bne X9
lda 6,X
cmp #9
beq L44
X9:
lda 5,X
bne X10
lda 6,X
cmp #10
beq L45
X10:
bra L33
X11:
; {
L35:
; case 0:Year_adjust();break;
jsr _Year_adjust
tsx
bra L33
L36:
; case 1:Year_adjust();break;
jsr _Year_adjust
tsx
bra L33
L37:
; case 2:Month_adjust();break;
jsr _Month_adjust
tsx
bra L33
L38:
; case 3:Day_adjust();break;
jsr _Day_adjust
tsx
bra L33
L39:
; case 4:Hour_adjust();break;
jsr _Hour_adjust
tsx
bra L33
L40:
; case 5:Minute_adjust();break;
jsr _Minute_adjust
tsx
bra L33
L41:
; case 6:A_Year_adjust();break;
jsr _A_Year_adjust
tsx
bra L33
L42:
; case 7:A_Month_adjust();break;
jsr _A_Month_adjust
tsx
bra L33
L43:
; case 8:A_Day_adjust();break;
jsr _A_Day_adjust
tsx
bra L33
L44:
; case 9:A_Hour_adjust();break;
jsr _A_Hour_adjust
tsx
bra L33
L45:
; case 10:A_Minute_adjust();break;
jsr _A_Minute_adjust
tsx
; default: ;break;
L33:
; }
;
; } //end if
L26:
L8:
jmp L7
L9:
L5:
jmp L4
X12:
L3:
ais #9
.dbline 0 ; func end
rts
; tmp -> 0,X
; tmpchar -> 2,X
; i -> 3,X
; Time -> 6,X
_Time_Var2char::
ais #-4
tsx
; }//end while
; }//end while
; }// end main
;
;
; void Time_Var2char(Time_Struct Time)
; {
; unsigned char i,tmpchar;
; unsigned short int tmp;
; tmp=Time.year;
lda 6,X
ldx 7,X
psha
pulh
lda 1,x
sta 2,SP
lda ,x
tsx
sta ,X
; for(i=0;i<4;i++)
clr 3,X
bra L50
L47:
lda 1,X
sta *__rlo
lda ,X
sta *__rhi
lda #10
psha
clra
psha
jsr __divmod16u
pula
sta *__r0
pula
add #48
sta *__r1
lda *__r0
adc #0
clr *__r2
lda 3,X
add #<_LCD_buff
sta *__r3
lda *__r2
adc #>_LCD_buff
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
lda 1,X
sta *__rlo
lda ,X
sta *__rhi
lda #10
psha
clra
psha
jsr __divmod16u
ais #2
lda *__rhi
sta ,X
lda *__rlo
sta 1,X
L48:
inc 3,X
L50:
lda 3,X
cmp #4
blo L47
; {
; LCD_buff[i]=tmp%10+48;
; tmp=tmp/10;
; }
; swap(&LCD_buff[0],&LCD_buff[3]);
ldhx #_LCD_buff+3
pshx
pshh
ldhx #_LCD_buff
pshx
pshh
jsr _swap
ais #4
; swap(&LCD_buff[1],&LCD_buff[2]);
ldhx #_LCD_buff+2
pshx
pshh
ldhx #_LCD_buff+1
pshx
pshh
jsr _swap
ais #4
tsx
; LCD_buff[i]='-';
clr *__r0
lda 3,X
add #<_LCD_buff
sta *__r1
lda *__r0
adc #>_LCD_buff
sta *__r0
lda #45
ldhx *__r0
sta ,x
tsx
; tmpchar=Time.month;
lda 7,X
add #2
sta *__r1
lda 6,X
adc #0
sta *__r0
ldhx *__r0
lda ,x
tsx
sta 2,X
; for(i=5;i<7;i++)
lda #5
sta 3,X
bra L57
L54:
lda 2,X
ldx #10
clrh
div
pshh
pula
tsx
add #48
sta *__r1
clr *__r2
lda 3,X
add #<_LCD_buff
sta *__r3
lda *__r2
adc #>_LCD_buff
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
lda 2,X
ldx #10
clrh
div
tsx
sta 2,X
L55:
inc 3,X
L57:
lda 3,X
cmp #7
blo L54
; {
; LCD_buff[i]=tmpchar%10+48;
; tmpchar=tmpchar/10;
; }
; swap(&LCD_buff[6],&LCD_buff[5]);
ldhx #_LCD_buff+5
pshx
pshh
ldhx #_LCD_buff+6
pshx
pshh
jsr _swap
ais #4
tsx
; LCD_buff[i]='-';
clr *__r0
lda 3,X
add #<_LCD_buff
sta *__r1
lda *__r0
adc #>_LCD_buff
sta *__r0
lda #45
ldhx *__r0
sta ,x
tsx
; tmpchar=Time.day;
lda 7,X
add #3
sta *__r1
lda 6,X
adc #0
sta *__r0
ldhx *__r0
lda ,x
tsx
sta 2,X
; for(i=8;i<10;i++)
lda #8
sta 3,X
bra L63
L60:
lda 2,X
ldx #10
clrh
div
pshh
pula
tsx
add #48
sta *__r1
clr *__r2
lda 3,X
add #<_LCD_buff
sta *__r3
lda *__r2
adc #>_LCD_buff
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
lda 2,X
ldx #10
clrh
div
tsx
sta 2,X
L61:
inc 3,X
L63:
lda 3,X
cmp #10
blo L60
; {
; LCD_buff[i]=tmpchar%10+48;
; tmpchar=tmpchar/10;
; }
; swap(&LCD_buff[9],&LCD_buff[8]);
ldhx #_LCD_buff+8
pshx
pshh
ldhx #_LCD_buff+9
pshx
pshh
jsr _swap
ais #4
tsx
; tmpchar=Time.hour;
lda 7,X
add #4
sta *__r1
lda 6,X
adc #0
sta *__r0
ldhx *__r0
lda ,x
tsx
sta 2,X
; for(i=16;i<18;i++)
lda #16
sta 3,X
bra L69
L66:
lda 2,X
ldx #10
clrh
div
pshh
pula
tsx
add #48
sta *__r1
clr *__r2
lda 3,X
add #<_LCD_buff
sta *__r3
lda *__r2
adc #>_LCD_buff
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
lda 2,X
ldx #10
clrh
div
tsx
sta 2,X
L67:
inc 3,X
L69:
lda 3,X
cmp #18
blo L66
; {
; LCD_buff[i]=tmpchar%10+48;
; tmpchar=tmpchar/10;
; }
; swap(&LCD_buff[17],&LCD_buff[16]);
ldhx #_LCD_buff+16
pshx
pshh
ldhx #_LCD_buff+17
pshx
pshh
jsr _swap
ais #4
tsx
; LCD_buff[i]=':';
clr *__r0
lda 3,X
add #<_LCD_buff
sta *__r1
lda *__r0
adc #>_LCD_buff
sta *__r0
lda #58
ldhx *__r0
sta ,x
tsx
; tmpchar=Time.min;
lda 7,X
add #5
sta *__r1
lda 6,X
adc #0
sta *__r0
ldhx *__r0
lda ,x
tsx
sta 2,X
; for(i=19;i<21;i++)
lda #19
sta 3,X
bra L75
L72:
lda 2,X
ldx #10
clrh
div
pshh
pula
tsx
add #48
sta *__r1
clr *__r2
lda 3,X
add #<_LCD_buff
sta *__r3
lda *__r2
adc #>_LCD_buff
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
lda 2,X
ldx #10
clrh
div
tsx
sta 2,X
L73:
inc 3,X
L75:
lda 3,X
cmp #21
blo L72
; {
; LCD_buff[i]=tmpchar%10+48;
; tmpchar=tmpchar/10;
; }
; swap(&LCD_buff[20],&LCD_buff[19]);
ldhx #_LCD_buff+19
pshx
pshh
ldhx #_LCD_buff+20
pshx
pshh
jsr _swap
ais #4
tsx
; LCD_buff[i]=':';
clr *__r0
lda 3,X
add #<_LCD_buff
sta *__r1
lda *__r0
adc #>_LCD_buff
sta *__r0
lda #58
ldhx *__r0
sta ,x
tsx
; tmpchar=Time.sec;
lda 7,X
add #6
sta *__r1
lda 6,X
adc #0
sta *__r0
ldhx *__r0
lda ,x
tsx
sta 2,X
; for(i=22;i<24;i++)
lda #22
sta 3,X
bra L81
L78:
lda 2,X
ldx #10
clrh
div
pshh
pula
tsx
add #48
sta *__r1
clr *__r2
lda 3,X
add #<_LCD_buff
sta *__r3
lda *__r2
adc #>_LCD_buff
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
lda 2,X
ldx #10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -