?? interrupt.c
字號:
#define __INTERRUPT_H__
#include "Config.h"
/********************************************************************************************************
**函數名稱:INTInit
**函數功能:中斷初始化:初始化外部中斷0,Timer2溢出中斷
**輸 入:無
**輸 出:無
********************************************************************************************************/
void INTInit(void)
{
//-----------------------------------------
//使用下降沿中斷:翻轉位和感應位分別為0:1
//-----------------------------------------
IPININV1 &= ~BIT0; //翻轉位為0
IPINSENS1 |= BIT0; //感應位為1
//-----------------------------------------
//執行返回指令時自動清標志
//-----------------------------------------
INTSRC1 |= BIT0; //使用管腳中斷
INTEN1 |= BIT0; //使能外部中斷0(INT0)
//-----------------------------------------
//Timer2定時中斷
//-----------------------------------------
INTEN2 |= BIT0; //使能Timer2中斷
INTSRC2 &= ~BIT0; //選擇Timer2為中斷源
GENINTEN |= (BIT1 | BIT0); //全局使能
}
//****************************************************************************************************
//外部中斷0,由按鍵產生
//****************************************************************************************************
void INT0ISR(void) interrupt 0
{
UART0_Printf("\n Key:INT0_GEN was pressed \n");
}
//****************************************************************************************************
//SPI發送空
//****************************************************************************************************
void SPITxEmpISR(void) interrupt 1
{
}
//****************************************************************************************************
//SPI接收有效/溢出
//****************************************************************************************************
void SPIRXAVOVISR(void) interrupt 2
{
}
//****************************************************************************************************
//定時器0中斷
//****************************************************************************************************
void Timer0ISR(void) interrupt 3
{
}
//****************************************************************************************************
//按鍵監視中斷0,由按鍵產生
//****************************************************************************************************
/*
void PORTCHG0ISR(void) interrupt 4
{
PORTCHG &= ~BIT3; //清除標志位
}
*/
//****************************************************************************************************
//UART0中斷
//****************************************************************************************************
void UART0ISR(void) interrupt 5
{
}
//****************************************************************************************************
//UART1中斷
//****************************************************************************************************
void UART1ISR(void) interrupt 6
{
}
//****************************************************************************************************
//Timer1中斷
//****************************************************************************************************
void Timer1ISR(void) interrupt 7
{
}
//****************************************************************************************************
//Timer2中斷
//****************************************************************************************************
//uchar LEDFlashType; //紀錄LED當前閃爍方式的全局變量
uchar LEDSub; //當前閃爍方式下,正在輸出的位
uchar LEDINTCnt;
uchar Key;
uchar LEDBuf[4][4] = {{~BIT7,~BIT6,~BIT5,~BIT4}, //閃亮方式1
{~BIT4,~BIT5,~BIT6,~BIT7}, //閃亮方式2
{~(BIT7 | BIT6),~(BIT5 | BIT4),~(BIT7 | BIT6),~(BIT5 | BIT4)}, //閃亮方式3
{~(BIT7 | BIT5),~(BIT6 | BIT4),~(BIT7 | BIT5),~(BIT6 | BIT4)}, //閃亮方式4
}; //每個循環LED的亮滅狀態
void Timer2ISR(void) interrupt 8
{
T2CON &= ~BIT7; //清除溢出標志
TH2 = 0x3C;
TL2 = 0xB0; //重裝
//---------------------------------------------------------------------------
//控制LED的閃爍
//---------------------------------------------------------------------------
if(LEDINTCnt ++ >= 10) //0.5秒左右閃一次
{
LEDINTCnt = 0; //計數器清零
P6 &= 0x0F; //屏蔽無關位
P6 |= LEDBuf[LEDFlashType][LEDSub]; //設置LED的亮滅狀態
if(++ LEDSub >= 4)
{
LEDSub = 0; //閃爍狀態循環一次,注意LEDSta為由按鍵改變的變量
}
UART1_Printf("\n This is UART1! \n");
}
//---------------------------------------------------------------------------
//控制按鍵的讀取,讀鍵的頻率要高于LED轉換的頻率
//關于按鍵的使用 還可以用中斷,不過要保證檢測按鍵時不能變化LED的端口
//---------------------------------------------------------------------------
Key = KeyRead(); //讀取健值
if(Key != 0)
{
FlashSet(Key); //根據鍵值改變LED閃爍方式
UART0_Printf("\n Key%c is Pressed!\n",Key);
}
}
//****************************************************************************************************
//I2C中斷
//****************************************************************************************************
void I2CISR(void) interrupt 9
{
}
//****************************************************************************************************
//UART沖突中斷
//****************************************************************************************************
void UARTCollisionISR(void) interrupt 10
{
}
//****************************************************************************************************
//PWM中斷
//****************************************************************************************************
void PWMISR(void) interrupt 11
{
}
//****************************************************************************************************
//PWM3:0Timer
//****************************************************************************************************
void PWM30ISR(void) interrupt 12
{
}
//****************************************************************************************************
//PWM3:0Timer
//****************************************************************************************************
void PWM74ISR(void) interrupt 13
{
}
//****************************************************************************************************
//WDT/ARTITH
//****************************************************************************************************
void WDTARIISR(void) interrupt 14
{
}
//****************************************************************************************************
//按鍵監視中斷1,由按鍵產生,但是端口由于與LED混用,現在已經不能用了
//****************************************************************************************************
/*
void PORTCHG1ISR(void) interrupt 15
{
SwitchDelay(1);
PORTCHG &= ~BIT7; //清除標志位
UART0_Printf("\n Key Pressed \n");
}
*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -