avr微控制器彙編程式設計時建議在不使用的中斷向量出放置中斷返回指令RETI,我不明白有什麼意義

時間 2021-08-30 09:55:54

1樓:匿名使用者

意思就是說,如果微控制器在執行中被幹擾了,程式跳轉到你沒有使用的中斷向量的位置上。比如現在你寫一個程式,外部中斷0(int0)這個中斷你並沒有使用,實際上你根本就不用去理它了。比如微控制器的復位地址為$000,中斷0向量int0地址是$002,程式就是應該是這樣

.org $000 ;復位

rjmp reset ;跳轉

.org $02a ;$000—$02a都是中斷向量地址這裡就開始了正常的程式了。

正常情況下因為你沒有使用中斷0,它地址的$001,因為.org $02a已經跳過去了。又因為你沒有使用這個中斷,它是不會跑到$001的。

但是實際上由於各種干擾的存在,就算你沒有使用這個中斷,也不可能說微控制器不會被誤觸發進入中斷0。這樣被幹擾後它進入了中斷0地址$001開始執行,問題是你沒有指令讓它退出,它就直接往下跑,跑到$02a,如何就相當復位了。所以就算你沒用它,也要在它的地址上放個退出指令,就算誤觸發,它進入中斷馬上就退出。

不會讓程式跑亂。

2樓:匿名使用者

1,比如你程式裡開了不小心開了int0的上升沿中斷,既然是不小心那就沒有對應的中斷處理**,即中斷向量表裡int0沒有正確的跳轉**。

那如果發生int0上升沿 ,cpu就會去跳轉到相應的中斷向量表去執行,如果裡面是reti的話就直接退出中斷了,如果是jmp指令則跳到相應的中斷處理程式,如果什麼也不是,那就執行亂了。

2,那是程式中的疏忽,小心一點就可以避免,但微控制器執行環境有的很惡劣,有能就自己執行過去了。

所以有必要太填寫reti,或寫jmp reset 看情況而定了

微控制器組合語言指令中中斷返回指令ret和reti有什麼不同?

3樓:匿名使用者

reti 是中斷返回指令;

ret 是子程式返回指令;

reti比ret多一步清除中斷優先順序狀態位,讓同級別的中斷有機會得到響應。

中斷指令「reti」做為中斷跳出指令除了將堆疊中儲存著的地址取出,送回pc;使程式從主程式的中斷處繼續往下執行的作用外,還有將「優先順序生效」觸發器清零的功能。

4樓:做而論道

ret 是子程式返回指令。

reti 是中斷服務程式返回指令。

兩者,用途不同。

5樓:匿名使用者

ret是子程式返回指令,返回到呼叫該子程式處的下一條指令執行,返回的地址是從ret執行前的sp中最後兩個值。

reti是中斷服務程式返回指令,返回到進入中斷服務的斷點處執行,返回的地址是從reti執行前的sp中最後兩個值。

6樓:匿名使用者

ret是普通子程式的返回指令,而不能用reti,所以,ret不是中斷返回指令,就是子程式返回指令。

而reti是用在中斷子程式的返回指令,必須用這個,這才叫中為返回指令,而不能用ret,這就是區別。

7樓:匿名使用者

ret是子程式返回指令,將堆疊中的地址彈出,而reti是中斷返回指令,除了將地址彈出,還將標誌彈出

微控制器中子程式和中斷服務程式有何異同?為什麼子程式返回指令ret和中斷返回指令reti不能相互替代?

微控制器組合語言reti的用法

8樓:匿名使用者

微控制器組合語言中,reti指令用於從中斷程式中返回。用法只有一個,就是放在中斷服務程式的最後,實現從中斷程式中返回。示例如下:

;定時器1中斷服務程式;

t1int: push psw ;保護現場push acc ;

;mov th1,#0eeh ;重新整理速率200/4=50qt1: pop acc ;恢復現場pop psw ;

reti ;;

9樓:頹廢_小胖

reti指令可以返回到任何一條指令上,當中斷髮生時,自動將斷點入口入棧,於是最後使用reti就可以返回到程式斷點處,繼續執行下面的指令。

10樓:匿名使用者

reti只能用於中斷返回。在**發生中斷,就返回到**。子程式返回要用ret就可以了

11樓:**飄渺迷人

就返回到( sjmp $;等待!! )這條指令這裡.

微控制器彙編指令中reti和ret的區別

12樓:火虎

1、方式不同

當某一中斷源響應後,微控制器中的reti將會自動置位,用於阻止比它低階內或同級的中斷觸容發。reti可以清除「優先順序啟用觸發器」(即flag暫存器),以保證後續中斷源的及時響應。

所以,當把reti替換為ret後,該程式在第一次執行時可能不會出錯,但在第二次執行時就會出錯了。

2、過程不同

ret是從子程式返回,返回到lcall或acall指令下一條指令處繼續執行程式。reti是從中斷服務子程式返回,返回到中斷時的斷點處繼續執行程式,斷點未知。

13樓:匿名使用者

ret是從子程式返回,返回到lcall或acall指令下一條指令處繼續執行程式。

reti是從中斷服務子程式返回,返回到中斷時的斷點處繼續執行程式,斷點未知。

mcs51微控制器,中斷服務程式的返回指令和子程式的返回指令有什麼區別?是多少?

14樓:

中斷服務程式的返回指令 彙編助記符 reti 機器指令 32h

子程式的返回指令 彙編助記符 ret 機器指令 22h

15樓:馬洋陌越

ret用於

一般程式的返回

reti用於中斷函式的返回

以上是一般微控制器書籍簡紹的,然而在實際應用中,我發現,在程式返回中一樣可以使用reti,而在中斷返回中卻無法使用ret,究其原因是因為reti比ret多做一件事情就是將「優先順序生效」觸發器清零

原來在8051構架中--中斷系統中含有兩個不可定址的「優先順序生效」觸發器。一個用於指出cpu是否正在執行高優先順序的中斷服務程式,這個觸發器為1時,系統將遮蔽所有的中斷請求;另一個則指出cpu是否正在執行低優先順序中斷服務程式,該觸發器為1時,將阻止除高優先順序以外的一切中斷請求。由此可見,若要響應同級甚至是低階中斷請求,必須使得該「優先順序生效」觸發器清零。

但該觸發器又是不可定址的,所以無法用軟體直接清零。」

微控制器組合語言程式設計,全國微控制器組合語言程式設計師

org 0000h main mov dptr,3000h clr r0 clr r1 clr r2 mov r3,100 loop mov a,dptr clr c cjne a,0h,loop1 inc r0 djnz r3,loop loop1 rl a jc fushu inc r1 djn...

微控制器彙編程式出錯

圖太不清晰了 問題可能在p0口的上拉電阻上 過小了 執行時暫停下,看p0口的邏輯電平。再一個就是檢查 網路標號了 低階錯誤 ls,對此程式而言,好像延時沒有必要!程式,我看沒問題,就看你電路的連線了。我proteus剛關掉,我就不試了,關注該問題進展。怎麼沒見你寫對數碼管的選址指令啊?數碼管顯示一位...

微控制器大神請進,51微控制器彙編程式,程式可發至

生活如歌 1 p1口做輸出口,編寫程式,使p1口接的8個發光二極體l1 l8按16進位制加一方式點亮發光二極體。程式如下 org 0540h ha1s mov a,00h a初值為0 ha1s1 jb p3.3,ha1s1 如果p3.3為1則等待 有脈衝變0一次 mov r2,20h r2賦值為20...