久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 凌陽16位單片機之用時基中斷定時

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

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

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

本文引用地址:http://cqxgywz.com/article/201611/318709.htm

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

P_INT_Ctr_New與P_INT_Ctrl功能相似。

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

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

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

#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;//設置n為0;為了下一次重新開始
*P_IOA_Data = g_uioutput;
g_uioutput&=0x0000;
}
*P_INT_Clear = 0x0004;//清楚中斷標志位
}
else
{
*P_INT_Clear = 0x0008;//C_IRQ5_2Hz控制的有兩個頻率如果進入的4Hz的頻率的話
}
}



評論


技術專區

關閉