共享一個(gè)新唐M051單片機(jī)的外部中斷1的使用程序:
#include "SmartM_M0.h"
#define DEBUGMSG printf
/****************************************
*函數(shù)名稱:KeyIntInit
*輸 入:無
*輸 出:無
*功 能:按鍵中斷初始化
******************************************/
VOID KeyIntInit(VOID)
{
P3_PMD=0xFFFF; //準(zhǔn)雙向模式
P3_DOUT=0xFF; //輸出高電平
P3_MFP = (P3_MFP & (~P33_EINT1_MCLK)) | EINT1; //P3.2引腳設(shè)置為外部中斷
DBNCECON &= ~ICLK_ON; //禁用時(shí)鐘?
DBNCECON &= DBCLK_HCLK;//防反彈計(jì)數(shù)器時(shí)鐘源為 HCLK
DBNCECON |= SMP_256CK; //設(shè)置防反彈采樣周期選擇
P3_DBEN |= DBEN3; //使能P3.2防反彈功能
P3_IMD &= IMD3_EDG;
P3_IEN |= IF_EN3; //設(shè)置外部中斷0為下降沿觸發(fā)
NVIC_ISER |= EXT_INT1;
}
/****************************************
*函數(shù)名稱:main
*輸 入:無
*輸 出:無
*功 能:函數(shù)主體
******************************************/
INT32 main(VOID)
{
PROTECT_REG //ISP下載時(shí)保護(hù)FLASH存儲(chǔ)器
(
PWRCON |= XTL12M_EN; //默認(rèn)時(shí)鐘源為外部晶振
while((CLKSTATUS & XTL12M_STB) == 0); //等待12MHz時(shí)鐘穩(wěn)定
CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M;//設(shè)置外部晶振為系統(tǒng)時(shí)鐘
)
UartInit(12000000,9600); //波特率設(shè)置為9600bps
KeyIntInit(); //按鍵中斷初始化
DEBUGMSG("Init ok\r\b");
while(1);
}
/****************************************
*函數(shù)名稱:__KEYISR
*輸 入:無
*輸 出:無
*功 能:按鍵中斷服務(wù)函數(shù)
******************************************/
VOID EINT1_IRQHandler(VOID)
{
DEBUGMSG("Key int\r\n"); //打印按鍵中斷信息
P3_ISRC = P3_ISRC; //寫1清空
}