㈠ 單片機中的AJMP LJMP SJMP JMP有什麼區別
1、位元組不同
SJMP 如果跳轉到的標號地址距離當前PC所指的地址小於256位元組,用SJMP。
AJMP 如果跳轉到的標號地址距離當前PC所指的地址小於2K位元組,用AJMP。
LJMP 如果跳轉到的標號地址距離當前PC所指的地址小於64K位元組,用LJMP。
ACALL是調用的子程序入口地址距離當前PC所指地址需介於0~2K,LCALL是0~64K。
2、跳轉的范圍不一樣。
AJMP 的范圍是11位地址,也就是2K的空間內,佔用存儲空間2個位元組,執行周期24個時鍾周。
LJMP 的范圍是16位地址,也就是64K的空間內,佔用存儲空間3個位元組,執行周期24個時鍾周期。
SJMP 的范圍是8位地址,也就是256BIT的空間內,佔用存儲空間2個位元組,執行周期24個時鍾周期。
JMP一般配合DPTR使用,存儲空間1個位元組,執行周期24個時鍾周期。一般用於多分枝選擇的時候使用,比如按鍵處理。
ACALL,LCALL和以上說明類似,是調用指令,ACALL佔用存儲空間2個位元組,執行周期24個時鍾周期。LCALL佔用存儲空間3個位元組,執行周期24個時鍾周期。
(1)單片機ajmp擴展閱讀:
①短程轉移(直接短轉移)
指令格式:JMP SHORT OPRD
語法格式: JMP 地址標號 ;(IP)←(IP)+8位位移量
指令功能:OPRD為轉移地址的標號,指令中的SHORT規定了OPRD為有符號的8位二進制數,OPRD為轉移地址的偏移量。該指令將程序執行的順序轉移到由(IP)+OPRD形成的新的程序執行的目標地址,從而實現程序的轉移。
轉移的目標地址OPRD在指令中可以直接使用標號地址,但要求轉移的目標地址的范圍只能在JMP指令所處地址的-128~+127位元組范圍之內,如超出該范圍,匯編時出錯。
② 近程轉移(段內直接轉移)
指令格式:JMP NEAR PTR OPRD
語法格式: JMP 地址標號 ;(IP)←(IP)+16位位移量
指令功能:與短程轉移的功能和要求相同,不同之處是近程轉移的OPRD為有符號的16位二進制數,指令將程序執行的順序轉移到由(IP)+OPRD形成的新的程序執行的目標地址。
轉移的目標地址的范圍只能在JMP指令所處地址的-32768~+32767位元組范圍之內,如超出該范圍,匯編時出錯。使用該指令時NEAR可省略
③段間直接轉移(遠程轉移)
指令格式:JMP FAR PTR OPRD
語法格式: JMP 地址標號 ;(IP)←新的偏移地址, ;(CS)←新的代碼段地址
指令功能:指令中用FAR PTR規定了該指令為段間的轉移,OPRD為目的地址的標號,目的地址與JMP指令所在地址不在同一段內。執行該指令時要修改CS和IP的內容,將OPRD所在段的段地址送CS中,OPRD的段內偏移地址送IP中。
④ 段內間接轉移
指令格式:JMP WORD PTR OPRD
語法格式:JMP reg16/mem ;(IP)←新的偏移地址
指令功能:與短程轉移的功能和要求相同,不同之處是段內間接轉移的OPRD 可以是除立即數外的任何寄存或存儲器定址方式,轉移的目標地址由OPRD的內容確定。
⑤ 段間間接轉移
指令格式:JMP DWORD PTR OPRD
語法格式:JMP mem32
指令功能:指令中用DWORD PTR規定了該指令為段間間接轉移,OPRD只能是存儲器定址方式。執行該指令時將定址到的內存單元的第一個字送入IP中,第二個字送入CS中。
㈡ 單片機AJMP有什麼用
類似的無條件轉移指令共有三條:LJMP、AJMP和SJMP。
LJMP轉移的范圍最大,可達64K,但是其指令為三個位元組。
AJMP轉移的范圍稍小,只有2K,但是其指令為兩個位元組。
多年前,單片機的ROM的容量小,外接晶元價格也很貴,AJMP就較受青睞;
目前,ROM容量已經不算什麼問題,編程時,用了多少位元組,多數情況下都不用考慮。所以,AJMP指令的優點,就不被人看重了。
現在,AJMP幾乎就沒有什麼必要使用了,完全可以用LJMP代替。
㈢ 單片機AJMP指令和LJMP指令有何區別
區別如下:
1、定義不同。
AJMP是無條件跳轉指令之一,叫做絕對跳轉。而LJMP則是長轉移指令。如果一個程序代碼在2KB以內(是指編譯後的BIN代碼),可以用AJMP指令。如果一個程序代碼超過了2KB,就要用LJMP指令了。
2、范圍不同。
AJMP 跳轉的范圍是2KB之內的,就是AJMP指令和跳轉的目的地址在ROM中的同一個2KB范圍內。
LJMP 跳轉的范圍是64KB全部的ROM存儲區。
3、使用功能不同。
AJMP主要是用來改變程序執行的路線,到需要的指令或程序去執行。ljmp長轉移指令的功能是:把指令碼中的目標地址addr16裝入程序計數器PC,使機器執行下一條指令時無條件轉移到addr16處執行程序,不影響任何標志。
㈣ 單片機AJMP的問題
ROUT0123
什麼的是個標號,隨便放在哪都可以的.
這段程序的意思是程序跳轉到離TABLE標號偏移為A的地方繼續執行,
下邊的TABLE標號那裡是一連串的跳轉語句,每個語句兩位元組,所以編譯後AJMP
ROUT1、AJMP
ROUT2、AJMP
ROUT3是連續的六個位元組。
要用JMP
@A+DPTR跳轉到AJMP
ROUT2,A要先賦值為02H,
跳轉到AJMP
ROUT3,A就得是04H,以此類推。
㈤ MCS51單片機AJMP指令執行後PC的值如何計算
AJMP 佔用2個位元組,所以如果你問的是 AJMP後面一行的指令PC的話,就是當前值+2.
㈥ 單片機知識,執行AJMP DR後,PC的內容是什麼
(1)8051單片機指令系統中有長跳轉LJMP,長調用LCALL指令、短跳轉AJMP,短調用ACALL指令區別?
在實際應用中,可從定址范圍和指令長度兩個方面來選擇長跳轉指令LJMP和短跳轉指令AJMP、長調用指令LCALL和短調用指令ACALL。
長跳轉LJMP在64KB范圍內轉移,而短跳轉AJMP只能在2KB空間轉移。
長調用LCALL調用位於64KB程序空間的子程序,而短調用ACALL調用位於2KB程序空間范圍的子程序。
AJMP、ACALL指令代碼長度為2個位元組;LJMP、LCALL指令代碼長度為3個位元組。
http://www.dpj100.com/ling/20090903427.html
(2)中斷返回與子程序返回的相同點與區別點
調用中斷服務子程序和調用子程序時都會把當前偏移地址的下一地址壓棧,
相同點:
從堆棧中彈出由調用指令壓入堆棧保護的斷點地址,並送入指令計數器pc,函數返回到斷點處繼續執行;
區別點:
調用子程序的返回指令是RET,中斷服務子程序返回指令時RETI,
RET不影響標志位,但RETI會清除內部相應的中斷狀態寄存器。
http://..com/question/81215113
(3)編寫中斷函數應該注意的幾點
兩個相鄰中斷服務程序的入口地址相距只有8個位元組,一般的中斷服務子程序是放不下的,應該放在其它位置,使用LJMP/AJMP跳轉調用。
硬體LCALL調用,只是將PC內的斷點地址壓入堆棧保護,所以要保護現場(對其他寄存器(程序狀態字寄存器PSW、累加器A等)的內容作保存)。
(4)單片機晶振的兩個電容的作用
這兩個電容叫晶振的負載電容,分別接在晶振的兩個腳上和對地的電容,一般在幾十皮發。它會影響到晶振的諧振頻率和輸出幅度,
晶振與兩個電容一起構成一個電容三點式振盪器,晶體旁邊的兩個電容接地, 實際上就是電容三點式電路的分壓電容,當兩個電容量相等時, 反饋系數是 0.5, 滿足振盪條件。
㈦ 單片機語句AJMP $
"$"代表了 當前行的偏移量
就好像 HERE:AJMP HERE
但是你寫AJMP $
效果也是一樣
就是一直停留在那一行
㈧ 51單片機的匯編指令中AJMP 和SJMP都是兩個位元組,都是兩個機器周期,它們有什麼區別呢
AJMP是短轉移指令。其轉移范圍為當前指令地址高5位相同的2K范圍。
SJMP為相對轉移指令。其轉移范圍為當前指令地址-128~+127范圍。
㈨ 單片機80c51編程AJMP MAIN
中斷是由硬體跳轉的,也就是說如果你配置好了相應的中斷並且產生了中斷事件,那麼單片機就會將PC值跳轉到對應的中斷矢量入口。之後就會從入口處跳轉到相應的中斷服務程序了。
例如在你這個常式裡面,當定時器0中斷事件產生以後,不管你的主程序願意不願意,都會直接蹦到000Bh入口,並且執行AJMP INQP,跳轉到T0中斷的服務程序執行,並且在執行RETI後才會回到被打斷的主程序位置。
㈩ 單片機程序中程序結尾AJMP $是什麼意思
跳轉到本行,就是一個死循環,使程序停在這里。
$是一個(也是唯一一個)不需要定義的地址標號,代表當前行命令的地址。
不過SJMP $用得更多。