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

📄 vectors08.s

📁 项目是为日本瑞萨工作所做的BAKE炉温控系统 整个文件夹包括设计文档
💻 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 + -