新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 凌陽16位單片機之用時基中斷定時

凌陽16位單片機之用時基中斷定時

作者: 時間:2016-11-20 來源:網(wǎng)絡(luò) 收藏
P_INT_Ctrl有讀寫兩個功能,寫可以控制中斷源允許和禁止中斷,讀可以判斷產(chǎn)生中斷請求的中斷源,當(dāng)某單元中的某位為一時,說明該位代表的中斷允許開放,如果是0,就算有中斷申請,CPU也不會相應(yīng)。

當(dāng)作為讀操作的時候,P_INT_Ctrl主要作為中斷標志,因每一位均代表一個中斷,當(dāng)CPU相應(yīng)某個中斷的時候,便將該中斷標識值=置為1

本文引用地址:http://butianyuan.cn/article/201611/318709.htm

清楚標志控制單元P_INT_Clear只具有寫的功能,當(dāng)CPU響應(yīng)中斷后,會將中斷標志為1;當(dāng)進入中斷服務(wù)的時候,會將中斷標志位0,否則CPU將會總進行這個中斷;

P_INT_Ctr_New與P_INT_Ctrl功能相似。

首先在打開中斷的情況下,有多少Hz一秒鐘就進入多少次中斷,

所以要定時0.5秒鐘的話,只需要有2Hz就可以了 ,沒進入一次就是0.5秒,所以就不用在計算了,

如果要是用更高頻率的話也是可以的,比如說用16Hz的話,那就是8Hz為0.5秒,這樣就可以提前定義一個變量叫做n,這個n在中斷內(nèi),當(dāng)n==8才真正的進入相應(yīng)的中斷,

#include "SPCE061A.H"
unsigned int g_uioutput = 0x0001,n=0;
void IRQ5(void)__attribute__((ISR));


int main()
{
asm("INT OFF");
*P_IOA_Dir = 0x00ff;
*P_IOA_Attrib = 0x00ff;
*P_IOA_Data = 0x0000;
*P_INT_Ctrl = C_IRQ5_2Hz;
asm("INT IRQ");
while(1)
*P_Watchdog_Clear = 0x0001;
}

void IRQ5(void)
{
if(*P_INT_Ctrl&C_IRQ5_2Hz)
{
if(++n == 4)//兩秒的時候回正真的進入一次中斷,n就作為一個標記

n=0;//設(shè)置n為0;為了下一次重新開始
*P_IOA_Data = g_uioutput;
g_uioutput&=0x0000;
}
*P_INT_Clear = 0x0004;//清楚中斷標志位
}
else
{
*P_INT_Clear = 0x0008;//C_IRQ5_2Hz控制的有兩個頻率如果進入的4Hz的頻率的話
}
}



關(guān)鍵詞: 凌陽16位單片機中斷定

評論


技術(shù)專區(qū)

關(guān)閉