📄 vectors08.s
字号:
.module vectors08.c
.area data
_flat::
.blkb 1
.area idata
.byte 0
.area data
_f1::
.blkb 1
.area idata
.byte 0
.area data
_f2::
.blkb 1
.area idata
.byte 0
.area data
.area text
; days -> 2,X
; month -> 7,X
; year -> 5,X
_getmonthdays::
ais #-3
tsx
; /*-----------------------------------------------------*
; *文件名:vectors08.c *
; *功 能:用于定义中断矢量表 *
; *-----------------------------------------------------*/
; #include "GP32C.H"
; #include "SCI.h" //串行通信头文件
; #include "KB.h"
; /*[相应寄存器定义]*/
; #define TSTOPBit 5 //定时器计数停止位
; #define TOFBit 7 //定时器溢出标志位
; /*isrTIMER1:定时器溢出中断处理函数---------------------*
; *功 能:给内存单元Time[0-2](时分秒)赋值 *
; *-----------------------------------------------------*/
; extern unsigned char time[3], naozhong,KB_valve; //H M S
; extern unsigned int data[3];
; extern unsigned char alart[2];
; unsigned char flat=0,f1=0,f2=0;
; unsigned char getmonthdays(unsigned int year,unsigned char month)/*得到某月的天数*/
; {
; unsigned char days;
; switch (month)
clr ,X
lda 7,X
sta 1,X
lda ,X
bne X0
lda 1,X
cmp #2
beq L6
X0:
lda ,X
bne X1
lda 1,X
cmp #4
beq L5
X1:
lda ,X
bne X2
lda 1,X
cmp #6
beq L5
X2:
lda ,X
bne X3
lda 1,X
cmp #9
beq L5
X3:
lda ,X
bne X4
lda 1,X
cmp #11
beq L5
X4:
bra L2
X5:
; {
L5:
; case 4:
; case 6:
; case 9:
; case 11:days=30;
lda #30
sta 2,X
; break;
bra L3
L6:
; case 2: if((year%4==0&&year%100!=0)||(year%400==0)) days=29;
lda 6,X
and #3
sta *__r1
clra
sta *__r0
ldhx *__r0
cphx #0
tsx
bne L10
lda 6,X
sta *__rlo
lda 5,X
sta *__rhi
lda #100
psha
clra
psha
jsr __divmod16u
pula
sta *__r0
pula
sta *__r1
ldhx *__r0
cphx #0
tsx
bne L9
L10:
lda 6,X
sta *__rlo
lda 5,X
sta *__rhi
lda #-112
psha
lda #1
psha
jsr __divmod16u
pula
sta *__r0
pula
sta *__r1
ldhx *__r0
cphx #0
tsx
bne L7
L9:
lda #29
sta 2,X
bra L3
L7:
; else days=28;
lda #28
sta 2,X
; break;
bra L3
L2:
; default:days=31;
lda #31
sta 2,X
; break;
L3:
; }
; return days;
lda 2,X
L1:
ais #3
.dbline 0 ; func end
rts
; i -> 0,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 #-1
tsx
; }
; #pragma interrupt_handler isrTIMER1
; void isrTIMER1(void)
; {
; unsigned char i;
; asm("SEI"); //关总中断
SEI
; //------------------------------
; if(((time[0]==0)&&(time[1]==0))||((time[1]==alart[0])&&(time[2]==alart[0])))naozhong=1;
lda *_time
bne L18
lda *_time+1
beq L17
L18:
lda *_time+1
cmp *_alart
bne L12
lda *_time+2
cmp *_alart
bne L12
L17:
lda #1
sta *_naozhong
L12:
; time[0]++; //秒数加1
inc *_time
; if (time[0]!=60) goto isrTIMER1_exit; //秒数未增加到60,转
lda *_time
cmp #60
beq L19
bra L21
L19:
; time[0]=0; time[1]++; //秒数增加到60,清0,分钟数加1
clr *_time
inc *_time+1
; if (time[1]!=60) goto isrTIMER1_exit; //分钟数未增到60,转
lda *_time+1
cmp #60
beq L23
bra L21
L23:
; time[1]=0; time[2]++; //分钟数增加到60,清0,小时数加1
clr *_time+1
inc *_time+2
; if (time[2]!=24) goto isrTIMER1_exit; //小时数未增到24,转
lda *_time+2
cmp #24
beq L28
bra L21
L28:
; time[2]=0; data[0]++; //时数增加到24,清0,日期增1
clr *_time+2
lda *_data+1
add #1
sta *_data+1
lda *_data
adc #0
sta *_data
; if(data[0]!=getmonthdays(data[2],data[1])) goto isrTIMER1_exit; //天数数未增到月尾值,转
lda *_data+2+1
psha
ldhx *_data+4
pshx
pshh
jsr _getmonthdays
ais #3
sta *__r1
clr *__r0
ldhx *_data
cphx *__r0
tsx
beq L32
bra L21
L32:
; data[0]=0;data[1]++; //天数增加到月尾值,清0,月数加1
clr *_data+1
clr *_data
lda *_data+2+1
add #1
sta *_data+2+1
lda *_data+2
adc #0
sta *_data+2
; if(data[1]!=13)goto isrTIMER1_exit; //月数增加未增加到12,转
ldhx *_data+2
cphx #13
tsx
beq L37
bra L21
L37:
; data[1]=0;data[2]++; //月数增加到12,清0,年数加1
clr *_data+2+1
clr *_data+2
lda *_data+4+1
add #1
sta *_data+4+1
lda *_data+4
adc #0
sta *_data+4
L21:
; isrTIMER1_exit:
; //------------------------------
; //清除定时器溢出标志位
; T1SC&=~(1<<TOFBit);
bclr #7,0x20
; asm("CLI"); //开总中断
CLI
L11:
ais #1
.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
_isrRe::
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
; }
; /*isrRe:接收中断处理函数-------------------------------*
; *功 能:接收3字节基准时分秒放入内存单元Time[0-2] *
; *-----------------------------------------------------*/
; #pragma interrupt_handler isrRe
; void isrRe(void)
; {
; asm("SEI"); //禁止所有中断
SEI
; //接收数据
; SCIReN(3,time);
ldhx #_time
pshx
pshh
lda #3
psha
jsr _SCIReN
ais #3
tsx
; asm("CLI"); //开放总中断
CLI
L42:
.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
_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
; }
; /*键盘中断处理函数------------------------------------*/
; #pragma interrupt_handler isrKBI
; void isrKBI(void)
; {
;
; asm("SEI"); //关总中断
SEI
; INTKBSCR|= (1<<IntBit); //屏蔽键盘中断(IMASKK=1)
bset #1,0x1a
; KB_valve=KB_Scan(); //扫描键值
jsr _KB_Scan
sta *__r1
sta *_KB_valve
; KB_valve=KB_Def(KB_valve); //键值转化为
lda *_KB_valve
psha
jsr _KB_Def
ais #1
tsx
sta *__r1
sta *_KB_valve
L44:
; isrKBI_exit:
; KB_Init(); //重新初始化键盘
jsr _KB_Init
tsx
; INTKBSCR&= ~(1<<IntBit); //打开键盘中断(IMASKK=0)
bclr #1,0x1a
; asm("CLI"); //开总中断
CLI
L43:
.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)
; {
L45:
.dbline 0 ; func end
pulh
rti
.area memory(abs)
.org 0xffdc
__vectab::
.word _isrDummy
.word _isrDummy
.word _isrKBI
.word _isrDummy
.word _isrRe
.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 + -