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