143 lines
4.7 KiB
C
143 lines
4.7 KiB
C
/*---------------------------------------------------------------------*/
|
|
/* --- STC MCU Limited ------------------------------------------------*/
|
|
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
|
|
/* --- Mobile: (86)13922805190 ----------------------------------------*/
|
|
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
|
|
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
|
|
/* --- Web: www.STCMCU.com --------------------------------------------*/
|
|
/* --- Web: www.STCMCUDATA.com ---------------------------------------*/
|
|
/* --- QQ: 800003751 -------------------------------------------------*/
|
|
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序 */
|
|
/*---------------------------------------------------------------------*/
|
|
|
|
/************* 功能说明 **************
|
|
|
|
本文件为STC8系列的外中断初始化和中断程序,用户可以在这个文件中修改自己需要的中断程序.
|
|
|
|
******************************************/
|
|
|
|
#include "Exti.h"
|
|
|
|
/************* 外部函数和变量声明 *****************/
|
|
|
|
/********************* INT0中断函数 *************************/
|
|
void Ext_INT0(void) interrupt INT0_VECTOR // 进中断时已经清除标志
|
|
{
|
|
if (kill_gpio)
|
|
{
|
|
if (KILL_time == 0)
|
|
{
|
|
power1_gpio = !power1_gpio;
|
|
power2_gpio = !power2_gpio;
|
|
power3_gpio = !power3_gpio;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
KILL_time = 50;
|
|
}
|
|
}
|
|
|
|
/********************* INT1中断函数 *************************/
|
|
void Ext_INT1(void) interrupt INT1_VECTOR // 进中断时已经清除标志
|
|
{
|
|
}
|
|
|
|
/********************* INT2中断函数 *************************/
|
|
void Ext_INT2(void) interrupt INT2_VECTOR //
|
|
{
|
|
}
|
|
|
|
/********************* INT3中断函数 *************************/
|
|
void Ext_INT3(void) interrupt INT3_VECTOR
|
|
{
|
|
}
|
|
|
|
/********************* INT4中断函数 *************************/
|
|
void Ext_INT4(void) interrupt INT4_VECTOR
|
|
{
|
|
}
|
|
|
|
//========================================================================
|
|
// 函数: u8 Ext_Inilize(u8 EXT, EXTI_InitTypeDef *INTx)
|
|
// 描述: 外部中断初始化程序.
|
|
// 参数: INTx: 结构参数,请参考Exti.h里的定义.
|
|
// 返回: 成功返回0, 空操作返回1,错误返回2.
|
|
// 版本: V1.0, 2012-10-22
|
|
//========================================================================
|
|
u8 Ext_Inilize(u8 EXT, EXTI_InitTypeDef *INTx)
|
|
{
|
|
if (EXT > EXT_INT4)
|
|
return 1; // 空操作
|
|
|
|
if (EXT == EXT_INT0) // 外中断0
|
|
{
|
|
IE0 = 0; // 外中断0标志位
|
|
if (INTx->EXTI_Interrupt == ENABLE)
|
|
EX0 = 1; // 允许中断
|
|
else
|
|
EX0 = 0; // 禁止中断
|
|
if (INTx->EXTI_Priority > Priority_3)
|
|
return 2; // 错误
|
|
INT0_Priority(INTx->EXTI_Priority); // 指定中断优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
|
|
if (INTx->EXTI_Mode == EXT_MODE_Fall)
|
|
IT0 = 1; // 下降沿中断
|
|
else
|
|
IT0 = 0; // 上升,下降沿中断
|
|
return 0; // 成功
|
|
}
|
|
|
|
if (EXT == EXT_INT1) // 外中断1
|
|
{
|
|
IE1 = 0; // 外中断1标志位
|
|
if (INTx->EXTI_Interrupt == ENABLE)
|
|
EX1 = 1; // 允许中断
|
|
else
|
|
EX1 = 0; // 禁止中断
|
|
if (INTx->EXTI_Priority > Priority_3)
|
|
return 2; // 错误
|
|
INT1_Priority(INTx->EXTI_Priority); // 指定中断优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
|
|
if (INTx->EXTI_Mode == EXT_MODE_Fall)
|
|
IT1 = 1; // 下降沿中断
|
|
else
|
|
IT1 = 0; // 上升,下降沿中断
|
|
return 0; // 成功
|
|
}
|
|
|
|
if (EXT == EXT_INT2) // 外中断2, 固定为下降沿低优先级中断
|
|
{
|
|
if (INTx->EXTI_Interrupt == ENABLE)
|
|
INT_CLKO |= (1 << 4); // 允许中断
|
|
else
|
|
INT_CLKO &= ~(1 << 4); // 禁止中断
|
|
return 0; // 成功
|
|
}
|
|
|
|
if (EXT == EXT_INT3) // 外中断3, 固定为下降沿低优先级中断
|
|
{
|
|
if (INTx->EXTI_Interrupt == ENABLE)
|
|
INT_CLKO |= (1 << 5); // 允许中断
|
|
else
|
|
INT_CLKO &= ~(1 << 5); // 禁止中断
|
|
return 0; // 成功
|
|
}
|
|
|
|
if (EXT == EXT_INT4) // 外中断4, 固定为下降沿低优先级中断
|
|
{
|
|
if (INTx->EXTI_Interrupt == ENABLE)
|
|
INT_CLKO |= (1 << 6); // 允许中断
|
|
else
|
|
INT_CLKO &= ~(1 << 6); // 禁止中断
|
|
return 0; // 成功
|
|
}
|
|
return 2; // 失败
|
|
}
|
|
void Exti_config(void)
|
|
{
|
|
EXTI_InitTypeDef Exti_InitStructure; // 结构定义
|
|
|
|
Exti_InitStructure.EXTI_Interrupt = ENABLE; // 中断使能, ENABLE或DISABLE
|
|
Exti_InitStructure.EXTI_Mode = EXT_MODE_RiseFall; // 中断模式, EXT_MODE_RiseFall,EXT_MODE_Fall
|
|
Exti_InitStructure.EXTI_Priority = Priority_0; // 指定中断优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
|
|
Ext_Inilize(EXT_INT0, &Exti_InitStructure); // 初始化
|
|
} |