📄 vectors08.s
字号:
.module Vectors08.c
.area text
.dbfile Vectors08.c
.dbfunc e isrSCIRe _isrSCIRe fV
; tmp -> 2,X
; i -> 14,X
; data -> 15,X
_isrSCIRe::
.dbline -1
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 #-19
tsx
.dbline 54
; //-------------------------------------------------------------------------*
; //文件名:vectors08.c *
; //功 能:用于定义中断矢量表 *
; //-------------------------------------------------------------------------*
; //头文件
; #include "GP32C.H" //包含头文件
; #include "Type.h" //类型别名定义
; #include "EnDisInt.h" //开放或禁止MCU各模块中断头文件
; #include "LCD.h" //包含LCD驱动头文件
; #include "Show.h" //包含LCD显示头文件
; #include "SCI.h" //包含SCI发送接收头文件
; #include "Flash.h" //擦写Flash函数声明
; //定时器相应寄存器定义
; #define TOFBit 7 //定时器溢出标志位
; #define CH0FBit 7 //定时器通道标志位
;
; //全局变量声明
; extern INT16U ADValue[11]; //11路A/D采集数据
;
; extern INT8U LcdShowBuff[64]; //外部定义64个字节的LCD显示缓冲区
; extern INT16U Temper; //设定温度
; extern INT16U CurtTmp; //当前温度
; extern INT16U CurtTime; //当前时间
; extern INT16U Time; //定时时间
; extern INT8U ScdTim; //中断秒数
; extern INT16U MntTim; //中断分数
; extern const INT16U BigNumCode[10][32]; //32*16点阵数字编码首地址
; extern const INT8U MCUno; //MCU号
; extern INT8U SendFlag; //是否需要向PC发送参数的标志
; extern INT8U FlashFlag1; //因为校准值要写Flash的标志
; extern INT8U FlashFlag2; //因为改MCU号要写Flash的标志
; extern INT16U TmaxAdjust; //PC发来的当前温度校准值
; extern INT8U NewMCUno; //PC发来的新MCU号
; extern INT8U CaptureTime; //捕捉中断用来记上次中断发生时间防"抖动"
; extern INT8U BakeFlag; //Bake炉电源重启按钮是否按下的标志
; extern INT8U ResetFlag; //复位按钮是否按下的标志
;
; extern INT8U N; //写入数据的个数
; extern INT8U FlashData[111]; //写入的数据
;
;
; //=======================中断处理函数函数===================================
;
; //isrSCIRe:串行接收中断处理函数--------------------------------------------*
; //功 能:接收PC发来的数据,根据帧中不同的命令置相应标志 *
; // 命令要求的具体操作在主循环中进行,中断处理函数应尽量简单 *
; //帧格式: 1字节MCU号+1字节命令+2字节数据(若只有1字节数据,"后对齐") *
; //说 明: *
; // 修改的全局变量:TmaxAdjust、NewMCUno *
; // 修改的标志:SendFlag、FlashFlag1、FlashFlag2 *
; //-------------------------------------------------------------------------*
; #pragma interrupt_handler isrSCIRe
; void isrSCIRe(void)
; {
.dbline 58
; INT8U data[4],i;
; INT8U tmp[12];
;
; DisableMCUInterrupt(); //禁止总中断
SEI
.dbline 61
;
; //接收4字节数据,根据帧头的MCU号判断是否作进一步处理
; SCIReN(1,data);
aix #15
pshx
pshh
lda #1
psha
jsr _SCIReN
ais #3
tsx
.dbline 62
; if(data[0]==MCUno)
lda 15,X
cmp _MCUno
beq X4
jmp L2
X4:
.dbline 63
; {
.dbline 64
; SCIReN(4,data);
aix #15
pshx
pshh
lda #4
psha
jsr _SCIReN
ais #3
tsx
.dbline 65
; if(data[3]=='E') //帧头:MCU号;帧尾:'E'
lda 18,X
cmp #69
beq X5
jmp L3
X5:
.dbline 66
; switch(data[0])
clr ,X
lda 15,X
sta 1,X
lda ,X
bne X0
lda 1,X
cmp #77
beq L14
X0:
lda 1,X
sta *__r1
lda ,X
sta *__r0
ldhx *__r0
cphx #77
tsx
blt L3
L16:
lda ,X
bne X1
lda 1,X
cmp #82
beq L10
X1:
lda ,X
bne X2
lda 1,X
cmp #84
beq L11
X2:
bra L3
X3:
.dbline 67
; {
L10:
.dbline 69
; case 'R'://读数据命令
; SendFlag=1;
lda #1
sta _SendFlag
.dbline 70
; break;
bra L3
L11:
.dbline 73
;
; case 'T'://校准当前温度值命令
; SCISend1(0x56); //反馈给PC表示接收成功
lda #86
psha
jsr _SCISend1
ais #1
tsx
.dbline 74
; TmaxAdjust=data[1]*256 +data[2]; //当前温度的校准值
lda 16,X
sta _TmaxAdjust
lda 17,X
sta _TmaxAdjust+1
.dbline 75
; FlashFlag1=1;
lda #1
sta _FlashFlag1
.dbline 76
; break;
bra L3
L14:
.dbline 79
;
; case 'M'://更改MCU号命令
; SCISend1(0x56); //反馈给PC表示接收成功
lda #86
psha
jsr _SCISend1
ais #1
tsx
.dbline 80
; NewMCUno=data[2]; //新的MCU号
lda 17,X
sta _NewMCUno
.dbline 81
; FlashFlag2=1;
lda #1
sta _FlashFlag2
.dbline 82
; break;
.dbline 84
; }//switch
; }
bra L3
L2:
.dbline 85
; else if(data[0]==MCUno+10)
lda _MCUno
add #10
sta *__r0
lda 15,X
cmp *__r0
bne L17
.dbline 86
; {
.dbline 87
; SCIReN(111,FlashData);
lda #<_FlashData
psha
lda #>_FlashData
psha
lda #111
psha
jsr _SCIReN
ais #3
tsx
.dbline 88
; N=110;
lda #110
sta _N
.dbline 104
; /* SCISendN(110,FlashData);
;
; EraseFlash(0x8080); //擦除0x8000为始址的一个页
; WriteFlash(0x8080); //将FlashData[8]数组的8个数据写入0x8000为始址的一个页
;
;
; for(i=0;i<11;i++)
; FlashData[i]=i;
; N=11;
; FLBPR=0b11111111; //不保护FLASH区域
; EraseFlash(0x8080); //擦除0x8000为始址的一个页
; FLBPR=0b11111111; //不保护FLASH区域
; WriteFlash(0x8080); //将FlashData[8]数组的8个数据写入0x8000为始址的一个页
; SCISendN(110,(INT8U *)0x8080);
; */
; FlashFlag1=1;
lda #1
sta _FlashFlag1
.dbline 105
; }
L17:
L3:
.dbline 106
; EnableMCUInterrupt(); //开放总中断
CLI
.dbline -2
L1:
ais #19
.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
.dbsym l tmp 2 A[12:12]c
.dbsym l i 14 c
.dbsym l data 15 A[4:4]c
.dbend
.dbfunc e isrTIMER1 _isrTIMER1 fV
_isrTIMER1::
.dbline -1
pshh
.dbline 121
; }
;
;
; //isrTIMER1:定时器1溢出中断处理函数----------------------------------------*
; //功 能:每1秒计时秒数加1,加到60(不含)就清0,并分数加1 *
; // LCD显示刷新间隔:1秒 *
; //说 明: *
; // 修改的全局变量:ScdTim、MntTim *
; // 使用的全局变量:CurtTmp,Temper,CurtTime,Time,LcdShowBuff[64] *
; // 使用的常量:BigNumCode *
; // 修改的标志:无 *
; //-------------------------------------------------------------------------*
; #pragma interrupt_handler isrTIMER1
; void isrTIMER1(void)
; {
.dbline 122
; DisableMCUInterrupt(); //禁止总中断
SEI
.dbline 125
;
; //1 计时加热时间
; if(ScdTim<59)
lda _ScdTim
cmp #59
bhs L20
.dbline 126
; ScdTim++; //秒计数
lda _ScdTim
add #1
sta _ScdTim
bra L21
L20:
.dbline 128
; else
; {
.dbline 129
; MntTim++; //分计数
lda _MntTim+1
add #1
sta _MntTim+1
lda _MntTim
adc #0
sta _MntTim
.dbline 130
; ScdTim=0;
clra
sta _ScdTim
.dbline 131
; }
L21:
.dbline 134
;
; //3 清除定时器溢出标志位
; T1SC&=~(1<<TOFBit);
bclr #7,0x20
.dbline 136
;
; EnableMCUInterrupt(); //开放总中断
CLI
.dbline -2
L19:
.dbline 0 ; func end
pulh
rti
.dbend
.dbfunc e isrTim2Ch0I _isrTim2Ch0I fV
_isrTim2Ch0I::
.dbline -1
pshh
.dbline 148
; }
;
; //isrTim2Ch0I:定时器2通道0下降沿输入捕捉中断处理程序-----------------------*
; //功 能: 复位按钮按下触发此中断,置标志 *
; //说 明: *
; // 修改的全局变量:CaptureTime(防"抖动") *
; // 使用的全局变量:ScdTim *
; // 修改的标志:ResetFlag *
; //-------------------------------------------------------------------------*
; #pragma interrupt_handler isrTim2Ch0I
; void isrTim2Ch0I(void)
; {
.dbline 149
; DisableMCUInterrupt(); //禁止总中断
SEI
.dbline 153
;
;
; //防"抖动",1秒内最多只算一次中断
; if(CaptureTime !=ScdTim) //好像有1/60的概率将正常中断防掉诶?!
lda _CaptureTime
cmp _ScdTim
beq L23
.dbline 154
; {
.dbline 155
; ResetFlag=1;
lda #1
sta _ResetFlag
.dbline 156
; }
L23:
.dbline 157
; CaptureTime=ScdTim; //更新"上次"中断时间
lda _ScdTim
sta _CaptureTime
.dbline 160
;
; //清除定时器溢出标志位
; T2SC0&=~(1<<CH0FBit);
bclr #7,0x30
.dbline 162
;
; EnableMCUInterrupt(); //开放总中断
CLI
.dbline -2
L22:
.dbline 0 ; func end
pulh
rti
.dbend
.dbfunc e isrTim2Ch1I _isrTim2Ch1I fV
_isrTim2Ch1I::
.dbline -1
pshh
.dbline 173
; }
; //isrTim2Ch1I:定时器2通道1下降沿输入捕捉中断处理程序-----------------------*
; //功 能: Bake炉电源重启按钮按下触发此中断,置标志 *
; //说 明: *
; // 修改的全局变量:CaptureTime(防"抖动") *
; // 使用的全局变量:ScdTim *
; // 修改的标志:BakeFlag *
; //-------------------------------------------------------------------------*
; #pragma interrupt_handler isrTim2Ch1I
; void isrTim2Ch1I(void)
; {
.dbline 174
; DisableMCUInterrupt(); //禁止总中断
SEI
.dbline 177
;
; //防"抖动",1秒内最多只算一次中断
; if(CaptureTime !=ScdTim) //好像有1/60的概率将正常中断防掉诶?!
lda _CaptureTime
cmp _ScdTim
beq L26
.dbline 178
; {
.dbline 179
; BakeFlag=1;
lda #1
sta _BakeFlag
.dbline 180
; }
L26:
.dbline 181
; CaptureTime=ScdTim; //更新"上次"中断时间
lda _ScdTim
sta _CaptureTime
.dbline 184
;
; //清除定时器溢出标志位
; T2SC1&=~(1<<CH0FBit);
bclr #7,0x33
.dbline 185
; EnableMCUInterrupt(); //开放总中断
CLI
.dbline -2
L25:
.dbline 0 ; func end
pulh
rti
.dbend
.dbfunc e isrDummy _isrDummy fV
_isrDummy::
.dbline -1
pshh
.dbline 192
; }
;
; /**/
; //未定义的中断处理函数,本函数不能删除
; #pragma interrupt_handler isrDummy
; void isrDummy(void)
; {
.dbline -2
L28:
.dbline 0 ; func end
pulh
rti
.dbend
.area memory(abs)
.org 0xffdc
.dbfile Vectors08.c
__vectab::
.word _isrDummy
.word _isrDummy
.word _isrDummy
.word _isrDummy
.word _isrSCIRe
.word _isrDummy
.word _isrDummy
.word _isrDummy
.word _isrDummy
.word _isrTim2Ch1I
.word _isrTim2Ch0I
.word _isrTIMER1
.word _isrDummy
.word _isrDummy
.word _isrDummy
.word _isrDummy
.word _isrDummy
.dbsym e _vectab __vectab A[34:17]pfV
.area lit
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -