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 + -
显示快捷键?