關於51微控制器中斷程式,51微控制器中斷程式

時間 2022-12-02 08:20:56

1樓:cindere鞡

你好:看你對定時器中斷不是很了解,我可以給你乙個詳細的解釋:首先了解一下51微控制器的週期,51微控制器的機器週期計算方式是12/晶振(hz),也就是說微控制器每隔這麼一段時間會讓定時暫存器加1,如果是12mhz晶振,就是1us定時暫存器會自己加1。

然後,當你配置好定時器相關暫存器後,開啟trx(定時器啟動開關),定時器啟動,你的11.0592mhz的晶振根據上述公式算出為每1.0851us定時暫存器加1,當然不是從0開始加,而是從你的初值的基礎上開始加,加到溢位時就是定時暫存器滿之後產生中斷訊號,這個訊號是由硬體自動置位的。

最後根據相應的中斷號進去中斷入口函式,裡邊只要重灌初值就可以了,之後就可以自己寫點處理程式進去。

那麼根據你的1.0592mhz晶振,45872×1.0851就是50000左右,剛好是換算後的50us中斷一次。那麼num每50us自增一次,計數到20就是一秒了。

有不懂的地方可隨時回覆我。

希望我的回答能幫助到你。

2樓:匿名使用者

51微控制器中定時器中斷時計數溢位時產生的,對於晶振為11.0592m而言,50毫秒的溢位值為50000*11.0592/12=46080.

所以定時器賦值為:(65536-46080)

50毫秒中斷一次,所以num+1就是50毫秒,加20次就是1秒。

51微控制器中斷程式

3樓:匿名使用者

這個圖未接入任何中斷輸入io。中斷程式寫法是:

void ext0() interrupt 0  //外部中斷0void ext1() interrupt 2  //外部中斷1void time0() interrupt 1  //定時器0中斷void time1() interrupt 3  //定時器0中斷void uart() interrupt 4  //串列埠中斷

關於51微控制器的中斷

4樓:潘達

51在進入中斷時會關閉中斷使能,只有reti執行後才會自動開啟,當然你也可以沒有執行到reti之前就主動開啟,那樣就允許在中斷程式中又一次中斷,如果不這樣只能再等三毫秒,前乙個中斷退出,其他中斷才才能執行。。。至於計時,如果你不是溢位後自動重新整理的模式,就不會計時,因為計時器沒初值。。。

中斷不會被跳過,除非同一種中斷,在第二次中斷來臨之前還沒有執行,才會被跳過一次。。。。

5樓:一萬光年

同級的中斷不會巢狀,要等前乙個中斷執行完了 才會執行下乙個中斷(即使中斷已經滿足觸發條件)。

6樓:匿名使用者

t1到達22毫秒時計時器溢位,停止計時。t1是在22毫秒後停止計時,等待3毫秒後進入t1的中斷程式.

51微控制器定時器中斷程式怎麼辦?

7樓:m愛人

再次重新啟動。

用c語言實現的,先要定義好定時器的初值,不管你使用多大的晶振,使用51微控制器,一般都是12分頻出來,也就可以得出乙個機器週期,機器週期=12/n(n指晶振頻率),假設你要定時的時間為m,那麼定時的初值為:m/機器週期=初值;

th0=(65536-初值)%256;

tl0=(65536-初值)/256;

將(65536-初值)所得的值化成16進製制,其高位就是th0的值,低位為tl0的值,例如用12m晶振做1ms定時計算如下:

機器週期=12/12*10^6=1us(微秒)

定時初值=(1*10^-3)/(1*10^-6)=1000;

所以:th0=(65536-1000)%256;

tl0=(65536-1000)/256;

將65536-1000=64536化為16進製為:0xfc18,th0=0xfc,tl0=0x18;

定好初值後要延遲一秒就定乙個延時引數,這裡使用1000就行了(定時為1ms)中斷程式為:timer0() interrupt 1 // 1ms延時(12.0mhz)

求乙個51微控制器簡單的中斷c語言程式

8樓:做而論道

//微控制器,乙個定時器,能使發光二極體亮1s,滅1s,周而復始。

#include

#define uchar unsigned char#define uint unsigned intvoid init();

uchar a = 0;

//----------------------------main()

} //----------------------------void init()

//----------------------------void timer0() interrupt 1

9樓:出荃帖旋

首先你這問題不難,現在回答你這問題的難點在於你妹給出電路圖。

在此給出你程式的大體思路,

1、寫兩個子函式,乙個是實現8個led順序點亮的函式1,俗稱的流水燈,另乙個是數碼管顯示「sos」的函式2

2、在主程式中去呼叫函式1,完了跟著檢測按鍵是否按下,檢測到按鍵後,呼叫函式1,完了多迴圈幾次函式2的呼叫來實現你的「顯示一段時間後返回led順序點亮」

注意:按鍵檢測需要考慮去抖動的問題,寫的高大上一點,可以加入定時器,實現你的點亮一段時間。

望採納,有問題在追加,還不會寫可以發電路圖出來再說

51微控制器定時器中斷程式

10樓:m愛人

再次重新啟動。

用c語言實現的,先要定義好定時器的初值,不管你使用多大的晶振,使用51微控制器,一般都是12分頻出來,也就可以得出乙個機器週期,機器週期=12/n(n指晶振頻率),假設你要定時的時間為m,那麼定時的初值為:m/機器週期=初值;

th0=(65536-初值)%256;

tl0=(65536-初值)/256;

將(65536-初值)所得的值化成16進製制,其高位就是th0的值,低位為tl0的值,例如用12m晶振做1ms定時計算如下:

機器週期=12/12*10^6=1us(微秒)

定時初值=(1*10^-3)/(1*10^-6)=1000;

所以:th0=(65536-1000)%256;

tl0=(65536-1000)/256;

將65536-1000=64536化為16進製為:0xfc18,th0=0xfc,tl0=0x18;

定好初值後要延遲一秒就定乙個延時引數,這裡使用1000就行了(定時為1ms)中斷程式為:timer0() interrupt 1 // 1ms延時(12.0mhz)

11樓:匿名使用者

這個不難吧?

a亮,延時,再b亮,再延時,用個while(1),可以讓亮的過程只走一回。

晚上給你編乙個。

你先想想,想不出來晚上給你弄乙個。

微控制器中斷系統綜合例項設計,51微控制器中斷系統外部中斷設計程式

看圖意思是要定時器中斷產生波形啊 51微控制器中斷系統外部中斷設計程式 按鍵一頭接在外部中斷口,一頭接地。按一次觸發一次。void main void int0 interrupt 0 外部中斷函式解釋2個if num2 定時器中斷一次加一 if num2 20 如果num2加了20次了那麼 你這裡...

51微控制器程式問題

主程式裡面來做中斷處理,當定時器1 num1加到25時 num1清零,p1取反。當定時器0 tt 加到25時 tt清零,同時num加1。當num加到16時num清零,p0口顯示 num這個數 num 0 th0 65536 10000 256 tl0 65536 10000 256 th1 6553...

最簡單c51微控制器液晶顯示程式,51微控制器液晶1602的C程式誰有,給個簡單的顯示乙個字元A的

詳細請見 51微控制器液晶1602的c程式誰有,給個簡單的顯示乙個字元a的 解決方法很多 查1602手冊可知,38h 即00111000 為第6條指令格式 001dlnf 對應可知,nl 1,高電平4位匯流排,低電平8位匯流排 題目8位資料介面是錯的 n 1,高電平為雙行顯示,低電平為單行顯示,所以...

51系列微控制器有哪些用途,51微控制器 的實際應用有哪些?範圍廣嗎?

微控制器是一種可通過程式設計控制的微處理器,微控制器晶元自身不能單獨應用與某項工程或產品上,它必須要靠外圍數字器件或者是模擬器件的協調才能發揮其自身的強大功能。微控制器屬於控制類數字晶元,目前其應用於領域已非常廣泛。主要如下 1.工業自動化。如資料採集,測控技術等 2.智慧型儀器儀表。如數字示波器,...

51微控制器中if語句的問題,51微控制器中if語句的乙個問題

微控制器程式在執行完main程式後會跳回到住main程式入口再重新執行的。把這個程式反彙編以後可以看到在c 0x0018行跳回主函式入口c0003 c 0x0000 02000f ljmp c 000f 4 void main void 5 c 0x000e 22ret c 0x000f 787f ...