共享一個新唐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清空
}