📄 vectors08.lis
字号:
.module vectors08.c
.area text
; i -> 0,X
0000 _isrTIMER1::
0000 8B pshh
0001 A7FF ais #-1
0003 95 tsx
0004 ; /*-----------------------------------------------------*
0004 ; *文件名:vectors08.c *
0004 ; *功 能:用于定义中断矢量表 *
0004 ; *-----------------------------------------------------*/
0004 ; #include "GP32C.H"
0004 ; #include "KB.h"
0004 ;
0004 ; /*[相应寄存器定义]*/
0004 ; #define TSTOPBit 5 //定时器计数停止位
0004 ; #define TOFBit 7 //定时器溢出标志位
0004 ; //外部变量
0004 ; extern unsigned char time[14]; //H M S
0004 ; extern unsigned char Key;
0004 ; /*isrTIMER1:定时器溢出中断处理函数---------------------*
0004 ; *功 能:给内存单元Time[0-2](时分秒)赋值 *
0004 ; *-----------------------------------------------------*/
0004 ;
0004 ; #pragma interrupt_handler isrTIMER1
0004 ; void isrTIMER1(void)
0004 ; {
0004 ; unsigned char i;
0004 ; asm("SEI"); //关总中断
0004 9B SEI
0005 ; //------------------------------
0005 ; time[13]++; //秒数加1
0005 3C0D inc *_time+13
0007 ; if (time[13]!=10) goto isrTIMER1_exit; //秒数未增加到60,转
0007 B60D lda *_time+13
0009 A10A cmp #10
000B 2703 beq L3
000D CC00B2 jmp L6
0010 L3:
0010 ; time[13]=0; time[12]++; //秒数增加到60,清0,分钟数加1
0010 3F0D clr *_time+13
0012 3C0C inc *_time+12
0014 ; if (time[12]!=6) goto isrTIMER1_exit; //分钟数未增到60,转
0014 B60C lda *_time+12
0016 A106 cmp #6
0018 2703 beq L9
001A CC00B2 jmp L6
001D L9:
001D ; time[12]=0; time[11]++; //分钟数增加到60,清0,小时数加1
001D 3F0C clr *_time+12
001F 3C0B inc *_time+11
0021 ; if (time[11]!=10) goto isrTIMER1_exit; //小时数未增到24,转
0021 B60B lda *_time+11
0023 A10A cmp #10
0025 2703 beq L14
0027 CC00B2 jmp L6
002A L14:
002A ; time[11]=0; time[10]++; //时数增加到24,清0
002A 3F0B clr *_time+11
002C 3C0A inc *_time+10
002E ; if(time[10]!=6) goto isrTIMER1_exit;
002E B60A lda *_time+10
0030 A106 cmp #6
0032 2703 beq L19
0034 CC00B2 jmp L6
0037 L19:
0037 ; time[10]=0;time[9]++;
0037 3F0A clr *_time+10
0039 3C09 inc *_time+9
003B ; if(time[9]!=10) goto isrTIMER1_exit;
003B B609 lda *_time+9
003D A10A cmp #10
003F 2703 beq L24
0041 CC00B2 jmp L6
0044 L24:
0044 ; time[9]=0;time[8]++;
0044 3F09 clr *_time+9
0046 3C08 inc *_time+8
0048 ; if(time[8]!=3) goto isrTIMER1_exit;
0048 B608 lda *_time+8
004A A103 cmp #3
004C 2702 beq L29
004E 2062 bra L6
0050 L29:
0050 ; time[8]=0;time[7]++;
0050 3F08 clr *_time+8
0052 3C07 inc *_time+7
0054 ; if(time[7]!=10) goto isrTIMER1_exit;
0054 B607 lda *_time+7
0056 A10A cmp #10
0058 2702 beq L34
005A 2056 bra L6
005C L34:
005C ; time[7]=0;time[6]++;
005C 3F07 clr *_time+7
005E 3C06 inc *_time+6
0060 ; if(time[6]!=3) goto isrTIMER1_exit;
0060 B606 lda *_time+6
0062 A103 cmp #3
0064 2702 beq L39
0066 204A bra L6
0068 L39:
0068 ; time[6]=0;time[5]++;
0068 3F06 clr *_time+6
006A 3C05 inc *_time+5
006C ; if(time[5]!=10) goto isrTIMER1_exit;
006C B605 lda *_time+5
006E A10A cmp #10
0070 2702 beq L44
0072 203E bra L6
0074 L44:
0074 ; time[5]=0;time[4]++;
0074 3F05 clr *_time+5
0076 3C04 inc *_time+4
0078 ; if(time[4]!=2) goto isrTIMER1_exit;
0078 B604 lda *_time+4
007A A102 cmp #2
007C 2702 beq L49
007E 2032 bra L6
0080 L49:
0080 ; time[4]=0;time[3]++;
0080 3F04 clr *_time+4
0082 3C03 inc *_time+3
0084 ; if(time[3]!=10) goto isrTIMER1_exit;
0084 B603 lda *_time+3
0086 A10A cmp #10
0088 2702 beq L54
008A 2026 bra L6
008C L54:
008C ; time[3]=0;time[2]++;
008C 3F03 clr *_time+3
008E 3C02 inc *_time+2
0090 ; if(time[2]!=10) goto isrTIMER1_exit;
0090 B602 lda *_time+2
0092 A10A cmp #10
0094 2702 beq L59
0096 201A bra L6
0098 L59:
0098 ; time[2]=0;time[1]++;
0098 3F02 clr *_time+2
009A 3C01 inc *_time+1
009C ; if(time[1]!=10) goto isrTIMER1_exit;
009C B601 lda *_time+1
009E A10A cmp #10
00A0 2702 beq L64
00A2 200E bra L6
00A4 L64:
00A4 ; time[1]=0;time[0]++;
00A4 3F01 clr *_time+1
00A6 3C00 inc *_time
00A8 ; if(time[0]!=10) goto isrTIMER1_exit;
00A8 B600 lda *_time
00AA A10A cmp #10
00AC 2702 beq L68
00AE 2002 bra L6
00B0 L68:
00B0 ; time[0]=0;
00B0 3F00 clr *_time
00B2 L6:
00B2 ; isrTIMER1_exit:
00B2 ; //------------------------------
00B2 ; //清除定时器溢出标志位
00B2 ; T1SC&=~(1<<TOFBit);
00B2 1F20 bclr #7,0x20
00B4 ; asm("CLI"); //开总中断
00B4 9A CLI
00B5 L1:
00B5 A701 ais #1
00B7 .dbline 0 ; func end
00B7 8A pulh
00B8 80 rti
00B9 ; KB_valve -> 0,X
00B9 _isrKBI::
00B9 8B pshh
00BA B600 lda *__r0
00BC 87 psha
00BD B600 lda *__r1
00BF 87 psha
00C0 B600 lda *__r2
00C2 87 psha
00C3 B600 lda *__r3
00C5 87 psha
00C6 B600 lda *__r4
00C8 87 psha
00C9 B600 lda *__r5
00CB 87 psha
00CC B600 lda *__r6
00CE 87 psha
00CF B600 lda *__r7
00D1 87 psha
00D2 B600 lda *__r8
00D4 87 psha
00D5 B600 lda *__r9
00D7 87 psha
00D8 B600 lda *__r10
00DA 87 psha
00DB B600 lda *__r11
00DD 87 psha
00DE B600 lda *__rhi
00E0 87 psha
00E1 B600 lda *__rlo
00E3 87 psha
00E4 A7FF ais #-1
00E6 95 tsx
00E7 ; }
00E7 ; /*键盘中断处理函数------------------------------------*/
00E7 ; #pragma interrupt_handler isrKBI
00E7 ; void isrKBI(void)
00E7 ; {
00E7 ; unsigned char KB_valve;
00E7 ; asm("SEI"); //关总中断
00E7 9B SEI
00E8 ; INTKBSCR|= (1<<IntBit); //屏蔽键盘中断(IMASKK=1)
00E8 121A bset #1,0x1a
00EA ; KB_valve=KB_Scan(); //扫描键值
00EA CD0000 jsr _KB_Scan
00ED 95 tsx
00EE B700 sta *__r1
00F0 F7 sta ,X
00F1 ; Key=KB_Def(KB_valve); //获得键定义值
00F1 87 psha
00F2 CD0000 jsr _KB_Def
00F5 A701 ais #1
00F7 B700 sta *__r1
00F9 B700 sta *_Key
00FB ; KB_Init(); //重新初始化键盘
00FB CD0000 jsr _KB_Init
00FE 95 tsx
00FF ; INTKBSCR&= ~(1<<IntBit); //打开键盘中断(IMASKK=0)
00FF 131A bclr #1,0x1a
0101 ; asm("CLI"); //开总中断
0101 9A CLI
0102 L70:
0102 A701 ais #1
0104 .dbline 0 ; func end
0104 86 pula
0105 B700 sta *__rlo
0107 86 pula
0108 B700 sta *__rhi
010A 86 pula
010B B700 sta *__r11
010D 86 pula
010E B700 sta *__r10
0110 86 pula
0111 B700 sta *__r9
0113 86 pula
0114 B700 sta *__r8
0116 86 pula
0117 B700 sta *__r7
0119 86 pula
011A B700 sta *__r6
011C 86 pula
011D B700 sta *__r5
011F 86 pula
0120 B700 sta *__r4
0122 86 pula
0123 B700 sta *__r3
0125 86 pula
0126 B700 sta *__r2
0128 86 pula
0129 B700 sta *__r1
012B 86 pula
012C B700 sta *__r0
012E 8A pulh
012F 80 rti
0130 _isrDummy::
0130 8B pshh
0131 ; }
0131 ;
0131 ; //未定义的中断处理函数,本函数不能删除
0131 ; #pragma interrupt_handler isrDummy
0131 ; void isrDummy(void)
0131 ; {
0131 L71:
0131 .dbline 0 ; func end
0131 8A pulh
0132 80 rti
.area memory(abs)
.org 0xffdc
FFDC __vectab::
FFDC 0130 .word _isrDummy
FFDE 0130 .word _isrDummy
FFE0 00B9 .word _isrKBI
FFE2 0130 .word _isrDummy
FFE4 0130 .word _isrDummy
FFE6 0130 .word _isrDummy
FFE8 0130 .word _isrDummy
FFEA 0130 .word _isrDummy
FFEC 0130 .word _isrDummy
FFEE 0130 .word _isrDummy
FFF0 0130 .word _isrDummy
FFF2 0000 .word _isrTIMER1
FFF4 0130 .word _isrDummy
FFF6 0130 .word _isrDummy
FFF8 0130 .word _isrDummy
FFFA 0130 .word _isrDummy
FFFC 0130 .word _isrDummy
.area lit
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -