中斷的原理和使用心得(一)
很多單片機(jī)初學(xué)者都會(huì)對(duì)中斷、定時(shí)/計(jì)數(shù)器、串口有些恐懼。原因有:
1.沒學(xué)之前被老鳥嚇。到,很多學(xué)單片機(jī)的新手問單片機(jī)難不難,就會(huì)有些老鳥故意嚇唬說中斷、定時(shí)器很難等等。
本節(jié)先說說中斷的使用:
概念:中斷是為了使單片機(jī)具有對(duì)外部或內(nèi)部隨機(jī)發(fā)生的事件實(shí)時(shí)處理而設(shè)置的,中斷功能的存在,很大程度上提高了單片機(jī)處理外部或內(nèi)部事件的能力。(純屬抄襲,但就是這個(gè)理)
51單片機(jī)的中斷有:外部中斷INT0
串行口中斷TI
我就對(duì)其一一分析,可能分析的不到位,希望大家給予指點(diǎn),因?yàn)槲乙彩遣艑W(xué),也是自己總結(jié)的,不可能就正確。
1. 外部中斷INT0
例:你正在看書,突然手機(jī)鈴響了,你放下書去接電話。(這個(gè)例子都被一些出書的列舉的不愛用了,但我不只是就看書,電話鈴響了,接電話就完了)
#include
#define
#define
sbit
void
void
{
EA=1;//開總中斷
EX0=1;//開外部中斷0
IT0=1;//下降沿觸發(fā)
while(1)
{
}
void
{
d1=0;
}
我用例子對(duì)應(yīng)程序來分析:
EA=1;就是你開著手機(jī),如果你都不開手機(jī)哪肯定不會(huì)影響到你看書了。
EX0=1;如果你手機(jī)是雙卡單待,相當(dāng)于你SIM1卡開著。(即待機(jī))
IT0=1;是下降沿觸發(fā),就相當(dāng)短信提醒,短信響一下就停了,然后你就會(huì)去看短 信來處理短信內(nèi)容,短信內(nèi)容就相當(dāng)于你中斷要做的事情。
void
{
d1=0;
} //點(diǎn)亮小燈程序,這就是中斷內(nèi)容,就相當(dāng)于你看短信。
每一句分析完了,我用例子寫個(gè)程序,更直白點(diǎn):
#include
#define
#define
sbit
void
{
打開手機(jī);
打開手機(jī)SIM1卡:
短信提醒設(shè)為鈴聲,電話設(shè)為靜音;(注,電話設(shè)為靜音,意思是忽略電話的影響)
while(1)
{
你一直在看書;
}
void
{
查看短信;
}
中斷INT1:就不說了,就是手機(jī)SIM1卡和SIM2卡的區(qū)別。
外部中斷INT0 不是對(duì)應(yīng)著12引腳嗎:1。你打開中斷,2,設(shè)置觸發(fā)方式。剩下的事就是等待外部中斷的,只要12引腳有任何動(dòng)靜,CPU都會(huì)根據(jù)情況去處理的。
舉例說明這句話:1.如果你設(shè)置下降沿觸發(fā),則12引腳有個(gè)高電平到低電平的跳變,則中斷就會(huì)被執(zhí)行。2.如果設(shè)置低電平觸發(fā),則12引腳有底電平中斷才會(huì)執(zhí)行,沒有中斷不會(huì)執(zhí)行。
先寫到著,實(shí)在不知道這樣寫,會(huì)不會(huì)把人搞暈。。。。
我寫的這些只是簡單的應(yīng)用,先不用去考慮什么中斷標(biāo)志位什么的東西,因?yàn)槟切﹦?dòng)作是由硬件自動(dòng)處理的,等到定時(shí)器,串口需要軟件處理時(shí),再詳細(xì)說吧!
評(píng)論