📄 vectors08.s
字号:
.module vectors08.c
.area text
; KB_valve -> 2,X
_isrKBI::
pshh
lda *__r0
psha
lda *__r1
psha
lda *__r2
psha
lda *__r3
psha
lda *__r4
psha
lda *__r5
psha
lda *__r6
psha
lda *__r7
psha
lda *__r8
psha
lda *__r9
psha
lda *__r10
psha
lda *__r11
psha
lda *__rhi
psha
lda *__rlo
psha
ais #-3
tsx
; /*-----------------------------------------------------*
; *文件名:vectors08.c *
; *功 能:用于定义中断矢量表 *
; *-----------------------------------------------------*/
; //[头文件]
; #include "GP32C.H" //包含头文件
; #include "userdefine.h"
; #include "KB.h"
; //未定义的中断处理函数,本函数不能删除
; #define TSTOPBit 5 //定时器计数停止位
; #define TOFBit 7 //定时器溢出标志位
; /*isrTIMER1:定时器溢出中断处理函数---------------------*
; *功 能:给内存单元Time[0-2](时分秒)赋值 *
; *-----------------------------------------------------*/
; extern Time_Struct Time,Alarm; //H M S
; extern void Time_Var2char(Time_Struct);
; extern void lcdshow(unsigned char str[]);
; extern char Is_yunnian(unsigned short int year);
; extern void Alarm_handle(void);
; extern char Select_key_is_pressed_flag,Up_Modify_key_is_pressed_flag,Down_Modify_key_is_pressed_flag;
; extern char Timer_5sec_trigger,Timer_5sec_counter,Alarm_counter;
; extern char Alarm_enable_flag,Alarm_trigger,Minute_second_integral_flag,Integral_counter;
; extern char Time_fresh,Alarm_fresh;
; extern unsigned char LCD_buff[32];
;
; #pragma interrupt_handler isrKBI
; void isrKBI(void)
; {
; unsigned char KB_valve;
; asm("SEI"); //关总中断
SEI
; Timer_5sec_trigger=1;
lda #1
sta *_Timer_5sec_trigger
; Timer_5sec_counter=0;
clr *_Timer_5sec_counter
; INTKBSCR|= (1<<IntBit); //屏蔽键盘中断(IMASKK=1)
bset #1,0x1a
; KB_valve=KB_Scan(); //扫描键值
jsr _KB_Scan
tsx
sta *__r1
sta 2,X
; KB_valve=KB_Def(KB_valve); //键值转化为定义值
psha
jsr _KB_Def
ais #1
tsx
sta *__r1
sta 2,X
; switch(KB_valve)
clr ,X
sta 1,X
lda ,X
bne X0
lda 1,X
cmp #49
beq L7
X0:
lda ,X
bne X1
lda 1,X
cmp #50
beq L8
X1:
lda ,X
bne X2
lda 1,X
cmp #51
beq L9
X2:
lda ,X
bne X3
lda 1,X
cmp #52
beq L10
X3:
bra L5
X4:
; {
L7:
; case '1':Select_key_is_pressed_flag++;break;
inc *_Select_key_is_pressed_flag
bra L5
L8:
; case '2':Up_Modify_key_is_pressed_flag++;break;
inc *_Up_Modify_key_is_pressed_flag
bra L5
L9:
; case '3':Down_Modify_key_is_pressed_flag++;break;
inc *_Down_Modify_key_is_pressed_flag
bra L5
L10:
; case '4':Alarm_handle();break;
jsr _Alarm_handle
tsx
; default: ;break;
L5:
; }
; KB_Init(); //重新初始化键盘
jsr _KB_Init
tsx
; INTKBSCR&= ~(1<<IntBit); //打开键盘中断(IMASKK=0)
bclr #1,0x1a
; asm("CLI"); //开总中断
CLI
L3:
ais #3
.dbline 0 ; func end
pula
sta *__rlo
pula
sta *__rhi
pula
sta *__r11
pula
sta *__r10
pula
sta *__r9
pula
sta *__r8
pula
sta *__r7
pula
sta *__r6
pula
sta *__r5
pula
sta *__r4
pula
sta *__r3
pula
sta *__r2
pula
sta *__r1
pula
sta *__r0
pulh
rti
; tmp -> 0,X
; i -> 1,X
_isrTIMER1::
pshh
lda *__r0
psha
lda *__r1
psha
lda *__r2
psha
lda *__r3
psha
lda *__r4
psha
lda *__r5
psha
lda *__r6
psha
lda *__r7
psha
lda *__r8
psha
lda *__r9
psha
lda *__r10
psha
lda *__r11
psha
lda *__rhi
psha
lda *__rlo
psha
ais #-2
tsx
; }
;
;
;
; #pragma interrupt_handler isrTIMER1
; void isrTIMER1(void)
; {
; unsigned char i,tmp;
; asm("SEI"); //关总中断
SEI
; //------------------------------
; Time.sec++;
inc *_Time+6
; if(Time.sec!=60) goto isrTIMER1_exit;
lda *_Time+6
cmp #60
beq L13
jmp L16
L13:
; Time.sec=0;
clr *_Time+6
; Time.min++;
inc *_Time+5
; if(Time.min!=60) goto isrTIMER1_exit;
lda *_Time+5
cmp #60
beq L19
jmp L16
L19:
; Time.min=0;
clr *_Time+5
; Time.hour++;
inc *_Time+4
; if(Time.hour!=24) goto isrTIMER1_exit;
lda *_Time+4
cmp #24
beq L24
jmp L16
L24:
; Time.hour=0;
clr *_Time+4
; Time.day++;
inc *_Time+3
; if(!Is_yunnian(Time.year)) //如果不是闰年
ldhx *_Time
pshx
pshh
jsr _Is_yunnian
ais #2
tsx
sta *__r1
beq X5
jmp L29
X5:
; {
; if((Time.month!=2)&&(Time.month==1)||(Time.month==3)||(Time.month==5)||(Time.month==7)||(Time.month==8)||(Time.month==10||(Time.month==12)))
lda *_Time+2
cmp #2
beq L42
lda *_Time+2
cmp #1
beq L47
L42:
lda *_Time+2
cmp #3
beq L47
lda *_Time+2
cmp #5
beq L47
lda *_Time+2
cmp #7
beq L47
lda *_Time+2
cmp #8
beq L47
lda *_Time+2
cmp #10
beq L47
lda *_Time+2
cmp #12
bne L31
L47:
; {
; if(Time.day!=31) goto isrTIMER1_exit;
lda *_Time+3
cmp #31
beq L48
jmp L16
L48:
; Time.day=0;
clr *_Time+3
; Time.month++;
inc *_Time+2
; if(Time.month!=12) goto isrTIMER1_exit;
lda *_Time+2
cmp #12
beq L53
jmp L16
L53:
; Time.month=0;
clr *_Time+2
; Time.year++;
lda *_Time+1
add #1
sta *_Time+1
lda *_Time
adc #0
sta *_Time
; }
jmp L30
L31:
; else if((Time.month!=2)&&(Time.month==4)||(Time.month==6)||(Time.month==9)||(Time.month==11))
lda *_Time+2
cmp #2
beq L65
lda *_Time+2
cmp #4
beq L67
L65:
lda *_Time+2
cmp #6
beq L67
lda *_Time+2
cmp #9
beq L67
lda *_Time+2
cmp #11
bne L57
L67:
; {
; if(Time.day!=30) goto isrTIMER1_exit;
lda *_Time+3
cmp #30
beq L68
jmp L16
L68:
; Time.day=0;
clr *_Time+3
; Time.month++;
inc *_Time+2
; if(Time.month!=12) goto isrTIMER1_exit;
lda *_Time+2
cmp #12
beq L73
jmp L16
L73:
; Time.month=0;
clr *_Time+2
; Time.year++;
lda *_Time+1
add #1
sta *_Time+1
lda *_Time
adc #0
sta *_Time
; }
jmp L30
L57:
; else
; {
; if(Time.day!=28) goto isrTIMER1_exit;
lda *_Time+3
cmp #28
beq L77
jmp L16
L77:
; Time.day=0;
clr *_Time+3
; Time.month++;
inc *_Time+2
; if(Time.month!=12) goto isrTIMER1_exit;
lda *_Time+2
cmp #12
beq L82
jmp L16
L82:
; Time.month=0;
clr *_Time+2
; Time.year++;
lda *_Time+1
add #1
sta *_Time+1
lda *_Time
adc #0
sta *_Time
; }
; }
jmp L30
L29:
; else //否则为闰年
; {
; if((Time.month!=2)&&(Time.month==1)||(Time.month==3)||(Time.month==5)||(Time.month==7)||(Time.month==8)||(Time.month==10||(Time.month==12)))
lda *_Time+2
cmp #2
beq L97
lda *_Time+2
cmp #1
beq L102
L97:
lda *_Time+2
cmp #3
beq L102
lda *_Time+2
cmp #5
beq L102
lda *_Time+2
cmp #7
beq L102
lda *_Time+2
cmp #8
beq L102
lda *_Time+2
cmp #10
beq L102
lda *_Time+2
cmp #12
bne L86
L102:
; {
; if(Time.day!=31) goto isrTIMER1_exit;
lda *_Time+3
cmp #31
beq L103
jmp L16
L103:
; Time.day=0;
clr *_Time+3
; Time.month++;
inc *_Time+2
; if(Time.month!=12) goto isrTIMER1_exit;
lda *_Time+2
cmp #12
beq L108
jmp L16
L108:
; Time.month=0;
clr *_Time+2
; Time.year++;
lda *_Time+1
add #1
sta *_Time+1
lda *_Time
adc #0
sta *_Time
; }
bra L87
L86:
; else if((Time.month!=2)&&(Time.month==4)||(Time.month==6)||(Time.month==9)||(Time.month==11))
lda *_Time+2
cmp #2
beq L120
lda *_Time+2
cmp #4
beq L122
L120:
lda *_Time+2
cmp #6
beq L122
lda *_Time+2
cmp #9
beq L122
lda *_Time+2
cmp #11
bne L112
L122:
; {
; if(Time.day!=30) goto isrTIMER1_exit;
lda *_Time+3
cmp #30
beq L123
bra L16
L123:
; Time.day=0;
clr *_Time+3
; Time.month++;
inc *_Time+2
; if(Time.month!=12) goto isrTIMER1_exit;
lda *_Time+2
cmp #12
beq L128
bra L16
L128:
; Time.month=0;
clr *_Time+2
; Time.year++;
lda *_Time+1
add #1
sta *_Time+1
lda *_Time
adc #0
sta *_Time
; }
bra L113
L112:
; else
; {
; if(Time.day!=29) goto isrTIMER1_exit;
lda *_Time+3
cmp #29
beq L132
bra L16
L132:
; Time.day=0;
clr *_Time+3
; Time.month++;
inc *_Time+2
; if(Time.month!=12) goto isrTIMER1_exit;
lda *_Time+2
cmp #12
beq L137
bra L16
L137:
; Time.month=0;
clr *_Time+2
; Time.year++;
lda *_Time+1
add #1
sta *_Time+1
lda *_Time
adc #0
sta *_Time
; }
L113:
L87:
; }
L30:
L16:
; isrTIMER1_exit:
; if(Timer_5sec_trigger)
lda *_Timer_5sec_trigger
beq L141
; {
; Timer_5sec_counter++;
inc *_Timer_5sec_counter
; }
L141:
; if(Alarm_enable_flag&&(Time.year==Alarm.year)&&(Time.month==Alarm.month)&&(Time.day==Alarm.day)&&(Time.hour==Alarm.hour)&&(Time.min==Alarm.min))
lda *_Alarm_enable_flag
beq L143
ldhx *_Time
cphx *_Alarm
tsx
bne L143
lda *_Time+2
cmp *_Alarm+2
bne L143
lda *_Time+3
cmp *_Alarm+3
bne L143
lda *_Time+4
cmp *_Alarm+4
bne L143
lda *_Time+5
cmp *_Alarm+5
bne L143
; {
; Alarm_trigger=1;
lda #1
sta *_Alarm_trigger
; Alarm_counter++;
inc *_Alarm_counter
; }
L143:
; if((Time.min==0)&&(Time.sec==0))
lda *_Time+5
bne L153
lda *_Time+6
bne L153
; {
; Minute_second_integral_flag=1;
lda #1
sta *_Minute_second_integral_flag
; }
L153:
; if(Minute_second_integral_flag)
lda *_Minute_second_integral_flag
beq L157
; Integral_counter++;
inc *_Integral_counter
L157:
;
;
; //------------------------------
; //清除定时器溢出标志位
; Time_fresh=1; //置时间更新位!
lda #1
sta *_Time_fresh
; Alarm_fresh=1;
lda #1
sta *_Alarm_fresh
; T1SC&=~(1<<TOFBit);
bclr #7,0x20
; asm("CLI"); //开总中断
CLI
L11:
ais #2
.dbline 0 ; func end
pula
sta *__rlo
pula
sta *__rhi
pula
sta *__r11
pula
sta *__r10
pula
sta *__r9
pula
sta *__r8
pula
sta *__r7
pula
sta *__r6
pula
sta *__r5
pula
sta *__r4
pula
sta *__r3
pula
sta *__r2
pula
sta *__r1
pula
sta *__r0
pulh
rti
_isrDummy::
pshh
; }
;
; #pragma interrupt_handler isrDummy
; void isrDummy(void)
; {
L159:
.dbline 0 ; func end
pulh
rti
.area memory(abs)
.org 0xffdc
__vectab::
.word _isrDummy
.word _isrDummy
.word _isrKBI
.word _isrDummy
.word _isrDummy
.word _isrDummy
.word _isrDummy
.word _isrDummy
.word _isrDummy
.word _isrDummy
.word _isrDummy
.word _isrTIMER1
.word _isrDummy
.word _isrDummy
.word _isrDummy
.word _isrDummy
.word _isrDummy
.area lit
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -