vectors08.s
来自「为日本瑞萨苏州分公司做的一个温控系统」· S 代码 · 共 548 行
S
548 行
.module Vectors08.c
.area text
.dbfile Vectors08.c
.dbfunc e isrSCIRe _isrSCIRe fV
; Tmax -> 2,X
; Tmin -> 3,X
; data -> 4,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 #-8
tsx
.dbline 41
; //-------------------------------------------------------------------------*
; //文件名:vectors08.c *
; //功 能:用于定义中断矢量表 *
; //-------------------------------------------------------------------------*
; //头文件
; #include "GP32C.H" //包含头文件
; #include "Type.h" //类型别名定义
; #include "EnDisInt.h" //开放或禁止MCU各模块中断头文件
; #include "LCD.h" //包含LCD驱动头文件
; #include "Show.h" //包含LCD显示头文件
; #include "H08SCI.h" //包含SCI发送接收头文件
; #include "Flash.h"
;
; //定时器相应寄存器定义
; #define TOFBit 7 //定时器溢出标志位
;
; //全局变量声明
; extern INT8U LcdShowBuff[64]; //外部定义64个字节的LCD显示缓冲区
; extern INT16U ADValue[11]; //11路A/D采集数据
; extern INT16U Temper; //设定温度
; extern INT16U CurtTmp; //当前温度
; extern INT16U CurtTime; //当前时间
; extern INT16U Time; //定时时间
; extern INT8U ScdTim; //中断秒数
; extern INT16U MntTim; //中断分数
; extern const INT16U BigNumCode[10][32];
; extern const INT8U Tmin;
; extern const INT8U Tmax;
; extern const INT16U TADmin;
; extern const INT16U TADmax;
; extern const INT8U MCUno;
; extern INT8U FlashFlag;
; extern unsigned char N,FlashData[8];
; extern INT16U ADCurtTmp;
;
;
; //内部函数
; //串行接收中断处理函数
; #pragma interrupt_handler isrSCIRe
; void isrSCIRe(void)
; {
.dbline 45
; INT8U data[4];
; INT8U Tmin,Tmax;
;
; DisableMCUInterrupt();
SEI
.dbline 46
; SCIReN(1,data);
aix #4
pshx
pshh
lda #1
psha
jsr _SCIReN
ais #3
tsx
.dbline 47
; if(data[0]==MCUno) //1#
lda 4,X
cmp _MCUno
beq X4
jmp L2
X4:
.dbline 48
; {
.dbline 49
; SCIReN(3,data);
aix #4
pshx
pshh
lda #3
psha
jsr _SCIReN
ais #3
tsx
.dbline 50
; switch(data[0])
clr ,X
lda 4,X
sta 1,X
lda ,X
bne X0
lda 1,X
cmp #77
bne X5
jmp L16
X5:
X0:
lda 1,X
sta *__r1
lda ,X
sta *__r0
ldhx *__r0
cphx #77
tsx
bge X6
jmp L4
X6:
L24:
lda ,X
bne X1
lda 1,X
cmp #82
beq L7
X1:
lda ,X
bne X2
lda 1,X
cmp #84
beq L8
X2:
jmp L4
X3:
.dbline 51
; {
L7:
.dbline 53
; case 'R': //读数据
; SCISend1(CurtTmp>>8);
lda *_CurtTmp
psha
jsr _SCISend1
ais #1
.dbline 54
; SCISend1(CurtTmp);
lda *_CurtTmp+1
psha
jsr _SCISend1
ais #1
.dbline 55
; SCISend1(Temper>>8);
lda *_Temper
psha
jsr _SCISend1
ais #1
.dbline 56
; SCISend1(Temper);
lda *_Temper+1
psha
jsr _SCISend1
ais #1
.dbline 57
; SCISend1(CurtTime>>8);
lda *_CurtTime
psha
jsr _SCISend1
ais #1
.dbline 58
; SCISend1((INT8U)CurtTime);
lda *_CurtTime+1
psha
jsr _SCISend1
ais #1
.dbline 59
; SCISend1(Time>>8);
lda *_Time
psha
jsr _SCISend1
ais #1
.dbline 60
; SCISend1(Time);
lda *_Time+1
psha
jsr _SCISend1
ais #1
tsx
.dbline 61
; break;
bra L5
L8:
.dbline 64
; case 'T': //校准当前温度值
;
; FlashData[0]=Tmin;
lda 3,X
sta *_FlashData
.dbline 65
; FlashData[1]=data[2];
lda 6,X
sta *_FlashData+1
.dbline 66
; FlashData[2]=TADmin>>8;
lda _TADmin
sta *_FlashData+2
.dbline 67
; FlashData[3]=TADmin;
lda _TADmin+1
sta *_FlashData+3
.dbline 68
; FlashData[4]=ADCurtTmp>>8;
lda *_ADCurtTmp
sta *_FlashData+4
.dbline 69
; FlashData[5]=ADCurtTmp;
lda *_ADCurtTmp+1
sta *_FlashData+5
.dbline 70
; FlashData[6]=MCUno;
lda _MCUno
sta *_FlashData+6
.dbline 71
; N=7;
lda #7
sta *_N
.dbline 72
; FlashFlag=1;
lda #1
sta *_FlashFlag
.dbline 73
; break;
bra L5
L16:
.dbline 75
; case 'M': //更改MCU号
; FlashData[0]=Tmin;
lda 3,X
sta *_FlashData
.dbline 76
; FlashData[1]=Tmax;
lda 2,X
sta *_FlashData+1
.dbline 77
; FlashData[2]=TADmin>>8;
lda _TADmin
sta *_FlashData+2
.dbline 78
; FlashData[3]=TADmin;
lda _TADmin+1
sta *_FlashData+3
.dbline 79
; FlashData[4]=TADmax>>8;
lda _TADmax
sta *_FlashData+4
.dbline 80
; FlashData[5]=TADmax;
lda _TADmax+1
sta *_FlashData+5
.dbline 81
; FlashData[6]=data[2];
lda 6,X
sta *_FlashData+6
.dbline 82
; N=7;
lda #7
sta *_N
.dbline 83
; FlashFlag=1;
lda #1
sta *_FlashFlag
.dbline 84
; break;
L4:
L5:
.dbline 86
; }
; }
L2:
.dbline 95
; /*/////////////////////////////
; else if(data[0]==0xAA)
; {
; SCIReN(1,data);
; SCISend1(data[0]);
; SCISend1(0xFF);
; }
; /////////////////////////////////////*/
; EnableMCUInterrupt();
CLI
.dbline -2
L1:
ais #8
.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 Tmax 2 c
.dbsym l Tmin 3 c
.dbsym l data 4 A[4:4]c
.dbend
.dbfunc e isrTIMER1 _isrTIMER1 fV
_isrTIMER1::
.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
.dbline 102
; }
;
;
; //定时器1溢出中断处理函数
; #pragma interrupt_handler isrTIMER1
; void isrTIMER1(void)
; {
.dbline 103
; DisableMCUInterrupt(); //禁止总中断
SEI
.dbline 105
; //1 计时加热时间
; if(ScdTim<60)
lda *_ScdTim
cmp #60
bhs L26
.dbline 106
; ScdTim++; //秒计数
inc *_ScdTim
bra L27
L26:
.dbline 108
; else
; {
.dbline 109
; MntTim++; //分计数
lda *_MntTim+1
add #1
sta *_MntTim+1
lda *_MntTim
adc #0
sta *_MntTim
.dbline 110
; ScdTim=0;
clr *_ScdTim
.dbline 111
; }
L27:
.dbline 115
;
; //2 LCD显示每1s刷新一次
; //将需要显示的各数据转换成LCD可显示的格式,并放入LcdShowBuff中
; InBuff(CurtTmp,Temper,CurtTime,Time,LcdShowBuff);
ldhx #_LcdShowBuff
pshx
pshh
ldhx *_Time
pshx
pshh
ldhx *_CurtTime
pshx
pshh
ldhx *_Temper
pshx
pshh
ldhx *_CurtTmp
pshx
pshh
jsr _InBuff
ais #10
.dbline 117
; //显示LcdShowBuff中的数据
; LcdShCh(LcdShowBuff);
ldhx #_LcdShowBuff
pshx
pshh
jsr _LcdShCh
ais #2
.dbline 119
; //在Lcd上显示自定义32*16点阵的字符
; LcdShBigNum(0,0,(INT16U *)BigNumCode,CurtTmp);
ldhx *_CurtTmp
pshx
pshh
lda #<_BigNumCode
psha
lda #>_BigNumCode
psha
clra
psha
psha
jsr _LcdShBigNum
ais #6
tsx
.dbline 122
;
; //3 清除定时器溢出标志位
; T1SC&=~(1<<TOFBit);
bclr #7,0x20
.dbline 123
; EnableMCUInterrupt(); //开放总中断
CLI
.dbline -2
L25:
.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
.dbend
.dbfunc e isrDummy _isrDummy fV
_isrDummy::
.dbline -1
pshh
.dbline 129
; }
;
; //未定义的中断处理函数,本函数不能删除
; #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 _isrDummy
.word _isrDummy
.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 + =
减小字号Ctrl + -
显示快捷键?