⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vectors08.s

📁 摩托罗拉的时钟的原代码
💻 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" 
; 
; /*[相应寄存器定义]*/
; #define TSTOPBit   5        //定时器计数停止位
; #define TOFBit     7        //定时器溢出标志位
; //外部变量
; extern unsigned char time[14];   //存放时钟年、月、日、时、分、秒
; extern unsigned char Ttime[3];   //存放时钟时、分、秒
; extern int Tdate[3];             //存放时钟年、月、日
; extern unsigned char Key;        //存放按下键的定义值
; extern void Changetime(int temp1[],unsigned char temp2[]);  //将数组temp1拆分存储到数组temp2
; /*isrTIMER1:定时器溢出中断处理函数---------------------*
; *功  能:给内存单元Time[0-2](时分秒)赋值                *
; *-----------------------------------------------------*/
; 
; #pragma interrupt_handler isrTIMER1
; void isrTIMER1(void)
; {
;    unsigned char i;
;    asm("SEI");            //关总中断
	SEI
;    //------------------------------
;    Ttime[2]++;             //秒数加1
	inc *_Ttime+2
;    if (Ttime[2]!=60) goto isrTIMER1_exit; //秒数未增加到60,转
	lda *_Ttime+2
	cmp #60
	beq L3
	jmp L6
L3:
;    Ttime[2]=0; Ttime[1]++;  //秒数增加到60,清0,分钟数加1
	clr *_Ttime+2
	inc *_Ttime+1
;    if (Ttime[1]!=60) goto isrTIMER1_exit; //分钟数未增到60,转
	lda *_Ttime+1
	cmp #60
	beq L9
	jmp L6
L9:
;    Ttime[1]=0; Ttime[0]++;  //分钟数增加到60,清0,小时数加1
	clr *_Ttime+1
	inc *_Ttime
;    if (Ttime[0]!=24) goto isrTIMER1_exit; //小时数未增到24,转
	lda *_Ttime
	cmp #24
	beq L13
	jmp L6
L13:
;    Ttime[0]=0; Tdate[2]++;            //时数增加到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:	 
;    //------------------------------
;    //清除定时器溢出标志位
;    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
; }
; /*键盘中断处理函数------------------------------------*/
; #pragma interrupt_handler isrKBI
; void isrKBI(void) 
; {
; 	 unsigned char KB_valve;
; 	 asm("SEI");	  	        //关总中断
	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
; }
; 
; //未定义的中断处理函数,本函数不能删除
; #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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -