⑴ 單片機定時器中斷
定時器中斷後,需要響應中斷,才會自動清除中斷標志位TF1,這是由中斷系統完成的。
而你用查詢方式,並不響應中斷,也就是中斷系統並沒有工作,所以,就不會自動清除標志位啦。
這樣設計才是合理的,假如,查詢也可以清除標志位,那麼一查詢就清除了,那就永遠也不會使TF1=1了,定時器就永遠也不會查詢到 定時器定時到了。
所以,學習要理解其原理,不要看錶面。
⑵ 什麼是單片機的中斷序號中斷序號1表示什麼 中斷序號3表示什麼
單片機的中斷序號決定該中斷的中斷向量的位置(即中斷服務程序的入口地址)
即 中斷序號就是中斷源在單片機的中斷向量表中的位置序號。
具體關系: 中斷向量=0003H+中斷序號×8
例如:
中斷0(即中斷序號為0 ) 其中斷向量=中斷服務程序的入口地址=0003H
中斷1(即中斷序號為1 ) 其中斷向量=中斷服務程序的入口地址=000BH
對於51單片機:
中斷序號0 表示的是外部中斷0的中斷序號
中斷序號1 表示的是定時計數器0的中斷序號
中斷序號2 表示的是外部中斷1的中斷序號
中斷序號3 表示的是定時計數器1的中斷序號
中斷序號4 表示的是串列口的中斷序號
中斷序號5 表示的是定時計數器2的中斷序號
呵呵 滿意就選滿意回答吧
⑶ 51單片機中的定時器中斷是怎麼用的
代碼如下:
//實現led燈一秒亮滅閃爍
void main()
{
TMOD=0x01;//設置定時器0為工作方式1(M1 M0為01)
TH0=(65536-45872)/256;//裝初值11.0582晶振定時50ms數為45872
TL0=(65536-45872)%256;
EA=1;//開總中斷
ET0=1;//開定時器0中斷
TR0=1;//啟動定時器0
while(1);//程序停止在這里等待中斷發生
}
void T0_time() interrupt 1
{
TMOD=0x01;//重裝初值
TH0=(65536-45872)/256;
num++;//num每加一次判斷一次是否到20次
if(num==20)//如果到了20次,說明1秒時間到
{
num=0;//num清0重新計數
led=~led1;
}
}
(3)單片機定時器1中斷擴展閱讀
定時器有兩種工作模式,分別為計數模式和定時模式。對Px,y的輸入脈沖進行計數為計數模式。定時模式,則是對MCU的主時鍾經過12分頻後計數。因為主時鍾是相對穩定的,所以可以通過計數值推算出計數所經過的時間。
51單片機計數器的脈沖輸入腳。主要的脈沖輸入腳有Px,y, 也指對應T0的P3.4和對應T1的P3.5,主要用來檢測片外來的脈沖。而引腳18和19則對應著晶振的輸入脈沖,脈沖的頻率和周期為
F = f/12 = 11.0592M/12 = 0.9216MHZ T = 1/F = 1.085us
51計數器的計數值存放於特殊功能寄存器中。T0(TL0-0x8A, TH0-0x8C),T1(TL1-0x8B, TH1-0x8D)
定時器常用作定時時鍾,以實現定時檢測,定時響應、定時控制,並且可以產生ms寬的脈沖信號,驅動步進電機。定時和計數的最終功能都是通過計數實現,若計數的事件源是周期固定的脈沖則可實現定時功能,否則只能實現計數功能。因此可以將定時和計數功能全由一個部件實現。
⑷ 單片機定時器中斷的問題
void
T1_INT()interrupt
3
{
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
BEEP=-BEEP;
//根據高溫還是低溫警報設定不同延時間隔
if(L_LED==0)//L_LED一定是低溫/高溫顯示,即L_LED==0是低溫;==1是高溫
{//如果是低溫時,看看t到沒到150,如果沒到直接返回
if(++t!=150)
return;
}
else
{//L_LED==1,說明是高溫,看看t到沒到60,如果沒到直接返回
if(++t!=60)
return;
}
\\低溫時(L_LED==0),t==150說明是延時到了;或者高溫時(L_LED==1),t==60說明延時到了。
t=0;//t清零
DelayMS(20);//延時
}
⑸ 51單片機,如果外部中斷0被觸發,定時器0、外部中斷1、定時器1還能工作么。如果是外部中斷1被觸發呢
如果在沒有更改過優先順序的情況下,外部中斷1被觸發,定時器1和定時器0哪個還能工作?
不知道樓主所說的「工作」,是什麼意思。
外部中斷0、定時器0、外部中斷1、定時器1和串列口,它們是同時工作的。
只是當滿足一定的條件,它們會向CPU申請中斷,而CPU只有一個,只能執行一個外設的中斷程序。
如果外部中斷1被觸發,CPU執行X1的中斷程序,這時,定時器1和定時器0仍然在做自己的工作,並沒有停止工作。
樓主的問題,可能是問CPU的,當CPU在執行外部中斷1的程序期間,還能不能接受T1、T0的中斷申請。
答案是:不能。
只有高級的,可以中斷低級的。
樓主已經說它們是同一級別的中斷源,那麼它們就是不能互相中斷的。
只有當這個中斷程序結束了,返回主程序後,CPU才會響應剛才早已來到的中斷申請。
⑹ 希望高手幫忙,說明一下單片機中定時器0和定時器1中斷執行過程
定時器150ms中斷一次,每次中斷FLAG加1
40次即為2秒,所以在定時器0中斷時,要判斷是0-40,40-80等時間段
定時器0中斷時,要再次裝入定時時間常數,但在0-40,40-80等時間段內裝入的時間常數是不同的,因此beep取反的頻率就不同
但由於定時器0中斷10次BEEP才取反一次,所以當fre=50000;50*10= 500ms才取反一次
這么低的頻率對無源蜂鳴器是沒有響應的
當fre=50000;0.156*10= 1.56ms取反一次,周期3.12ms頻率300多HZ,對於有源蜂鳴器響應是很困難的
所以用有源蜂鳴器演奏常式中的音樂只能嘔呀嘈雜難為聽了
⑺ 請問單片機定時器中斷是怎麼樣的過程啊
1:如果是中斷只有一次,那麼沒有下一次起始。
2:如果是多次中斷,那麼每一次結束後定時器數值將會被重置。
一:循環定時中斷——定時的時間是循環到定時程序的時間。
二:條件定時中斷——定時的時間是條件語句結束的時間(如果中斷程序裡面不改變條件)。
也就是說,在定時一段時間後進入中斷,定時的開始與中斷無關。一樓說的應該是定時器中斷,及在中斷程序裡面會改定時數值。樓主所講的應該是中斷前加一個延時。
⑻ 51單片機中斷/定時器/計數器
89C51/52的中斷系統有5個中斷源 ,2個優先順序,可實現二級中斷嵌套 。
1、(P3.2)可由IT0(TCON.0)選擇其為低電平有效還是下降沿有效。當CPU檢測到P3.2引腳上出現有效的中斷信號時,中斷標志IE0(TCON.1)置1,向CPU申請中斷。
2、(P3.3)可由IT1(TCON.2)選擇其為低電平有效還是下降沿有效。當CPU檢測到P3.3引腳上出現有效的中斷信號時,中斷標志IE1(TCON.3)置1,向CPU申請中斷。
3、TF0(TCON.5),片內定時/計數器T0溢出中斷請求標志。當定時/計數器T0發生溢出時,置位TF0,並向CPU申請中斷。
4、TF1(TCON.7),片內定時/計數器T1溢出中斷請求標志。當定時/計數器T1發生溢出時,置位TF1,並向CPU申請中斷。
5、RI(SCON.0)或TI(SCON.1),串列口中斷請求標志。當串列口接收完一幀串列數據時置位RI或當串列口發送完一幀串列數據時置位TI,向CPU申請中斷。
IE寄存器:
中斷允許控制寄存器分為兩層結構,第一級結構為中斷允許總控制EA,只有當EA處於中斷允許狀態,中斷源中斷請求才能夠得到允許;當EA處於不允許狀態時,無論IE寄存器中其他位處於什麼狀態,中斷源中斷請求都不會得到允許。第二級結構為5個中斷允許控制位,分別對應5個中斷源的中斷請求,當對應中斷允許控制位為1時,中斷源中斷請求得到允許。
EX0:外部中斷0允許位。EX0=1,允許外部中斷0中斷;EX0=0,禁止外部中斷0中斷。當EX0=1( SETB EX0 )時,同時單片機P3.2引腳上出現中斷信號時,單片機中斷主程序的執行而「飛」往中斷服務子程序,執行完後通過中斷返回指令RET 動返回主程序。當EX0=0( CLR EX0)時,即使單片機P3.2引腳上出現中斷信程序也不會從主程序「飛」 出去執行,因為此時單片機的CPU相當於被「堵上了耳朵」,根本接收不到P3.2引腳上的中斷信號,但是這並不表示這個信號不存在。如果單片機的CPU有空查一下TCON中的IE0位,若為1就說明有中斷信號出現過。
ET0:T0溢出中斷允許位。ET0=1,允許T0中斷;ET0=0,禁止T0中斷。
EX1:外部中斷1允許位。EX1=1,允許外部中斷1中斷;EX1=0,禁止外部中斷1中斷。當EX1=1( SETB EX1)時,並且外部P3.3引腳上出現中斷信號時,單片機CPU會中斷主程序而去執行相應的中斷服務子程序;當EX1=0( CLR EX1)時使外部P3.3引腳上即使出現中斷信號,單片機的CPU也不能中斷主程序轉而去行中斷服務子程序。 [3] 因此,可以這樣認為,EX0和EX1是決定CPU能否感覺到外部引腳P3.2P3.3上的中斷信號的控制位。
ET1:T1溢出中斷允許位。ET1=1,允許T1中斷;ET1=0,禁止T1中斷。
ES:串列中斷允許位。ES=1,允許串列口中斷;ES=0,禁止串列口中斷。
EA:中斷總允許位。EA=1,CPU開放中斷;EA=0,CPU禁止所有的中斷請求。總允許EA好比一個總開關。EA就相當於每家水管的總閘,如果總閘不開,各個龍頭即使開了也不會有水;反過來,如果總閘開了而各個分閘沒開也不會有水,所當我們想讓P3.2和P3.3引腳上的信號能夠中斷主程序則必須將EA位設置為0(CLR EA)。
TCON寄存器:
各位的標識如下:
TF1:定時器1溢出標志位。當定時器1計滿溢出時,由硬體使TF1置1,並且申請中斷,進入中斷服務程序,有硬體自動清0 ,在查詢方式下用軟體清0.
TR1:定時器運行控制位,TR1置1是開啟定時器1,TR1置0時關閉定時器1.
TF0:定時器0溢出標志位。當定時器0計滿溢出時,由硬體使TF0置1,並且申請中斷,進入中斷服務程序,有硬體自動清0 ,在查詢方式下用軟體清0.
TR0:定時器運行控制位,TR0置1是開啟定時器0,TR0置0時關閉定時器0.
IE1:外部中斷1請求標志位。
IT1:外部中斷1觸發方式選擇位。當IT1置0時,為低電平觸發;當IT1置1時,為下降沿觸發。
IE0:外部中斷0請求標志位。
IT0:外部中斷0觸發方式選擇位。當IT0置0時,為低電平觸發;當IT0置1時,為下降沿觸發。
51單片機外部中斷響應條件:
1、中斷源有中斷請求;
2、中斷源的中斷允許位為1(設置IE寄存器相關位);
3、CPU開中斷(設置IE寄存器開中斷,即EA=1)
CPU時序的有關知識:
振盪周期:為單片機提供定時信號的振盪源的周期(晶振周期或外加振盪周期)
狀態周期:2個振盪周期為1個狀態周期,用S表示。
機器周期:1個機器周期含6個狀態周期,12個振盪周期。
指令周期:完成1條指令所佔用的全部時間,它以機器周期為單位。
定時器的其他知識點:
1、51單片機有兩組定時器/計數器,因為既可以定時,又可以計數,故稱之為定時器/計數器。
2、定時器/計數器和單片機的CPU是相互獨立的。定時器/計數器工作的過程是自動完成的,不需要CPU的參與。
3、51單片機中的定時器/計數器是根據機器內部的時鍾或者是外部的脈沖信號對寄存器中的數據加1。
4、有了定時器/計數器之後,可以增加單片機的效率,一些簡單的重復加1的工作可以交給定時器/計數器處理。CPU轉而處理一些復雜的事情。同時可以實現精確定時作用。
與定時器/計數器有關的寄存器:
1、TMOD寄存器
2、TCON寄存器
3、IE寄存器
4、THx/TL寄存器
工作方式寄存器TMOD:
工作方式寄存器TMOD用於設置定時/計數器的工作方式,低四位用於T0,高四位用於T1。其格式如下:
M1M0:工作方式設置位。定時/計數器有四種工作方式。一般我們廳方式1和方式2:
控制寄存器TCON:
TCON的低4位用於控制外部中斷,已在前面介紹。TCON的高4位用於控制定時/計數器的啟動和中斷申請。其格式如下:
TF1(TCON.7):T1溢出中斷請求標志位。T1計數溢出時由硬體自動置TF1為1。CPU響應中斷後TF1由硬體自動清0。T1工作時,CPU可隨時查詢TF1的狀態。所以,TF1可用作查詢測試的標志。TF1也可以用軟體置1或清0,同硬體置1或清0的效果一樣。
TR1(TCON.6):T1運行控制位。TR1置1時,T1開始工作;TR1置0時,T1停止工作。TR1由軟體置1或清0。所以,用軟體可控制定時/計數器的啟動與停止。
TF0(TCON.5):T0溢出中斷請求標志位,其功能與TF1類同。
TR0(TCON.4):T0運行控制位,其功能與TR1類同。
IE中斷開關寄存器:
用於開啟cpu中斷和對應的中斷位。
THx和TL定時/計數存儲寄存器:
THx存儲高8位數據,TLx存儲低8位數據。
定時器/計算器初值計數公式:
計數個數與計數初值的關系為:X=2^n-N
N是需要計數的值;n與設置定時器/計數器的工作方式有關(可能為8、13、16);X是需要設置在THx和TLx的初值。
使用定時器/計算器的初始化流程:
1、對TMOD賦值,以確定T0和T1的工作方式。
2、計算初值,並將其寫入TH0、TL0或TH1、TL1。
3、中斷方式選擇,則對EA賦值,開放定時器中斷。
4、使TR0或TR1置位,啟動定時/計數器定時或計數。
⑼ avr單片機定時器1中斷問題
中斷沒有問題,有問題的是把中斷初始化和下面幾句放在while(1)中了:
1)--DDRF = 0x01; ---設置埠PF0為輸入,其他為輸出
2)--PORTF = 0x01;---設置埠PF0為高電平,其他為低電平(包括PF1)
3)--DDRF = 0x02;---設置埠PF1為輸入,其他為輸出
4)--PORTF = 0x02;---設置埠PF1為高電平,其他為低電平
這樣導致程序不斷的將PF1設為低,然後馬上又設為高,因為你上面幾句放在主循環中了。
根據你中斷的設置,你的led埠應該是PF1; 你的1.1mhz的頻率是上面幾句得到的。
解決方法:
1.你把while(1)中的代碼全部剪切(不是復制)到while(1)之前;
while(1)中不要任何代碼就OK了。
⑽ 51單片機定時器中斷原理
原理很簡單,說白了就是用一個計數器對內部時鍾計數,計滿溢出時觸發定時器中斷,此時,程序會中斷執行當前代碼跳轉到一個固定地址(定時器中斷服務程序入口)去執行中斷服務程序,執行完畢再回到被中斷的代碼地址繼續執行。