導航:首頁 > 操作系統 > 單片機計時中斷

單片機計時中斷

發布時間:2022-10-01 06:19:34

單片機定時中斷

跟你理清一下思路,你的問題就解決了。首先,你的程序很簡單,就是讓發光二極體1秒亮1秒滅。因此,你前提是要定時1秒,但51單片機無法定時1秒,因此,你的程序就要定時50毫秒,每到了50毫秒,你就讓num自加1,當num加到20時,換句話說,已經定時50毫秒20次了,那就是1秒咯,所以此有led1=~led1; //讓發光管狀態取反,達到程序目的。另外,定時50毫秒你要給TH0和TL0賦給初值,因此 TH0=(65536-45872)/256; //重新裝載初值TL0=(65536-45872)%256;才會有這兩句,但定時50毫秒後,你的初值也會隨之消失,因此才會在void T0_time()這個函數中重新賦初值。的確像你所說的初值是裝滿了開始執行中斷,其實從你TMOD=0x01; //設置定時器0位工作模式1(M1,M0位0,1)這句已經開始定時了,而賦初值是為了准確的定時50毫秒罷了。明白了沒有?

(其實你可以這樣理解,定時計數器就好比一個空的瓶子,當你給TMOD=0x01時,水就開始一滴一滴的往瓶子你滴,當瓶子滿了的時候,中斷就發生了。假如從一個空的瓶子滴到滿的瓶子定時是80毫秒的話,可你只需要定時50毫秒就夠了,所以就要一開始往瓶子里倒水,使滴水的起點不是空瓶子,這就是賦初值的作用。當瓶子滿了後,瓶子就會自動清空,重新從零開始。而第二次你再想定時50毫秒,你就必須從新再往瓶子里倒水,這就是第二次賦初值的作用)

⑵ 請問單片機定時器中斷是怎麼樣的過程啊

1:如果是中斷只有一次,那麼沒有下一次起始。
2:如果是多次中斷,那麼每一次結束後定時器數值將會被重置。
一:循環定時中斷——定時的時間是循環到定時程序的時間。
二:條件定時中斷——定時的時間是條件語句結束的時間(如果中斷程序裡面不改變條件)。
也就是說,在定時一段時間後進入中斷,定時的開始與中斷無關。一樓說的應該是定時器中斷,及在中斷程序裡面會改定時數值。樓主所講的應該是中斷前加一個延時。

⑶ 什麼是單片機的中斷

不同的計算機其硬體結構和軟體指令是不完全相同的,因此,中斷系統也是不相同的。

計算機的中斷系統能夠加強CPU對多任務事件的處理能力。中斷機制是現代計算機系統中的基礎設施之一,它在系統中起著通信網路作用,以協調系統對各種外部事件的響應和處理。中斷是實現多道程序設計的必要條件。 中斷是CPU對系統發生的某個事件作出的一種反應。

引起中斷的事件稱為中斷源。中斷源向CPU提出處理的請求稱為中斷請求。發生中斷時被打斷程序的暫停點稱為斷點。

CPU暫停現行程序而轉為響應中斷請求的過程稱為中斷響應。處理中斷源的程序稱為中斷處理程序。

CPU執行有關的中斷處理程序稱為中斷處理。而返回斷點的過程稱為中斷返回。中斷的實現實行軟體和硬體綜合完成,硬體部分叫做硬體裝置,軟體部分稱為軟體處理程序。

響應處理

大多數中斷系統都具有如下幾方面的操作,這些操作是按照中斷的執行先後次序排列的。

1、 接收中斷請求。

2、 查看本級中斷屏蔽位,若該位為1則本級中斷源參加優先權排隊。

3、 中斷優先權選擇。

4、 處理機執行完一條指令後或者這條指令已無法執行完,則立即中止現行程序。接著,中斷部件根據中斷級去指定相應的主存單元,並把被中斷的指令地址和處理機當前的主要狀態信息存放在此單元中。

5、 中斷部件根據中斷級又指定另外的主存單元,從這些單元中取出處理機新的狀態信息和該級中斷控製程序的起始地址。

6、 執行中斷控製程序和相應的中斷服務程序。

7、 執行完中斷服務程序後,利用專用指令使處理機返回被中斷的程序或轉向其他程序。

沖突

在一些罕見的情況下,兩個ISA設備可以共享相同的 IRQ,只要它們不同時使用即可。為了解決這個問題,後來的PCI 匯流排允許 IRQ 共享。PCI Express沒有物理中斷線,並使用消息信號中斷(MSI) 到操作系統(如果可用)。

在早期的 IBM 兼容個人計算機中,中斷曾經是一種常見的硬體錯誤,當兩個設備嘗試使用相同的中斷請求(或 中斷)向可編程中斷控制器(PIC)發出中斷信號時會收到該錯誤。

PIC 期望每條線路僅來自一個設備的中斷請求,因此沿同一條線路發送中斷信號的多個設備通常會導致 中斷 沖突,從而導致計算機死機。

例如,如果在系統中添加數據機擴展卡並分配給中斷4,傳統上分配給串列埠1,則可能會導致中斷沖突。最初,中斷 7 是使用音效卡的常見選擇,但後來發現 中斷 7 會干擾列印機埠(LPT1)時使用了中斷5。該串列埠經常禁用可以用於其他設備的中斷線。

中斷 2/9 是 MPU-401 MIDI 埠的傳統中斷線,但這與ACPI系統控制中斷(SCI 在 Intel 晶元組上硬連線到 中斷9)沖突;

這意味著 ISAMPU-401帶有硬連線中斷2/9 的卡和帶有硬編碼 中斷 2/9 的 MPU-401 設備驅動程序不能在啟用 ACPI 的系統上以中斷驅動模式使用。

以上內容參考網路-中斷

⑷ 51單片機定時器中斷原理

原理很簡單,說白了就是用一個計數器對內部時鍾計數,計滿溢出時觸發定時器中斷,此時,程序會中斷執行當前代碼跳轉到一個固定地址(定時器中斷服務程序入口)去執行中斷服務程序,執行完畢再回到被中斷的代碼地址繼續執行。

⑸ 單片機定時器中斷的問題

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單片機中的定時器中斷是怎麼用的

代碼如下:

//實現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;

}

}

(7)單片機計時中斷擴展閱讀

定時器有兩種工作模式,分別為計數模式和定時模式。對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寬的脈沖信號,驅動步進電機。定時和計數的最終功能都是通過計數實現,若計數的事件源是周期固定的脈沖則可實現定時功能,否則只能實現計數功能。因此可以將定時和計數功能全由一個部件實現。

⑻ 單片機定時器中斷

#include <pic.h> //調用頭文件,可以去PICC軟體下去查找PIC16F87XA單片機的頭文件
__CONFIG(XT&WDTEN&LVPDIS); //定義配置字,晶振類型:XT,啟動開門狗,禁止低電壓編程

#define HC138_A RE2 //定義U6、U7、U8的A為RE2埠
#define HC138_B RE1 //定義U6、U7、U8的B為RE1埠
#define HC138_C RE0 //定義U6、U7、U8的C為RE0埠

#define U6_E RA2 //定義U6_E為RA2埠,U6E=1時,U6使能否則失能
#define U7_E RA3 //定義U7_E為RA3埠,U7E=1時,U7使能否則失能
#define U8_E RA1 //定義U8_E為RA1埠,U8E=1時,U8使能否則失能

#define V1 RA5 //定義V1為RA5埠

unsigned int tmcon;

//---------------------------------------
//名稱: 初始化函數
//日期:20101001
//-----------------------------------------
void init(void)
{
ADCON1=0X06; //所有IO均為數字口,模擬量輸入禁止
OPTION=0x80; //關閉RB口電平變化功能
TRISA=0B11010001; //RA1,RA2,RA3,RA5置為輸出,其他未用設置為輸入
TRISB=0B11111111; //其他未用設置為輸入
TRISC=0B11111111; //其他未用設置為輸入
TRISD=0B11110011; //未用設置為輸入
TRISE=0B11111000; //RE0,RE1,RE2置為輸出,其他未用設置為輸入
RD2=0; //關閉蜂鳴器
RD3=0; //關閉繼電器
RA1=0; //關掉數碼管、發光二極體
RA2=0; //關掉LED點陣屏左8列
RA3=0; //關掉LED點陣屏右8列
RBIE=0; //RB口電平變化中斷禁止
}
//---------------------------------------
//名稱: T0初始化函數
//日期:20100501
//-----------------------------------------
void timer0init(void)
{
T0CS=0; //TMR0工作於定時器方式
PSA=1; //TMR0不分頻
T0IF=0; //清除TMR0中斷標志
T0IE=1; //TMR0中斷允許
TMR0=0x13; //賦初值,以便TMR0每250US中斷一次
GIE=1;
}
//---------------------------------------
//名稱: T0中斷函數(250US)
//日期:20101001
//-----------------------------------------
void interrupt ISR(void)
{
if(TMR0IF==1) //250us
{
TMR0=0x13;
T0IF=0;
if(++tmcon>3999) //計數4000次後,為1秒
{
tmcon=0;
V1=!V1;
}
}
}
//---------------------------------------
//名稱: 主函數
//日期:20101001
//-----------------------------------------
void main(void)
{
init();
timer0init();
V1=0; //熄滅V1

HC138_A=0; //使74HC138的Y0端為0,其他高阻
HC138_B=0; //使74HC138的Y0端為0,其他高阻
HC138_C=0; //使74HC138的Y0端為0,其他高阻

U6_E=0; //U6關閉
U7_E=0; //U7關閉
U8_E=1; //U8打開
while(1)
{
asm("CLRWDT");
}
}//[email protected]

⑼ 單片機定時中斷

在中斷程序中不要調延時子程序,通常,中斷程序盡量要短,盡快從中斷程序中返回,所以,是不能延時的,而且看你的程序不需要中斷延時的。如下圖修改。

閱讀全文

與單片機計時中斷相關的資料

熱點內容
程序員用得到數字區嗎 瀏覽:174
python求商 瀏覽:477
ipad能用c語言編譯器嗎 瀏覽:561
軟泥解壓球最新版 瀏覽:998
4萬程序員辭職創業 瀏覽:759
thinkingphp 瀏覽:597
安卓相冊移動文件夾 瀏覽:6
耳朵清潔解壓聲控99的人都睡得著 瀏覽:205
叉車出租網站源碼 瀏覽:874
共享單車的app是什麼 瀏覽:408
不帶gui的伺服器什麼意思 瀏覽:373
金剛經及PDF 瀏覽:102
php中冒號 瀏覽:358
php5432 瀏覽:352
命令在哪使用 瀏覽:172
php獲取網頁元素 瀏覽:708
為什麼需要硬體驅動編譯 瀏覽:885
pm編程怎樣看導柱孔對不對稱 瀏覽:138
農業大學選課找不到伺服器怎麼辦 瀏覽:660
路由配置網關命令 瀏覽:935