控制轉移指令用于控制程序的流向,所控制的范圍即為程序存儲器區(qū)間,MCS-51系列單片機的控制轉移指令相對豐富,有可對64kB程序空間地址單元進行訪問的長調用、長轉移指令,也有可對2kB字節(jié)進行訪問的絕對調用和絕對轉移指令,還有在一頁范圍內短相對轉移及其它無條件轉移指令,這些指令的執(zhí)行一般都不會對標志位有影響。
[1]. 無條件轉移指令(4條)
這組指令執(zhí)行完后,程序就會無條件轉移到指令所指向的地址上去。長轉移指令訪問的程序存儲器空間為16地址64kB,絕對轉移指令訪問的程序存儲器空間為11位地址2kB空間。
LJMP addr16 ;addr16→(PC),給程序計數器賦予新值(16位地址)
AJMP addr11 ;(PC)+2→(PC),addr11→(PC10-0)程序計數器賦予新值(11位地址),(PC15-11)不改變
SJMP rel ;(PC)+ 2 + rel→(PC)當前程序計數器先加上2再加上偏移量給程序計數器賦予新值
JMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址單元的值加上數據指針的值給程序計數器賦予新值
這幾條指令,如果要他細分析的話,區(qū)別較大,但初學者時,可以不理會那么多,統(tǒng)統(tǒng)理解成LJMP標號,也就是跳轉到一個標號處,但事實上,JMP標號,在前面的例程中我們已接觸過,并且也知道如何來使用了,AJMP和SJMP也是一樣,那么這幾條指令它們的區(qū)別何在呢?在于跳轉的范圍不一樣。好比跳遠,LJMP一下就能跳64K那么遠(當然近了就更沒關系了)。而AJMP最多只能跳2K距離,而SJMP則最多只能跳256這么遠,原則上,所有用AJMP或SJMP的地方都可以用LJMP來替代。因此在初學者時,需要跳轉時可以全用LJMP。
但是在查表時要注意會出錯,因為他們的機器周期不一樣,取得的數也不一樣。