AVR單片機中斷
系統在正常運行主程序時(shí),如果突然有一個(gè)重要的任務(wù)要馬上處理,那么系統就要保存現在的工作,然后再去處理這個(gè)任務(wù),執行這個(gè)重要任務(wù)完畢以后再返回原來(lái)的主程序繼續運行,這就是中斷。
主程序一旦進(jìn)入中斷服務(wù)程序,那么AVR芯片將自動(dòng)的關(guān)閉全局中斷,在這個(gè)期間不再執行其它的中斷請求,直到中斷程序結束以后芯片才自動(dòng)的重新開(kāi)放全局中斷。(注意,在這個(gè)期間某些中斷請求可能會(huì )被丟棄,某些請求會(huì )留下中斷請求標致,一旦當前的中斷執行完畢,這個(gè)有中斷標致的請求就有可能馬上得到響應,如INT0的下降沿觸發(fā)就會(huì )留下中斷請求標致,而低電平觸發(fā)就不會(huì )流下中斷請求標致)。如果你想在執行中斷服務(wù)程序時(shí)響應另外一個(gè)更重要的中斷,那么就要在中斷服務(wù)程序中加入一條打開(kāi)全局中斷的語(yǔ)句。
使用ICC快速建立中斷服務(wù)程序 程序文件
使用ICCAVR Application Builder進(jìn)行如下圖所示的設置。 可以設置是否使用中斷,上升延,下降延,低電平,任意的邏輯電平變化。
將生成的程序進(jìn)行修改,DDRA = 0x01;PORTD = 0x0C; ,添加MAIN函數,如下
//ICC-AVR application builder : 2006-12-8 17:04:44
// Target : M16
// Crystal: 7.3728Mhz
#include
#include
unsigned int i=0;
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x01;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00; //m103 output only
DDRC = 0x00;
PORTD = 0x0C; //使INT0,INT1對應口上拉電阻有效
DDRD = 0x00; //必須設置INT0,INT1對應口為輸入
}
評論