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

📄 isr.c

📁 用凌阳单片机编写用超声波水位测量程序
💻 C
字号:
/*******************************************************************
**Description: Interrupt Service Routine For C language
*******************************************************************/

#include "hardware.h"
#include "Get_key.h"
#include "Try1.h"
#include "Init_System.h"
#include "led.h"

char g_KeyValue;
unsigned int g_KeyFlag;
unsigned int g_TimerA_Overflow_Flag = 0;

void FIQ(void) __attribute__ ((ISR));
void FIQ(void)
{
	if(*P_INT_Ctrl&C_FIQ_PWM)
	{
		*P_INT_Clear =C_FIQ_PWM;
		CLEAR_WATCHDOG;
	}
	else if(*P_INT_Ctrl&C_FIQ_TMA)
	{
		*P_INT_Clear =C_FIQ_TMA;
		CLEAR_WATCHDOG;
	}
	else if(*P_INT_Ctrl&C_FIQ_TMB)
	{
		*P_INT_Clear =C_FIQ_TMB;
		CLEAR_WATCHDOG;
	}

}

void IRQ0(void) __attribute__ ((ISR));
void IRQ0(void)
{
	if(*P_INT_Ctrl&C_IRQ0_PWM)
	{
		*P_INT_Clear =C_IRQ0_PWM;
		CLEAR_WATCHDOG;
	}

}

void IRQ1(void) __attribute__ ((ISR));
void IRQ1(void)
{
	if(*P_INT_Ctrl&C_IRQ1_TMA)
	{
		g_TimerA_Overflow_Flag += 1;
		*P_INT_Clear =C_IRQ1_TMA;
		CLEAR_WATCHDOG;
	}
}

void IRQ2(void) __attribute__ ((ISR));
void IRQ2(void)
{
	if(*P_INT_Ctrl&C_IRQ2_TMB)
	{
		*P_INT_Clear =C_IRQ2_TMB;
		CLEAR_WATCHDOG;
	}

}

void IRQ3(void) __attribute__ ((ISR));
void IRQ3(void)
{
	if(*P_INT_Ctrl&C_IRQ3_EXT2)
	{
		g_UltraSonic_Count[g_UltraSonic_Count1] = *P_TimerA_Data;
		*P_INT_Ctrl=(C_IRQ5_4Hz);
		RUN_UART_INT;
		g_UltraSonic_Count[g_UltraSonic_Count1] += g_TimerA_Overflow_Flag*65535;
		*P_TimerA_Data = 0x0000;
		g_UltraSonic_Count1 += 1;
		g_TimerA_Overflow_Flag = 0;
		*P_INT_Clear = C_IRQ3_EXT2;
		CLEAR_WATCHDOG;
	}
	else if(*P_INT_Ctrl&C_IRQ3_EXT1)
	{
		*P_INT_Clear =C_IRQ3_EXT1;
		CLEAR_WATCHDOG;
	}
	else if(*P_INT_Ctrl&C_IRQ3_KEY)
	{
		*P_INT_Clear = C_IRQ3_KEY;
		CLEAR_WATCHDOG;
	}
}

void IRQ4(void) __attribute__ ((ISR));
void IRQ4(void)
{
	if(*P_INT_Ctrl&C_IRQ4_1KHz)
	{
		*P_INT_Clear =C_IRQ4_1KHz;
		CLEAR_WATCHDOG;
	}
	else if(*P_INT_Ctrl&C_IRQ4_2KHz)
	{
		*P_INT_Clear = C_IRQ4_2KHz;
		CLEAR_WATCHDOG;
	}
	else if(*P_INT_Ctrl&C_IRQ4_4KHz)
	{
		*P_INT_Clear = C_IRQ4_4KHz;
		CLEAR_WATCHDOG;
	}
}

void IRQ5(void) __attribute__ ((ISR));
void IRQ5(void)
{
	char *P1;
	g_KeyValue = 0;
	if(*P_INT_Ctrl&C_IRQ5_2Hz)
	{
		*P_INT_Clear = C_IRQ5_2Hz;
		CLEAR_WATCHDOG;
	}
	else if(*P_INT_Ctrl&C_IRQ5_4Hz)
	{
		P1 = &g_KeyValue;
		g_KeyFlag = 0;
		g_KeyFlag = Get_Key(P1);
		Deal_Key();
		*P_INT_Clear = C_IRQ5_4Hz;
		CLEAR_WATCHDOG;
	}
}
   
void IRQ6(void) __attribute__ ((ISR));
void IRQ6(void)
{
	if(*P_INT_Ctrl&C_IRQ6_TMB1)
	{
		*P_INT_Clear = C_IRQ6_TMB1;
		CLEAR_WATCHDOG;
	}
	else if(*P_INT_Ctrl&C_IRQ6_TMB2)
	{
		*P_INT_Clear = C_IRQ6_TMB2;
		CLEAR_WATCHDOG;
	}
}

/************************************************************* 
**Function name: IRQ7()

**Input: none

**Output: none

**Description: this function works when UART receive or send a byte. But SPCE061
			  seems just have receive data interrupt servies, but no send data 
			  interrupt sevies. when a byte was read interrupt flag will automatically
			  cleared

**Return: none                                                                        
**************************************************************/

void IRQ7(void)__attribute__((ISR));
void IRQ7(void)
{
}

void BREAK(void)__attribute__((ISR));
void BREAK(void)
{
}

⌨️ 快捷键说明

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