共享一个新唐M051单片机的外部中断1的使用程序:
#include "SmartM_M0.h"
#define DEBUGMSG printf
/****************************************
*函数名称:KeyIntInit
*输 入:无
*输 出:无
*功 能:按键中断初始化
******************************************/
VOID KeyIntInit(VOID)
{
P3_PMD=0xFFFF; //准双向模式
P3_DOUT=0xFF; //输出高电平
P3_MFP = (P3_MFP & (~P33_EINT1_MCLK)) | EINT1; //P3.2引脚设置为外部中断
DBNCECON &= ~ICLK_ON; //禁用时钟?
DBNCECON &= DBCLK_HCLK;//防反弹计数器时钟源为 HCLK
DBNCECON |= SMP_256CK; //设置防反弹采样周期选择
P3_DBEN |= DBEN3; //使能P3.2防反弹功能
P3_IMD &= IMD3_EDG;
P3_IEN |= IF_EN3; //设置外部中断0为下降沿触发
NVIC_ISER |= EXT_INT1;
}
/****************************************
*函数名称:main
*输 入:无
*输 出:无
*功 能:函数主体
******************************************/
INT32 main(VOID)
{
PROTECT_REG //ISP下载时保护FLASH存储器
(
PWRCON |= XTL12M_EN; //默认时钟源为外部晶振
while((CLKSTATUS & XTL12M_STB) == 0); //等待12MHz时钟稳定
CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M;//设置外部晶振为系统时钟
)
UartInit(12000000,9600); //波特率设置为9600bps
KeyIntInit(); //按键中断初始化
DEBUGMSG("Init ok\r\b");
while(1);
}
/****************************************
*函数名称:__KEYISR
*输 入:无
*输 出:无
*功 能:按键中断服务函数
******************************************/
VOID EINT1_IRQHandler(VOID)
{
DEBUGMSG("Key int\r\n"); //打印按键中断信息
P3_ISRC = P3_ISRC; //写1清空
}
|