?? vectors08.s
字號:
.module vectors08.c
.area text
; 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
; /*-----------------------------------------------------*
; *文件名:vectors08.c *
; *功 能:用于定義中斷矢量表 *
; *-----------------------------------------------------*/
; #include "GP32C.H"
; #include "KB.h"
;
; /*[相應(yīng)寄存器定義]*/
; #define TSTOPBit 5 //定時(shí)器計(jì)數(shù)停止位
; #define TOFBit 7 //定時(shí)器溢出標(biāo)志位
; //外部變量
; extern unsigned char time[14]; //存放時(shí)鐘年、月、日、時(shí)、分、秒
; extern unsigned char Ttime[3]; //存放時(shí)鐘時(shí)、分、秒
; extern int Tdate[3]; //存放時(shí)鐘年、月、日
; extern unsigned char Key; //存放按下鍵的定義值
; extern void Changetime(int temp1[],unsigned char temp2[]); //將數(shù)組temp1拆分存儲到數(shù)組temp2
; /*isrTIMER1:定時(shí)器溢出中斷處理函數(shù)---------------------*
; *功 能:給內(nèi)存單元Time[0-2](時(shí)分秒)賦值 *
; *-----------------------------------------------------*/
;
; #pragma interrupt_handler isrTIMER1
; void isrTIMER1(void)
; {
; unsigned char i;
; asm("SEI"); //關(guān)總中斷
SEI
; //------------------------------
; Ttime[2]++; //秒數(shù)加1
inc *_Ttime+2
; if (Ttime[2]!=60) goto isrTIMER1_exit; //秒數(shù)未增加到60,轉(zhuǎn)
lda *_Ttime+2
cmp #60
beq L3
jmp L6
L3:
; Ttime[2]=0; Ttime[1]++; //秒數(shù)增加到60,清0,分鐘數(shù)加1
clr *_Ttime+2
inc *_Ttime+1
; if (Ttime[1]!=60) goto isrTIMER1_exit; //分鐘數(shù)未增到60,轉(zhuǎn)
lda *_Ttime+1
cmp #60
beq L9
jmp L6
L9:
; Ttime[1]=0; Ttime[0]++; //分鐘數(shù)增加到60,清0,小時(shí)數(shù)加1
clr *_Ttime+1
inc *_Ttime
; if (Ttime[0]!=24) goto isrTIMER1_exit; //小時(shí)數(shù)未增到24,轉(zhuǎn)
lda *_Ttime
cmp #24
beq L13
jmp L6
L13:
; Ttime[0]=0; Tdate[2]++; //時(shí)數(shù)增加到24,清0
clr *_Ttime
ldhx *_Tdate+4
aix #1
sthx *_Tdate+4
; if(Tdate[1]==1||Tdate[1]==3||Tdate[1]==5||Tdate[1]==7||
ldhx *_Tdate+2
cphx #1
tsx
beq L30
ldhx *_Tdate+2
cphx #3
tsx
beq L30
ldhx *_Tdate+2
cphx #5
tsx
beq L30
ldhx *_Tdate+2
cphx #7
tsx
beq L30
ldhx *_Tdate+2
cphx #8
tsx
beq L30
ldhx *_Tdate+2
cphx #10
tsx
beq L30
ldhx *_Tdate+2
cphx #12
tsx
bne L16
L30:
; Tdate[1]==8||Tdate[1]==10||Tdate[1]==12)
; { if(Tdate[2]<=31) goto isrTIMER1_exit;
ldhx *_Tdate+4
cphx #31
tsx
bgt L31
jmp L6
L31:
; Tdate[2]=0;Tdate[1]++;
clr *_Tdate+4+1
clr *_Tdate+4
ldhx *_Tdate+2
aix #1
sthx *_Tdate+2
tsx
; }
L16:
; if(Tdate[1]==2&&(Tdate[0]%4==0&&Tdate[0]%100!=0||Tdate[0]%400==0))
ldhx *_Tdate+2
cphx #2
tsx
bne L36
lda *_Tdate+1
sta *__rlo
lda *_Tdate
sta *__rhi
lda #4
psha
clra
psha
jsr __divmod16s
pula
sta *__r0
pula
sta *__r1
ldhx *__r0
cphx #0
tsx
bne L40
lda *_Tdate+1
sta *__rlo
lda *_Tdate
sta *__rhi
lda #100
psha
clra
psha
jsr __divmod16s
pula
sta *__r0
pula
sta *__r1
ldhx *__r0
cphx #0
tsx
bne L39
L40:
lda *_Tdate+1
sta *__rlo
lda *_Tdate
sta *__rhi
lda #-112
psha
lda #1
psha
jsr __divmod16s
pula
sta *__r0
pula
sta *__r1
ldhx *__r0
cphx #0
tsx
bne L36
L39:
; { if(Tdate[2]<=29) goto isrTIMER1_exit;
ldhx *_Tdate+4
cphx #29
tsx
bgt L41
bra L6
L41:
; Tdate[2]=0;Tdate[1]++;
clr *_Tdate+4+1
clr *_Tdate+4
ldhx *_Tdate+2
aix #1
sthx *_Tdate+2
tsx
; }
L36:
; if(Tdate[1]==2||Tdate[1]==4||Tdate[1]==6||Tdate[1]==9||Tdate[1]==11)
ldhx *_Tdate+2
cphx #2
tsx
beq L56
ldhx *_Tdate+2
cphx #4
tsx
beq L56
ldhx *_Tdate+2
cphx #6
tsx
beq L56
ldhx *_Tdate+2
cphx #9
tsx
beq L56
ldhx *_Tdate+2
cphx #11
tsx
bne L46
L56:
; { if(Tdate[2]<=30) goto isrTIMER1_exit;
ldhx *_Tdate+4
cphx #30
tsx
bgt L57
bra L6
L57:
; Tdate[2]=0;Tdate[1]++;
clr *_Tdate+4+1
clr *_Tdate+4
ldhx *_Tdate+2
aix #1
sthx *_Tdate+2
tsx
; }
L46:
; if(Tdate[1]<=12) goto isrTIMER1_exit;
ldhx *_Tdate+2
cphx #12
tsx
bgt L62
bra L6
L62:
; Tdate[1]=0;Tdate[0]++;
clr *_Tdate+2+1
clr *_Tdate+2
ldhx *_Tdate
aix #1
sthx *_Tdate
; if(Tdate[0]<=10000) goto isrTIMER1_exit;
ldhx *_Tdate
cphx #10000
tsx
bgt L66
bra L6
L66:
; Tdate[0]=0;
clr *_Tdate+1
clr *_Tdate
L6:
; isrTIMER1_exit:
; //------------------------------
; //清除定時(shí)器溢出標(biāo)志位
; Changetime((int *)Tdate,(unsigned char *)Ttime);
lda #<_Ttime
psha
lda #>_Ttime
psha
lda #<_Tdate
psha
lda #>_Tdate
psha
jsr _Changetime
ais #4
tsx
; T1SC&=~(1<<TOFBit);
bclr #7,0x20
;
; asm("CLI"); //開總中斷
CLI
L1:
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
; KB_valve -> 0,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 #-1
tsx
; }
; /*鍵盤中斷處理函數(shù)------------------------------------*/
; #pragma interrupt_handler isrKBI
; void isrKBI(void)
; {
; unsigned char KB_valve;
; asm("SEI"); //關(guān)總中斷
SEI
; INTKBSCR|= (1<<IntBit); //屏蔽鍵盤中斷(IMASKK=1)
bset #1,0x1a
; KB_valve=KB_Scan(); //掃描鍵值
jsr _KB_Scan
tsx
sta *__r1
sta ,X
; Key=KB_Def(KB_valve); //獲得鍵定義值
psha
jsr _KB_Def
ais #1
sta *__r1
sta *_Key
; KB_Init(); //重新初始化鍵盤
jsr _KB_Init
tsx
; INTKBSCR&= ~(1<<IntBit); //打開鍵盤中斷(IMASKK=0)
bclr #1,0x1a
; asm("CLI"); //開總中斷
CLI
L68:
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
_isrDummy::
pshh
; }
;
; //未定義的中斷處理函數(shù),本函數(shù)不能刪除
; #pragma interrupt_handler isrDummy
; void isrDummy(void)
; {
L69:
.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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -