新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 個(gè)人對(duì)單片機(jī)中斷程序的理解

個(gè)人對(duì)單片機(jī)中斷程序的理解

作者: 時(shí)間:2016-12-01 來(lái)源:網(wǎng)絡(luò) 收藏
開(kāi)題首先貼上一段練習(xí)中遇到的代碼:

/*1:利用定時(shí)/計(jì)數(shù)器T0從P1.0輸出周期為1s的方波,讓發(fā)光二極管以1HZ閃爍,設(shè)晶振頻率為12MHz。*/
#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit P1_1=P1^0;
uchar time;
void main()
{
time=0;
TMOD=0x01;////設(shè)置定時(shí)器0為工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;//開(kāi)總中斷
ET0=1;//開(kāi)定時(shí)器0中斷
TR0=1;//啟動(dòng)定時(shí)器0
while(1);//等待中斷產(chǎn)生
}
void T1_time() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
if(time==20)
{
time=0;
P1_1=~P1_1;
}
}

本文引用地址:http://m.butianyuan.cn/article/201612/324158.htm

hit:
在學(xué)習(xí)單片機(jī)的時(shí)候很容易按照C語(yǔ)言編程的格式來(lái)理解,程序在打開(kāi)中斷之后會(huì)一直停留在while(1);當(dāng)中,但在實(shí)際上,程序的確會(huì)停留在while(1);里,由于開(kāi)啟了中斷開(kāi)關(guān)而并未關(guān)閉,所以T0繼續(xù)計(jì)數(shù),所以后面一直會(huì)有中斷。

過(guò)程可以理解為這樣,程序一直在while(1);當(dāng)中,直到定時(shí)器計(jì)滿(mǎn)產(chǎn)生中斷;
產(chǎn)生中斷后,執(zhí)行中斷程序,定時(shí)器重新賦值,time自加1;
回到while(1)中,等待下一次中斷,定時(shí)器繼續(xù)計(jì)數(shù)。

單片機(jī)怎么從主函數(shù)跳到中斷函數(shù)中:
對(duì)于單片機(jī)的硬件,你熟悉嗎?時(shí)鐘和CPU是獨(dú)立的,時(shí)鐘中斷程序時(shí)這樣的:在CPU執(zhí)行指令時(shí),計(jì)數(shù)器(計(jì)時(shí)器)同時(shí)在計(jì)時(shí),當(dāng)計(jì)時(shí)器溢出時(shí),就向CPU申請(qǐng)中斷,如果允許響應(yīng)中斷,CPU就轉(zhuǎn)到中斷服務(wù)程序執(zhí)行相關(guān)的程序。
單片機(jī)的時(shí)鐘中斷相應(yīng)要滿(mǎn)足兩個(gè)條件:第一,允許中斷源申請(qǐng)中斷。第二,允許cpu響應(yīng)中斷。二者缺一不可。 EA=1;//開(kāi)總中斷
ET0=1;//開(kāi)定時(shí)器0中斷
ET1=1;
TR0=1;//啟動(dòng)定時(shí)器0
TR1=1;
你這些語(yǔ)句,就允許了中斷響應(yīng),所以,當(dāng)你的程序跑起來(lái)時(shí),時(shí)鐘時(shí)間到了,CPU就轉(zhuǎn)入中斷服務(wù)程序了,執(zhí)行完了再返回主程序。你可以在編譯器中用DEBUG查看執(zhí)行過(guò)程的。如果你用匯編語(yǔ)言寫(xiě),就更清楚了,可以看清每一步的操作的。
硬件部分是這樣:在每個(gè)機(jī)器周期的S5P2,單片機(jī)會(huì)來(lái)采樣,判斷是否有中斷申請(qǐng)。所以一旦時(shí)鐘計(jì)數(shù)溢出,就會(huì)轉(zhuǎn)入中斷服務(wù)程序。


這個(gè)打個(gè)比方吧,你在上課,相當(dāng)于主程序,這時(shí)時(shí)間到了,打鈴下課了,你就不讀書(shū)了,跑出去玩了。這其實(shí)是一樣的道理。你在上課,這和打鈴不相關(guān),并不是你讓打鈴的,學(xué)校的時(shí)鐘在不停地走,到了時(shí)間自動(dòng)打鈴,這不受你上課的影響的。但是如果你把耳朵堵上了(不允許響應(yīng)中斷),就是把鈴打碎了你也不知道下課了,所以你就一直讀書(shū)。



關(guān)鍵詞: 單片機(jī)中斷程

評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉