昨天寫的比較匆忙,出現(xiàn)了一些錯誤,感謝幾位朋友的指正。這其中也有我了解不夠透徹的地方,幸好及時暴露了自己的盲點,不然還會繼續(xù)犯錯。 好了,繼續(xù)今天的內(nèi)容。 這次說定時與中斷,有人說,掌握了定時與中斷,就掌握了一個單片機80%的功能;也有人說,中斷是一個單片機的靈魂。這兩句話無一不在強調(diào)中斷的重要性,就讓我們認識一下,中斷到底是什么。 根據(jù)百度百科的定義:指當(dāng)出現(xiàn)需要時,CPU暫時停止當(dāng)前程序的執(zhí)行轉(zhuǎn)而執(zhí)行處理新情況的程序和執(zhí)行過程。即在程序運行過程中,系統(tǒng)出現(xiàn)了一個必須由CPU立即處理的情況,此時,CPU暫時中止程序的執(zhí)行轉(zhuǎn)而處理這個新的情況的過程就叫做中斷。 舉個例子,我正在吃飯呢,忽然老婆大人發(fā)話了,說在網(wǎng)上看上一個包,挺好的,讓我?guī)椭犊睿谑俏彝O鲁燥堈f好,去幫著付款,付完款,繼續(xù)吃飯。 這個過程中,我是CPU;吃飯是主程序;老婆大人說話,觸發(fā)了中斷;我說好,安慰了老婆的情緒同時清零了中斷標(biāo)志;去付款,處理了中斷子程序;付完款繼續(xù)吃飯,回到了主程序。 STC89C52RC單片機中的中斷分為三種:外部中斷,一般是IO口的高低電平觸發(fā);定時/計數(shù)器溢出中斷,一般是內(nèi)部定時/計數(shù)器溢出中斷;UART口中斷,收發(fā)數(shù)據(jù)時引發(fā)的中斷。這次只說定時/計數(shù)器溢出中斷。 程序如下:
/**********************51單片機學(xué)習(xí)例程***********************
* 平臺:Keil U4 + STC89C52
* 名稱:LED閃爍
* 晶體:11.0592MHZ
******************************************************************/
#include <reg52.h>
sbit led=P1^0;
/****************************************************
*
* 延時子函數(shù)
*
*****************************************************/
void delay(unsigned int i)
{
unsigned int j;
unsigned char k;
for(j=i;j>0;j--) //把i賦值給j,然后進行判斷,當(dāng)j大于0時,j減一,重復(fù)判斷,一直到符合條件為止
for(k=125;k>0;k--); //首先賦值125給k,然后進行判斷,當(dāng)k大于0時,k減一,重復(fù)判斷,一直到符合條件為止
}
/****************************************************
*
* 主函數(shù),在死循環(huán)中實現(xiàn)LED閃爍
*
*****************************************************/
int main()
{
while(1)
{
led=~led; //每隔一段時間即對輸出取反。
delay(3000); //閃爍間隔。間隔約為0.85S
}
return(0);
}
下載驗證,OK! 今天要出差,簡單寫一下,回來后再豐滿一下。 源碼如下:
LED延時閃爍.zip
(20.83 KB, 下載次數(shù): 36)
2015-3-20 23:00 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|