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

📄 vectors08.lis

📁 项目是为日本瑞萨工作所做的BAKE炉温控系统 整个文件夹包括设计文档
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module Vectors08.c
                        .area text
 0000                   .dbfile Vectors08.c
 0000                   .dbfunc e isrSCIRe _isrSCIRe fV
 0000           ;            tmp -> 2,X
 0000           ;              i -> 14,X
 0000           ;           data -> 15,X
 0000           _isrSCIRe::
 0000                   .dbline -1
 0000 8B                pshh
 0001 B600              lda *__r0
 0003 87                psha
 0004 B600              lda *__r1
 0006 87                psha
 0007 B600              lda *__r2
 0009 87                psha
 000A B600              lda *__r3
 000C 87                psha
 000D B600              lda *__r4
 000F 87                psha
 0010 B600              lda *__r5
 0012 87                psha
 0013 B600              lda *__r6
 0015 87                psha
 0016 B600              lda *__r7
 0018 87                psha
 0019 B600              lda *__r8
 001B 87                psha
 001C B600              lda *__r9
 001E 87                psha
 001F B600              lda *__r10
 0021 87                psha
 0022 B600              lda *__r11
 0024 87                psha
 0025 B600              lda *__rhi
 0027 87                psha
 0028 B600              lda *__rlo
 002A 87                psha
 002B A7ED              ais #-19
 002D 95                tsx
 002E                   .dbline 54
 002E           ; //-------------------------------------------------------------------------*
 002E           ; //文件名:vectors08.c                                                       *
 002E           ; //功  能:用于定义中断矢量表                                                *
 002E           ; //-------------------------------------------------------------------------*
 002E           ; //头文件
 002E           ; #include "GP32C.H"          //包含头文件
 002E           ; #include "Type.h"           //类型别名定义
 002E           ; #include "EnDisInt.h"       //开放或禁止MCU各模块中断头文件
 002E           ; #include "LCD.h"            //包含LCD驱动头文件
 002E           ; #include "Show.h"           //包含LCD显示头文件
 002E           ; #include "SCI.h"         //包含SCI发送接收头文件
 002E           ; #include "Flash.h"          //擦写Flash函数声明
 002E           ; //定时器相应寄存器定义  
 002E           ; #define TOFBit     7        //定时器溢出标志位
 002E           ; #define CH0FBit    7        //定时器通道标志位
 002E           ; 
 002E           ; //全局变量声明
 002E           ; extern INT16U ADValue[11];      //11路A/D采集数据
 002E           ; 
 002E           ; extern INT8U LcdShowBuff[64];  //外部定义64个字节的LCD显示缓冲区
 002E           ; extern INT16U Temper;          //设定温度
 002E           ; extern INT16U CurtTmp;         //当前温度
 002E           ; extern INT16U CurtTime;        //当前时间
 002E           ; extern INT16U Time;            //定时时间
 002E           ; extern INT8U ScdTim;           //中断秒数
 002E           ; extern INT16U MntTim;          //中断分数
 002E           ; extern const INT16U BigNumCode[10][32];  //32*16点阵数字编码首地址
 002E           ; extern const INT8U  MCUno;     //MCU号
 002E           ; extern INT8U SendFlag;         //是否需要向PC发送参数的标志
 002E           ; extern INT8U FlashFlag1;       //因为校准值要写Flash的标志
 002E           ; extern INT8U FlashFlag2;       //因为改MCU号要写Flash的标志
 002E           ; extern INT16U TmaxAdjust;      //PC发来的当前温度校准值
 002E           ; extern INT8U NewMCUno;         //PC发来的新MCU号
 002E           ; extern INT8U CaptureTime;      //捕捉中断用来记上次中断发生时间防"抖动"
 002E           ; extern INT8U BakeFlag;         //Bake炉电源重启按钮是否按下的标志
 002E           ; extern INT8U ResetFlag;        //复位按钮是否按下的标志
 002E           ; 
 002E           ; extern INT8U  N;     //写入数据的个数
 002E           ; extern INT8U  FlashData[111]; //写入的数据
 002E           ; 
 002E           ; 
 002E           ; //=======================中断处理函数函数===================================
 002E           ; 
 002E           ; //isrSCIRe:串行接收中断处理函数--------------------------------------------*
 002E           ; //功  能:接收PC发来的数据,根据帧中不同的命令置相应标志                    *
 002E           ; //       命令要求的具体操作在主循环中进行,中断处理函数应尽量简单          *
 002E           ; //帧格式: 1字节MCU号+1字节命令+2字节数据(若只有1字节数据,"后对齐")        *
 002E           ; //说  明:                                                                  *
 002E           ; //       修改的全局变量:TmaxAdjust、NewMCUno                               *
 002E           ; //       修改的标志:SendFlag、FlashFlag1、FlashFlag2                       *
 002E           ; //-------------------------------------------------------------------------*
 002E           ; #pragma interrupt_handler isrSCIRe
 002E           ; void isrSCIRe(void)
 002E           ; {
 002E                   .dbline 58
 002E           ;    INT8U data[4],i;
 002E           ;    INT8U tmp[12];
 002E           ;    
 002E           ;    DisableMCUInterrupt();  //禁止总中断
 002E 9B                SEI
 002F                   .dbline 61
 002F           ;    
 002F           ;    //接收4字节数据,根据帧头的MCU号判断是否作进一步处理
 002F           ;    SCIReN(1,data); 
 002F AF0F              aix #15
 0031 89                pshx
 0032 8B                pshh
 0033 A601              lda #1
 0035 87                psha
 0036 CD0000            jsr _SCIReN
 0039 A703              ais #3
 003B 95                tsx
 003C                   .dbline 62
 003C           ;    if(data[0]==MCUno)
 003C E60F              lda 15,X
 003E C10000            cmp _MCUno
 0041 2703              beq X4
 0043 CC00C3            jmp L2
 0046           X4:
 0046                   .dbline 63
 0046           ;    {
 0046                   .dbline 64
 0046           ;       SCIReN(4,data);
 0046 AF0F              aix #15
 0048 89                pshx
 0049 8B                pshh
 004A A604              lda #4
 004C 87                psha
 004D CD0000            jsr _SCIReN
 0050 A703              ais #3
 0052 95                tsx
 0053                   .dbline 65
 0053           ;       if(data[3]=='E')  //帧头:MCU号;帧尾:'E'
 0053 E612              lda 18,X
 0055 A145              cmp #69
 0057 2703              beq X5
 0059 CC00E9            jmp L3
 005C           X5:
 005C                   .dbline 66
 005C           ;         switch(data[0])
 005C 7F                clr ,X
 005D E60F              lda 15,X
 005F E701              sta 1,X
 0061 F6                lda ,X
 0062 2606              bne X0
 0064 E601              lda 1,X
 0066 A14D              cmp #77
 0068 2744              beq L14
 006A           X0:
 006A E601              lda 1,X
 006C B700              sta *__r1
 006E F6                lda ,X
 006F B700              sta *__r0
 0071 5500              ldhx *__r0
 0073 65004D            cphx #77
 0076 95                tsx
 0077 9170              blt L3
 0079           L16:
 0079 F6                lda ,X
 007A 2606              bne X1
 007C E601              lda 1,X
 007E A152              cmp #82
 0080 270B              beq L10
 0082           X1:
 0082 F6                lda ,X
 0083 2606              bne X2
 0085 E601              lda 1,X
 0087 A154              cmp #84
 0089 2709              beq L11
 008B           X2:
 008B 205C              bra L3
 008D           X3:
 008D                   .dbline 67
 008D           ;         {
 008D           L10:
 008D                   .dbline 69
 008D           ;           case 'R'://读数据命令
 008D           ;                  SendFlag=1; 
 008D A601              lda #1
 008F C70000            sta _SendFlag
 0092                   .dbline 70
 0092           ;                  break;
 0092 2055              bra L3
 0094           L11:
 0094                   .dbline 73
 0094           ;                  
 0094           ;           case 'T'://校准当前温度值命令
 0094           ;                  SCISend1(0x56);    //反馈给PC表示接收成功
 0094 A656              lda #86
 0096 87                psha
 0097 CD0000            jsr _SCISend1
 009A A701              ais #1
 009C 95                tsx
 009D                   .dbline 74
 009D           ;                  TmaxAdjust=data[1]*256 +data[2];   //当前温度的校准值
 009D E610              lda 16,X
 009F C70000            sta _TmaxAdjust
 00A2 E611              lda 17,X
 00A4 C70001            sta _TmaxAdjust+1
 00A7                   .dbline 75
 00A7           ;                  FlashFlag1=1;
 00A7 A601              lda #1
 00A9 C70000            sta _FlashFlag1
 00AC                   .dbline 76
 00AC           ;                  break;
 00AC 203B              bra L3
 00AE           L14:
 00AE                   .dbline 79
 00AE           ;                  
 00AE           ;           case 'M'://更改MCU号命令
 00AE           ;                  SCISend1(0x56);    //反馈给PC表示接收成功
 00AE A656              lda #86
 00B0 87                psha
 00B1 CD0000            jsr _SCISend1
 00B4 A701              ais #1
 00B6 95                tsx
 00B7                   .dbline 80
 00B7           ;                  NewMCUno=data[2];  //新的MCU号
 00B7 E611              lda 17,X
 00B9 C70000            sta _NewMCUno
 00BC                   .dbline 81
 00BC           ;                  FlashFlag2=1;
 00BC A601              lda #1
 00BE C70000            sta _FlashFlag2
 00C1                   .dbline 82
 00C1           ;                  break;
 00C1                   .dbline 84
 00C1           ;        }//switch
 00C1           ;    }
 00C1 2026              bra L3
 00C3           L2:
 00C3                   .dbline 85
 00C3           ;    else if(data[0]==MCUno+10) 
 00C3 C60000            lda _MCUno
 00C6 AB0A              add #10
 00C8 B700              sta *__r0
 00CA E60F              lda 15,X
 00CC B100              cmp *__r0
 00CE 2619              bne L17
 00D0                   .dbline 86
 00D0           ;    {
 00D0                   .dbline 87
 00D0           ;        SCIReN(111,FlashData);
 00D0 A600              lda #<_FlashData
 00D2 87                psha
 00D3 A600              lda #>_FlashData
 00D5 87                psha
 00D6 A66F              lda #111
 00D8 87                psha
 00D9 CD0000            jsr _SCIReN
 00DC A703              ais #3
 00DE 95                tsx
 00DF                   .dbline 88
 00DF           ;        N=110;
 00DF A66E              lda #110
 00E1 C70000            sta _N
 00E4                   .dbline 104
 00E4           ; /*       SCISendN(110,FlashData);
 00E4           ;        
 00E4           ;         EraseFlash(0x8080); //擦除0x8000为始址的一个页
 00E4           ;         WriteFlash(0x8080); //将FlashData[8]数组的8个数据写入0x8000为始址的一个页
 00E4           ;         
 00E4           ; 
 00E4           ; for(i=0;i<11;i++) 
 00E4           ;    FlashData[i]=i;      
 00E4           ; N=11;
 00E4           ;     FLBPR=0b11111111;     //不保护FLASH区域
 00E4           ;         EraseFlash(0x8080); //擦除0x8000为始址的一个页
 00E4           ;     FLBPR=0b11111111;   //不保护FLASH区域
 00E4           ;         WriteFlash(0x8080); //将FlashData[8]数组的8个数据写入0x8000为始址的一个页

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -