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