S51微控制器 計時器 中斷

2025-02-24 08:35:24 字數 3877 閱讀 7730

1樓:網友

1.不送初值,是從0 開始。一次中斷就是。

2.中斷就是從**開始中斷,中斷子程式招待完後,又轉回原來中斷處。那就是還在here裡。

3.需不需要壓棧要看有沒需要 保護的,就是進入子程式後會不會改變原來的暫存器或記憶體的資料 ,你這就不需要了。

4.清05.是的。你可以加個中斷子程式 ,裡面重新賦初值。你的程式 就是中斷方式 ,只是你這樣寫。

org 000bh

cplreti改成: org 000bh

ajmp t0int

然後在主程式 里加上中斷子程式,名字可以任起乙個。

t0int:mov th0,#0f6h

mov tl0,#23h

cplreti6. 二者一樣的,看使用習慣 ,後者簡潔。

2樓:網友

1. 要起動 timer 0, 讓它開始計數, 要有。

mov th0,#0f6h ; 先給 timer 0 初始值。

mov tl0,#23h ;

setb tr0 ; 開啟 timer 0setb et0 ; 致能 timer 0 中斷程式。

若沒先給 timer 0 初始值, timer 0 一定會先計數的。

2. 微控制器執行到 here:sjmp here , 就不會往下執行了, 除了有中斷(包括 timer 0)產生, 會跳去中斷程式, 否則會一直執行 這一行指令(here:

sjmp here)

3. 不需要的。

4. 溢位了, 就是清零了, 要再賦初值。

5. 是的, 要在中斷程式內, 賦予初值, 也只能用這個方法了, 否則第二次中斷開始計數長度就是2的十六次方個週期了。

6. 組譯出來的機器碼是一樣的, 沒有區別的。

3樓:網友

答1:不會從0 ,會繼續上次的值。

關於51微控制器自編計時器的問題:中斷函式還有按鍵怎樣加在程式裡??

4樓:網友

我看你的程式計時是通過主迴圈進行的,這個不會很準確的,void configtimer0()

上面是對定時器0 的初始化,1ms一次中斷void timer0() interrupt 1}這個就是使用定時器的計時方法,計時相對準確一點, 更準確的話 就用定時器的方式2 8位自動重灌模式。

void configtimer0()

void timer0() interrupt 1}方式1 是16位 ,,可以進行一箇中斷,,方式2 只能 0--256us

方式1 在中斷裡需要重新付初值,方式2是自動賦值, 減少執行時間,減小誤差。

51微控制器定時器中斷問題,單個數碼管間隔1秒一次顯示0到9。

5樓:網友

時間太長大哥 估計要好幾秒 根據你的程式 沒必要加延時 還有 如果用不到int這麼大的型別 就改為unsigned char 可以節約微控制器空間。

6樓:昔勤

定時器中斷就是用來代替延時delay的 你在加個delay,怎麼可能會用。

7樓:網友

if(tt>=20)/

另外程式這樣寫是不行的,費勁啊。

8樓:網友

延時太大,等延時完成時tt>20,迴圈不能進行。

9樓:網友

因為 delay(500)延時時間太長。

10樓:夏羽晴

把500改成1就好了,1us為機器週期。

51微控制器中執行完定時器中斷函式,tf0是硬體自動清0嗎?

11樓:網友

tf0是51微控制器定時器t0的溢位中斷標誌位。當t0被允許計數後,t0從初值開始按機器週期或者外部引腳輸入的脈衝進行加1計數。當計數到t0最高位產生溢位時,置「1」tf0,並向cpu請求中斷。

當cpu響應該中斷時,將由硬體自動清「0」tf0。當然,你也可以用「位操作指令」對tf0進行置「1」或清「0」操作。

12樓:網友

tf0:定時器t0溢位標誌,可由程式查詢和清零,tf0也是中斷請求源,當cpu響應t0中斷時由硬體清零。

13樓:網友

給你看看規格 你就找到了。

51微控制器定時器中斷方式實現p1.0輸出週期1s的方波的方法

14樓:網友

讓定時器每秒進入一次中斷。

每進入一次中斷,就改變一次的電平狀態。

這樣你用示波器看到的就是週期1秒的方波了。

15樓:網友

有幾種方法,可以用89s52的定時器2工作在始終輸出模式。最高頻率可達晶振的1/4,還可以用任何乙個定時器定時一秒,中斷裡寫取反的程式就可以了。

16樓:

這是個基本的啊……查查電子鐘的程式,把定時中斷摘出來。獲取知識的過程是要有的,不能指望現成的一模一樣的程式。

51微控制器計時器中斷時還能讀管腳的值嗎?

17樓:718389823涼逍

可以讀,比如好多情況都要定時讀取i/o口的狀態,那麼都是用定時器實現的。另外再推薦種方法就是利用外部中斷讀取i/o狀態,但外部指春中斷很靈敏,容易受到干擾,在你的電路干擾很小唯銀耐的情況下,建議使用外部中斷,個人感覺外部中搏哪斷很準。

18樓:網友

可以在中斷服務子程式中讀取io腳的狀態。

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

19樓:網友

定時器定時時間到,則自動進入中斷程式,程式程式執行完後又「自動」返回主程式。

由於nn是全域性變數,所以它可以在原來的基礎不斷加1 如此反覆如果你看彙編程式:可知,不同的中斷源有不同的中斷程式入口位址,如定時器0的中斷程式入口位址是000bh,一旦中斷髮生,程式便跳至此處執行,但此處並不是真正的中斷程式,而它又是一條跳轉指令,指向真正的中斷服務程式,中斷程式結束有一條返回語句reti,又回到了中斷之前的主程式中去,主程式每執行完一條指令,都要判斷有無中斷的發生,不需人工乾預。

whlie(1)是個死迴圈,中斷程式跳來跳去,還是在這個小圈子裡。

80c51微控制器定時器中斷問題,單個數碼管間隔1秒一次顯示0到9。(彙編語

20樓:網友

org 0000h

ljmp main

org 000bh

ljmp t0isr

org 0030h

main:mov tmod,#01h

mov th0,#high(65536-50000)mov tl0,#low(65536-50000)setb tr0

setb et0

setb ea

mov r2,#

mov r3,#

sjmp $

t0isr:

clr tr0

mov th0,#high(65536-50000)mov tl0,#low(65536-50000)setb tr0

djnz r2,t0e

mov r2,#

mov dptr,#table

mov a,r3

movc a,@a+dptr

mov p0,a

inc r3

cjne r3,#10,t0e

mov r3,#

t0e:reti

table: ;共陰極數碼管顯示**表db 3fh,06h,5bh,4fh,66h ;01234db 6dh,7dh,07h,7fh,6fh ;56789end

利用微控制器設計59秒計時器,利用51微控制器,4個數碼管設計一個計時器,要求在數碼管上顯示的資料從0開始每1秒鐘加1。

共陽共陰只是你在選com端時給其高低電平的問題無關大雅我給一段pic微控制器的程式讓你參考一下,如果你看懂的話應該能做出來了 include include 此程式實現計時秒錶功能,時鐘顯示範圍00.00 99.99秒,分辨度 0.01秒 unsigned char s0,s1,s2,s3 定義0....

c51微控制器 中斷,c51微控制器如何使用中斷

這個程式是有問題的,第一次中斷時,x先賦值0再加一,x為1,第二次中斷時,又給x賦值0,這樣每次中斷都為1,不可能為2,也就不可能執行到b,建議用全域性變數可以解決這個問題。還有一個問題,一直在執行中斷程式,下一次中斷來臨時,為同級中斷,同級中斷是否能觸發,這個問題要考慮。解決辦法 a和b放在主程式...

微控制器中斷系統工作原理,C51微控制器的中斷系統的結構及其工作原理是什麼

我覺得你應該看看暫存器是怎樣工作的,比如tr0 1 表示定時器中斷 et0 1 表示開啟定時器中斷 es 1 串列埠中斷 ex0 1 外部中斷 ea 1 開啟所有中斷 一般的微控制器書上都有介紹的,而且使用的時候也是比較簡單,直接在程式裡給暫存器寫值就可以了!中斷有硬中斷與軟中斷。中斷有優先度之分,...