📄 vectors08.lis
字号:
.module vectors08.c
.area data
0000 _flat::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data
0001 _f1::
0001 .blkb 1
.area idata
0001 00 .byte 0
.area data
0002 _f2::
0002 .blkb 1
.area idata
0002 00 .byte 0
.area data
.area text
; days -> 2,X
; month -> 7,X
; year -> 5,X
0000 _getmonthdays::
0000 A7FD ais #-3
0002 95 tsx
0003 ; /*-----------------------------------------------------*
0003 ; *文件名:vectors08.c *
0003 ; *功 能:用于定义中断矢量表 *
0003 ; *-----------------------------------------------------*/
0003 ; #include "GP32C.H"
0003 ; #include "SCI.h" //串行通信头文件
0003 ; #include "KB.h"
0003 ; /*[相应寄存器定义]*/
0003 ; #define TSTOPBit 5 //定时器计数停止位
0003 ; #define TOFBit 7 //定时器溢出标志位
0003 ; /*isrTIMER1:定时器溢出中断处理函数---------------------*
0003 ; *功 能:给内存单元Time[0-2](时分秒)赋值 *
0003 ; *-----------------------------------------------------*/
0003 ; extern unsigned char time[3], naozhong,KB_valve; //H M S
0003 ; extern unsigned int data[3];
0003 ; extern unsigned char alart[2];
0003 ; unsigned char flat=0,f1=0,f2=0;
0003 ; unsigned char getmonthdays(unsigned int year,unsigned char month)/*得到某月的天数*/
0003 ; {
0003 ; unsigned char days;
0003 ; switch (month)
0003 7F clr ,X
0004 E607 lda 7,X
0006 E701 sta 1,X
0008 F6 lda ,X
0009 2606 bne X0
000B E601 lda 1,X
000D A102 cmp #2
000F 272C beq L6
0011 X0:
0011 F6 lda ,X
0012 2606 bne X1
0014 E601 lda 1,X
0016 A104 cmp #4
0018 271D beq L5
001A X1:
001A F6 lda ,X
001B 2606 bne X2
001D E601 lda 1,X
001F A106 cmp #6
0021 2714 beq L5
0023 X2:
0023 F6 lda ,X
0024 2606 bne X3
0026 E601 lda 1,X
0028 A109 cmp #9
002A 270B beq L5
002C X3:
002C F6 lda ,X
002D 2606 bne X4
002F E601 lda 1,X
0031 A10B cmp #11
0033 2702 beq L5
0035 X4:
0035 2060 bra L2
0037 X5:
0037 ; {
0037 L5:
0037 ; case 4:
0037 ; case 6:
0037 ; case 9:
0037 ; case 11:days=30;
0037 A61E lda #30
0039 E702 sta 2,X
003B ; break;
003B 205E bra L3
003D L6:
003D ; case 2: if((year%4==0&&year%100!=0)||(year%400==0)) days=29;
003D E606 lda 6,X
003F A403 and #3
0041 B700 sta *__r1
0043 4F clra
0044 B700 sta *__r0
0046 5500 ldhx *__r0
0048 650000 cphx #0
004B 95 tsx
004C 261E bne L10
004E E606 lda 6,X
0050 B700 sta *__rlo
0052 E605 lda 5,X
0054 B700 sta *__rhi
0056 A664 lda #100
0058 87 psha
0059 4F clra
005A 87 psha
005B CD0000 jsr __divmod16u
005E 86 pula
005F B700 sta *__r0
0061 86 pula
0062 B700 sta *__r1
0064 5500 ldhx *__r0
0066 650000 cphx #0
0069 95 tsx
006A 261F bne L9
006C L10:
006C E606 lda 6,X
006E B700 sta *__rlo
0070 E605 lda 5,X
0072 B700 sta *__rhi
0074 A690 lda #-112
0076 87 psha
0077 A601 lda #1
0079 87 psha
007A CD0000 jsr __divmod16u
007D 86 pula
007E B700 sta *__r0
0080 86 pula
0081 B700 sta *__r1
0083 5500 ldhx *__r0
0085 650000 cphx #0
0088 95 tsx
0089 2606 bne L7
008B L9:
008B A61D lda #29
008D E702 sta 2,X
008F 200A bra L3
0091 L7:
0091 ; else days=28;
0091 A61C lda #28
0093 E702 sta 2,X
0095 ; break;
0095 2004 bra L3
0097 L2:
0097 ; default:days=31;
0097 A61F lda #31
0099 E702 sta 2,X
009B ; break;
009B L3:
009B ; }
009B ; return days;
009B E602 lda 2,X
009D L1:
009D A703 ais #3
009F .dbline 0 ; func end
009F 81 rts
00A0 ; i -> 0,X
00A0 _isrTIMER1::
00A0 8B pshh
00A1 B600 lda *__r0
00A3 87 psha
00A4 B600 lda *__r1
00A6 87 psha
00A7 B600 lda *__r2
00A9 87 psha
00AA B600 lda *__r3
00AC 87 psha
00AD B600 lda *__r4
00AF 87 psha
00B0 B600 lda *__r5
00B2 87 psha
00B3 B600 lda *__r6
00B5 87 psha
00B6 B600 lda *__r7
00B8 87 psha
00B9 B600 lda *__r8
00BB 87 psha
00BC B600 lda *__r9
00BE 87 psha
00BF B600 lda *__r10
00C1 87 psha
00C2 B600 lda *__r11
00C4 87 psha
00C5 B600 lda *__rhi
00C7 87 psha
00C8 B600 lda *__rlo
00CA 87 psha
00CB A7FF ais #-1
00CD 95 tsx
00CE ; }
00CE ; #pragma interrupt_handler isrTIMER1
00CE ; void isrTIMER1(void)
00CE ; {
00CE ; unsigned char i;
00CE ; asm("SEI"); //关总中断
00CE 9B SEI
00CF ; //------------------------------
00CF ; if(((time[0]==0)&&(time[1]==0))||((time[1]==alart[0])&&(time[2]==alart[0])))naozhong=1;
00CF B600 lda *_time
00D1 2604 bne L18
00D3 B601 lda *_time+1
00D5 270C beq L17
00D7 L18:
00D7 B601 lda *_time+1
00D9 B100 cmp *_alart
00DB 260A bne L12
00DD B602 lda *_time+2
00DF B100 cmp *_alart
00E1 2604 bne L12
00E3 L17:
00E3 A601 lda #1
00E5 B700 sta *_naozhong
00E7 L12:
00E7 ; time[0]++; //秒数加1
00E7 3C00 inc *_time
00E9 ; if (time[0]!=60) goto isrTIMER1_exit; //秒数未增加到60,转
00E9 B600 lda *_time
00EB A13C cmp #60
00ED 2702 beq L19
00EF 2069 bra L21
00F1 L19:
00F1 ; time[0]=0; time[1]++; //秒数增加到60,清0,分钟数加1
00F1 3F00 clr *_time
00F3 3C01 inc *_time+1
00F5 ; if (time[1]!=60) goto isrTIMER1_exit; //分钟数未增到60,转
00F5 B601 lda *_time+1
00F7 A13C cmp #60
00F9 2702 beq L23
00FB 205D bra L21
00FD L23:
00FD ; time[1]=0; time[2]++; //分钟数增加到60,清0,小时数加1
00FD 3F01 clr *_time+1
00FF 3C02 inc *_time+2
0101 ; if (time[2]!=24) goto isrTIMER1_exit; //小时数未增到24,转
0101 B602 lda *_time+2
0103 A118 cmp #24
0105 2702 beq L28
0107 2051 bra L21
0109 L28:
0109 ; time[2]=0; data[0]++; //时数增加到24,清0,日期增1
0109 3F02 clr *_time+2
010B B601 lda *_data+1
010D AB01 add #1
010F B701 sta *_data+1
0111 B600 lda *_data
0113 A900 adc #0
0115 B700 sta *_data
0117 ; if(data[0]!=getmonthdays(data[2],data[1])) goto isrTIMER1_exit; //天数数未增到月尾值,转
0117 B603 lda *_data+2+1
0119 87 psha
011A 5504 ldhx *_data+4
011C 89 pshx
011D 8B pshh
011E CD0000 jsr _getmonthdays
0121 A703 ais #3
0123 B700 sta *__r1
0125 3F00 clr *__r0
0127 5500 ldhx *_data
0129 7500 cphx *__r0
012B 95 tsx
012C 2702 beq L32
012E 202A bra L21
0130 L32:
0130 ; data[0]=0;data[1]++; //天数增加到月尾值,清0,月数加1
0130 3F01 clr *_data+1
0132 3F00 clr *_data
0134 B603 lda *_data+2+1
0136 AB01 add #1
0138 B703 sta *_data+2+1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -