使用AVR的外部中斷INT1檢測PD3Key,如果有按鍵按下,則喚醒休眠的MCU,并使它的PB口的LED做加1指示。
#include
#include"D:ICC_HCmmICC.H"
#defineDISP_DDRDDRB
#defineDISP_PORTPORTB
#defineIN_PD3cbi(DDRD,3)//PD3
#defineSET_PD3sbi(PORTD,3)
#defineGET_PD3gbi(PIND,3)
/*--------------------------------------------------------------------
程序名稱:外部中斷服務程序
程序功能:
注意事項:
提示說明:
輸入:
返回:
--------------------------------------------------------------------*/
#pragmainterrupt_handlerint1_isr:3
voidint1_isr(void)
{
GICR&=0b01111111;//dISAbleint1interrupt
DISP_PORT++;//顯示口指示加1,指示被按次數(shù)
delay50ms(4);
GICR|=0b10000000;//enableint1interrupt
}
/*--------------------------------------------------------------------
程序名稱:外部中斷初始化程序
程序功能:
注意事項:
提示說明:
輸入:
返回:
--------------------------------------------------------------------*/
voidint1_init()
{
IN_PD3;//setPD3/INT1asinput
SET_PD3;//setPD3/INT1asoutput,highlevel,avoidtriggering
MCUCR|=0b11110011;//setPD3/INT1aslowlevelactive
GICR|=0b10000000;//enableglobalinterrupt
SEI();//enableexternalinterrupt
}
/*--------------------------------------------------------------------
程序名稱:
程序功能:
注意事項:
提示說明:
輸入:
返回:
--------------------------------------------------------------------*/
voidmain(void)
{
DISP_DDR=0xFF;
DISP_PORT=0x00;
int1_init();
asm("sleep");//setmcuassleepmodle
while(1);
}