?? vectors08.c
字號:
//-------------------------------------------------------------------------*
//文件名: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)
{
INT8U data[4];
INT8U Tmin,Tmax;
DisableMCUInterrupt();
SCIReN(1,data);
if(data[0]==MCUno) //1#
{
SCIReN(3,data);
switch(data[0])
{
case 'R': //讀數據
SCISend1(CurtTmp>>8);
SCISend1(CurtTmp);
SCISend1(Temper>>8);
SCISend1(Temper);
SCISend1(CurtTime>>8);
SCISend1((INT8U)CurtTime);
SCISend1(Time>>8);
SCISend1(Time);
break;
case 'T': //校準當前溫度值
FlashData[0]=Tmin;
FlashData[1]=data[2];
FlashData[2]=TADmin>>8;
FlashData[3]=TADmin;
FlashData[4]=ADCurtTmp>>8;
FlashData[5]=ADCurtTmp;
FlashData[6]=MCUno;
N=7;
FlashFlag=1;
break;
case 'M': //更改MCU號
FlashData[0]=Tmin;
FlashData[1]=Tmax;
FlashData[2]=TADmin>>8;
FlashData[3]=TADmin;
FlashData[4]=TADmax>>8;
FlashData[5]=TADmax;
FlashData[6]=data[2];
N=7;
FlashFlag=1;
break;
}
}
/*/////////////////////////////
else if(data[0]==0xAA)
{
SCIReN(1,data);
SCISend1(data[0]);
SCISend1(0xFF);
}
/////////////////////////////////////*/
EnableMCUInterrupt();
}
//定時器1溢出中斷處理函數
#pragma interrupt_handler isrTIMER1
void isrTIMER1(void)
{
DisableMCUInterrupt(); //禁止總中斷
//1 計時加熱時間
if(ScdTim<60)
ScdTim++; //秒計數
else
{
MntTim++; //分計數
ScdTim=0;
}
//2 LCD顯示每1s刷新一次
//將需要顯示的各數據轉換成LCD可顯示的格式,并放入LcdShowBuff中
InBuff(CurtTmp,Temper,CurtTime,Time,LcdShowBuff);
//顯示LcdShowBuff中的數據
LcdShCh(LcdShowBuff);
//在Lcd上顯示自定義32*16點陣的字符
LcdShBigNum(0,0,(INT16U *)BigNumCode,CurtTmp);
//3 清除定時器溢出標志位
T1SC&=~(1<<TOFBit);
EnableMCUInterrupt(); //開放總中斷
}
//未定義的中斷處理函數,本函數不能刪除
#pragma interrupt_handler isrDummy
void isrDummy(void)
{
}
//中斷矢量表,需定義中斷函數,可修改下表中的相應項目
//(interrupt service routine,isr 中斷處理程序)
#pragma abs_address:0xffdc //中斷向量表起始地址
void (* const _vectab[])(void) = {
isrDummy, //時基中斷
isrDummy, //AD轉換中斷
isrDummy, //鍵盤中斷
isrDummy, //SCI TC/TE
isrSCIRe, //SCI RF/IDLE
isrDummy, //SCI PE/FE/NF/OR
isrDummy, //SPI TE
isrDummy, //SPI MOD/OVR/RF
isrDummy, //TIM2溢出中斷
isrDummy, //TIM2通道1
isrDummy, //TIM2通道0
isrTIMER1, //TIM1溢出中斷
isrDummy, //TIM1通道1
isrDummy, //TIM1通道0
isrDummy, //CGM
isrDummy, //IRQ
isrDummy //SWI
//RESET也是中斷,定義在 crt08.o中
};
#pragma end_abs_address
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -