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

📄 vectors08.s

📁 可以显示年月日,时间等,也可以设置闹钟,设定时间
💻 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 + -