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

📄 vectors08.s

📁 这是我自己在做实验设计时做的,用摩托罗拉飞思卡尔做的一个多功能电子钟
💻 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 + -