📄 vectors08.lis
字号:
.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 + -