51微控制器兩個中斷執行之後跳不出來

時間 2022-07-05 22:40:06

1樓:

主要問題在於現場保護做的不完整,漏掉了對r0 r1 r2的保護,程式修改如下,已除錯通過。

org 0000h

sjmp main

org 0003h

ajmp int2;int0_isr

org 0013h

ajmp int3;int1_isr

org 0030h

main:

setb ex0

setb ex1

setb ea

setb px0    ;將外部中斷0設定為高階中斷setb it0    ;外部中斷0引腳負跳變有效; clr it0  ;外部中斷0低電平有效,將ie0置1,否則將ie0清零。

mov a,#0feh ;1111 1110loop:

setb 20h.0

mov p0,a

rl a

acall delay

sjmp loop

int3:

push psw

push acc

push 00h;push r0;【增加】push 01h;push r1;【增加】push 02h;push r2;【增加】; mov r0,a;【去掉】

mov a,#7fh

loop1:

mov p1,a

rr a

acall delay

jb 20h.0,loop1

pop 02h;pop r2;【增加】

pop 01h;pop r1;【增加】

pop 00h;pop r0;【增加】

pop acc

pop psw

reti

int2:

push psw

push acc

push 00h;push r0;【增加】push 01h;push r1;【增加】push 02h;push r2 ;【增加】clr 20h.0

jnb p3.2,$     ;等待int0恢復高電平(按鍵彈起)pop 02h;pop r2;【增加】

pop 01h;pop r1;【增加】

pop 00h;pop r0;【增加】

pop acc

pop psw

reti

delay:

mov r0,#5

del1:

mov r1,#250

del2:

mov r2,#250

djnz r2,$

djnz r1,del2

djnz r0,del1

retend

2樓:匿名使用者

程式挺亂的 再多看看書 再重寫一下 這個程式並不複雜 會成功的

如果都告訴你了還練什麼

51微控制器,有關中斷問題,為什麼進入不了第二個中斷,而是一直執行第一個中斷的程式而已 5

3樓:du知道君

mov tmod,#31h,mov ie,92h,應是立即數 這兩條指令錯了,定時器t1沒有方式3,只有t0才有的。t0工作在方式1,t1工作在方式2就可以了,改成:mov tmod,#21h,t1,t0都允許中斷,則ei=8ah,改成:

mov ie,#8ah。 還有: brt1:

clr ea cpl p2.0 mov th1,0ffh ,應是#0ffh,是立即數 mov tl1,#0ech setb ea

51微控制器中斷怎麼跳出去繼續執行主程式的問題

4樓:無畏無知者

中斷函式執行完成退出後,便自動返回主程式繼續下一個指令的執行的;

在中斷函式裡,不要做太多的事情,更不要有延時函式,除非其延時值比中斷間隙要小,否則中斷會亂套的;

51微控制器怎麼同時開啟兩個中斷的問題?

5樓:朝霞英語

高優先順序中斷執行過程中低的不能執行。

中斷使能,中斷允許即此中斷已開啟。但cpu不可以同時執行兩個中斷。所以中斷分優先順序。

要優先於高階中斷,再開低階中斷。

當系統有個定時中斷。比如定時採集溫度值,然後通過串列埠傳送到上位機。這樣程式裡要用到定時中斷和串列埠中斷。

處理了定時中斷後,再處理的串列埠中斷。

6樓:匿名使用者

中斷使能,中斷允許即此中斷已開啟。但cpu不可以同時執行兩個中斷。所以中斷分優先順序。

7樓:向廣川

一箇中斷怎麼寫,第二個中斷就怎麼寫啊!!只是要注意兩個中斷不能同時響應!!所以要注意一下就好了

51微控制器,外部中斷一直迴圈跳不出來

8樓:匿名使用者

你可能將外部中斷0初始化成低電平觸發模式了。改為沿觸發就好。it0=1;

9樓:匿名使用者

main函式前要將p3^2和p1^4置1了嗎?

10樓:似水流年丶

解決了嗎 我也遇到這個問題了

請問51微控制器能不能暫停中斷程式並跳轉至其它程式中、執行完後跳回中斷繼續執行中斷

11樓:匿名使用者

嚴格說起來,從中斷程式跳轉到其他程式執行一段時間,然後再返回中斷,這個專是可以做到的。屬

實事上,嵌入式的作業系統的時間片輪轉,就是用定時中斷,進入定時中斷判斷並切換上下文,切換到別的任務,執行一段時間再返回原來的流程繼續執行。

但請注意,正常設計程式時,不要這麼做。

如果遇到程式中需要用到這種流程控制,有兩個辦法,重新設計流程,

使用嵌入式作業系統。

12樓:匿名使用者

高一級別的中斷可以中斷低一級別的中斷,執行完後再跳回到低階中斷中執行

有個問題,51微控制器中外部中斷採用跳沿觸發方式,為什麼中斷執行完後得等好長時間主程式才開始恢復執行

13樓:落漠so漠落

因為你的中斷程式執行的時間太長了吧!如果是大量的工作最好不要寫在中斷程式中內

執行,那樣容

容易丟失中斷事件!還有就是雖然用的是跳變沿出發,但是觸發一次就要執行一次中斷程式,結束之後才回到主程式的!希望可以幫到你

14樓:天天想你

額。。。。問題是你的主程式是不是包含一個死迴圈,如果沒有的話,主程式會預設的往後執行,在儲存空間裡有很大的一部分空間你沒有放**,可是程式還是去執行,等執行完之後 才會從地址0開始執行

15樓:匿名使用者

得看看你程式才行,這樣不好說

51微控制器寫個程式,好像在中斷裡面出不來了,主程式只執行了一部分,之後一直在中斷裡面執行

16樓:如此簡單

跟我之來前一樣,對中斷,定源

時器瞭解的不夠透徹,被老師訓了之後查資料搞實驗後終於搞清楚了,下面說說我的看法:千萬不要在中斷函式中做多餘的事!!!只能做最基本的操作,比如置標誌位,讓一個數加一等,與延時有關的操作千萬不要做!

你10ms進一次中斷,在裡面又掃描按鍵,又顯示液晶,這裡面花的時間遠遠地超過10ms,它肯定死在中斷裡出不來啊,因為你不關閉中斷的話它一直10ms進去,最好在中斷裡設定幾個標誌位,進中斷就讓標誌位置1,然後出中斷,在主迴圈裡判斷標誌位,如果標誌位置1了,就清零標誌位,然後做其他的動作。好好想一想,思路一定要清晰!

17樓:匿名使用者

如果真如你所說,那麼問題出在keyscan()函式。

18樓:雪芃長流如

開中斷以後,在中斷服務子程式中設定一箇中斷次數計數器,統計達到2次後

中斷次數計數器清0,然後再把莫暫存器加一。

微控制器中斷的意思,51微控制器外部中斷到底什麼意思?

八哥說科技 中斷就是指處理機執行過程中,出現某些意外情況需主機干預時,機器能自動停止正在執行的程式並轉入處理新情況的程式,處理完畢後又返回原被暫停的程式繼續執行。中斷就是微控制器處理任務a時,發生了觸發中斷的條件停下來執行另一個任務b,觸發中斷的條件就屬於中斷源,任務b就是中斷任務 中斷服務函式 當...

51微控制器串列埠通訊中斷的問題,51微控制器串列埠通訊問題

肯定不會執行while ti 0 下面的程式的,因為你的中斷開著,程式跳到中斷服務程式裡面了,然後中斷處理結束了之後,ti自動清零了,所以一直在while ti 0 無限迴圈。程式裡面,既然開通了中斷功能,那你就一直使用中斷功能,為什麼你還要使用查詢功能呢?甚至有時把中斷給禁止了,這裡面容易出現問題...

MCS 51微控制器的中斷問題,MCS 51微控制器問題?

中斷系統中有兩個 使用者不能使用的 優先順序狀態觸發器 其中一個,置1時,表示正在執行高優先順序的中斷,遮蔽所有中斷請求 還有一個,置1時,表示正在執行低優先順序的中斷,遮蔽同級中斷請求.明白了吧?其實就是說這兩個觸發器,是使用者無法訪問到的,是內建且自動賦值的.一旦有高優先順序的中斷執行了,第一個...