您現在的位置是:首頁 > 運動
跟電師傅學微控制器(17):微控制器控制轉移指令圖文講解2
程式轉移的範圍是什麼意思
上節介紹了微控制器無條件轉移指令(4條),本節繼續講解微控制器控制轉移類指令。
下面介紹有條件轉移指令(8條):指令先判斷後轉移
有條件轉移指令,也稱為條件轉移指令:是指令要滿足一定條件才轉移。滿足條件時,程式轉移到程式計數器PC當前值和指令給出的相對地址 rel偏移量相加後得到新的PC地址處執行;當條件不滿足時,程式就順序執行下一條指令。
條件轉移指令共同特點:都是微控制器相對轉移指令,都有偏移量rel,都是相對轉移,轉移範圍較小。
注意:
rel偏移量範圍:-128~+127位元組內,即範圍是256個單元。
因此條件轉移指令的轉移範圍較小,如果要實現64K範圍內的轉移,可以用前面學習的長轉移指令:LJMP addr16來實現。
指令判斷轉移示意圖
一:累加器A判0轉移指令(2條)
累加器A判0轉移指令表
PC:是微控制器程式計數器,程式從哪裡執行,完全由程式計數器PC裡的內容決定,始終是指定下一條將要執行指令的地址(是16位地址),微控制器系統上電或復位時,PC的初始值為0000H。
PCPC+rel;程式計數器PC中下一條指令的地址加1個偏移量(rel)構成一個新的地址再送到PC(新的PC地址),程式正常情況是接著執行下一條指令,但在這裡因為改變了PC值,執行完這條指令後就轉移到新的PC地址處執行。
凡是轉移指令,都是透過改變程式計數器PC值來實現指令轉移功能。
JZ rel;
指令功能:累加器A=0 PCPC+rel ;累加器A中的內容全為0,則程式轉移到程式計數器PC當前值和指令給出的rel偏移量相加後得到新的PC地址處執行。
累加器A≠0 或 累加器A=1;程式順序執行。
JNZ rel;
指令功能:累加器A≠0或累加器A=1 PCPC+rel ;累加器A中的內容不全為0,則程式轉移到PC當前值和指令給出的rel偏移量相加後得到新的PC地址處執行。
累加器A=0;程式順序執行。
上面兩條指令產生的轉移條件分別是累加器A的內容為0和不為0。
注意:
在程式執行過程中,不改變累加器A中的內容,不影響微控制器標誌暫存器PSW中任何標誌位。
二:減1非0轉移指令(2條)
減1非0轉移指令表
DJNZ Rn,rel;
指令功能:將暫存器Rn中的內容減1後,如果微控制器暫存器Rn≠0,則程式轉移到程式計數器PC當前值和指令給出的rel偏移量相加後得到新的PC地址處執行。
DJNZ direct,rel;
指令功能:將直接地址direct中的內容減1後,如果direct≠0,則程式轉移到程式計數器PC當前值和指令給出的rel偏移量相加後得到新的PC地址處執行。
三:比較轉移指令(4條)
比較轉移指令表
CJNE A,#data,rel;
指令功能:將微控制器累加器A中的內容與立即數data比較,如果不相等:A ≠ #data,則程式轉移到程式計數器PC當前值和指令給出的rel偏移量相加後得到新的PC地址處執行。
CJNE Rn,#data,rel;
指令功能:將微控制器暫存器Rn中的內容與立即數data比較,如果不相等:Rn ≠ #data,則程式轉移到程式計數器PC當前值和指令給出的rel偏移量相加後得到新的PC地址處執行。
CJNE @Ri,#data,rel; Ri=R0 R1
指令功能:找到微控制器暫存器Ri中存放的地址,根據這個地址找到裡面的內容與立即數data比較,如果不相等:(Ri)≠#data,則程式轉移到程式計數器PC當前值和指令給出的rel偏移量相加後得到新的PC地址處執行。
CJNE A,direct,rel;
指令功能:將微控制器累加器A中的內容與直接地址direct裡面的內容比較,如果不相等:A≠(direct),則程式轉移到程式計數器PC當前值和指令給出的rel偏移量相加後得到新的PC地址處執行。
推薦文章
- 農夫山泉,真能“甜”得過茅臺和可口可樂?
李政雲也向虎嗅分析認為,其最終選擇上市的原因之一還是為了拓展海外市場:“目前農夫山泉在國內飲用水市場已經連續多年全國第一,行業內競爭也比較白熱化,各大巨頭間的競爭激烈,它在國內開拓空間是比較有限的...
- 雷佳音,再也不用羨慕胡歌了
現在,雷佳音不用再去羨慕胡歌了,不只是因為事業起來了,更重要的是形成了自己作為演員的核心競爭力和價值...
- 「湖南名刊大刊」擷英大文史 激揚主旋律——記湖南省政協機關刊《文史博覽》
2017年5月,《文史博覽》圍繞“我省歷史建築保護與利用”主題,組織高校青年學子開展長達4個月的“尋找身邊古建築”活動,團隊深入永州、懷化、郴州、邵陽等地,外圍透過網易直播參與的人數超過200萬...