/*************************************************************************************
* 项目名: KF8VXXX_KF8TSXXX_KF8FXXXX-INTX_Interrupt_TEST
* 开发环境：ChipON IDE
* 使用芯片：KF8V216 使用于KF8VXXX、KF8TS27XX、KF8FXXXX
* 作者：上海芯旺微电子有限公司
* 功能简述: 芯片外部中断的使用 包括INT0、INT1、INT2
*************************************************************************************/
#include<KF8V216.h>

//#define INT0        // 使能INT0中断
//#define INT1      // 使能INT1中断
#define INT2      // 使能INT2中断

/*********************宏定义******************************/
#define uchar unsigned char
#define uint  unsigned int
#define LED1  P1LR4                              // 对应Demo板上的D3
/*********************宏定义结束*********************** ***/

/************************
 * 函数名     ：init_fun
 * 函数功能：初始化函数
 * 入口参数：无
 * 返回          ：无
 ************************/
void Init_fun()
{
    OSCCTL = 0x60;                           //设置系统时钟为8M

	/*********端口初始化***********/
	TR0 = 0x0c;				                 //设置P03 P02(INT0) 端口只能设置为输入
	TR1 = 0x0c;				                 //P12(INT1)/P13(INT2)口为外部中断引脚，需配置为数字输入口设置P1端口为输出
	TR2 = 0x00;				                 //设置P2端口为输出

	P0 = 0x00;
	P1 = 0x00;
	P2 = 0x00;

	P0LR = 0;
	P1LR = 0;
	P2LR = 0;

	ANSEL = 0;                               //配置P12口为数字口
	ANSEH = 0;

#ifdef INT0
	INT0IF = 0;   //  清中断标志位
	INT0SE = 0;   //  0 ：下降沿             1：上升沿
	INT0IE = 1;   //  使能中断
	PUIE = 0;
#endif

#ifdef INT1
	INT1IF = 0;	  //  清中断标志位
	INT1SE = 0;   //  0 ：下降沿             1：上升沿
	INT1IE = 1;   //  使能中断
	PUIE = 1;     //  INT1 属于外部中断
#endif

#ifdef INT2
	INT2IF = 0;   //  清中断标志位
	INT2SE = 0;   //  0 ：下降沿             1：上升沿
	INT2IE = 1;   //  使能中断
	PUIE = 1;     //  INT2 属于外部中断
#endif
	PCTL = 0;     // 禁止中断优先级
	AIE = 1;      // 使能总中断
}

/************************
 * 函数名     ：Delay
 * 函数功能：短时间延时
 * 入口参数：无
 * 返回          ：无
 ************************/
void Delay()
{

	uchar i = 0,j = 0;

	for (i = 0;i < 200;i++)
		for (j = 0;j < 200;j++);
}

void main()
{
	Init_fun();

	while (1)
	{
		P1LR1 = !P1LR1;                 //  改变P11口电平
		Delay();
	}

}
//中断函数0:0X04入口地址
void int_fun0() __interrupt (0)
{
#ifdef INT0
	if (INT0IF)
	{
		INT0IF = 0;                 // 清中断标志
		LED1 = !LED1;               // 更改 D3 显示状态
	}
#endif

#ifdef INT1
	if (INT1IF)
	{
		INT1IF = 0;                 // 清中断标志
		LED1 = !LED1;               // 更改 D3 显示状态
	}
#endif

#ifdef INT2
	if (INT2IF)
	{
		INT2IF = 0;                 // 清中断标志
		LED1 = !LED1;               // 更改 D3 显示状态
	}
#endif
}

//中断函数1:0x14入口地址
void int_fun1() __interrupt (1)
{

}
