MSC 51微控制器指令中的查表問題

2021-09-06 09:14:54 字數 1923 閱讀 1224

1樓:

我的分析不一定對,僅供參考。

基本思路是從r2r3處取偏移量,乘以2(每個資料為2個位元組)通過a加給dptr,r2加給dpl,r3加給dph,再從dptr處取數,交給a,再給r2r3.

mov dptr,#tab 表的首地址給dptr

mov a,r3 r3的值給a

clr c c置零

rlc a a乘2(左移一位後補零)

xch a,r2 a和r2交換數值

rlc a a左移一位,即乘2

xch a,r2 a和r2交換。至此,相當於r3乘2後給了r2,r2裡存的是r3.乘2後的數,a裡是r2乘2後的數。

add a,dpl dpl的值加給a

mov dpl,a;調整dpl,dph 相當於把原r2裡的數乘2當做偏移地址加給dpl

mov a,dph

addc a,r2

mov dph,a 相當於把原r3裡的數乘2當做偏移地址加給dph

clr a

movc a,@a+dptr;查表

mov r2,a;第一位元組

clr a

inc dptr

movc a,@a+dptr;查第二位元組

mov r3,a

rettab: dw ***xh;共1024個資料項

dw ***xh

......

dw ***xh

因為查表的數字是雙位元組,所以低位給r2,高位給r3.

2樓:匿名使用者

查表程式是要從一個專門的資料區內找到你所需要的那個數。這個數在表中的位置,由表首地址、數在表內相對錶首地址的偏移量、一個資料的位元組數等因素來確定。

具體方法是:將表首地址放入dptr中,偏移量放入a中,用查表指令movc a,@a+dptr;來完成從資料區取數。有如下幾種情況:

1、如果資料區的長度不超過256個位元組(累加器a的容量之內),且資料是單位元組的,則不需要另外處理;

2、因為如果資料區的長度不超過256個位元組,但資料是雙位元組的,需要將偏移量乘2,第一次讀出一個位元組儲存,將地址加1後再讀第二位元組(類推:一個資料是n位元組,則偏移量乘n,每次讀出一個位元組儲存,將地址加1後再讀下一位元組,直到一個數全部讀出)。

3、如果資料區的長度超過了256個位元組,因為a已經存放不了256以上的偏移量,此時需要事先將偏移量加入到dptr中去(即資料的真實地址全部放到dptr中了),再將a清零後使用查表指令。同樣也要如上區分單位元組數和多位元組數。

你所給例就是資料區的長度超過了256個位元組,且資料為雙位元組的情況。程式解釋如下,供參考。

mov dptr,#tab ;表首地址入dptr

mov a,r3

clr c

rlc a ;偏移量的低8位乘2在a中,移出的最高位在c中

xch a,r2 ;乘2後的偏移量的低8入r2中,偏移量的高8位入a中

rlc a;偏移量的高8位乘2在a中

xch a,r2 ;偏移量的高低位元組歸位,至此完成了偏移量乘2

add a,dpl

mov dpl,a;

mov a,dph

addc a,r2

mov dph,a;將偏移量加到dptr中,至此dptr中就是資料第一個位元組的實際地址

clr a ;a清零,因為偏移量已經加入,dptr內容不需要再修正。

movc a,@a+dptr;讀資料第一個位元組

mov r2,a;讀資料第一個位元組存入r2中

clr a ;a清零

inc dptr ;地址加「1」,準備讀下一個位元組

movc a,@a+dptr

mov r3,a 讀資料第一個位元組存入r3中

rettab: dw ***xh;tab為表首地址,共1024個雙位元組資料項,共2048個位元組

dw ***xh

......

dw ***xh

微控制器加法指令只怎麼執行的,51微控制器的加法指令到底怎麼加啊,例如12A4H 0FE7H

a,30h是將30h記憶體中數加a放到a的儲存單元。84h 8dh,d是13,加4為17,0到15即0到f這16個數,結果為1,進位標誌c為有效,然後加進8 8 c 17,還是保留1並進位,所以最後是11h。psw是微控制器內部標誌暫存器,是微控制器執行必不可少的基本運算基礎,cy是進位標誌,是位元...

微控制器查表程式設計的思路,微控制器查表程式編寫 急!

a 秒十位指標 mov dptr,tab 資料表頭地址送dptrmovc a,a dptr 讀取資料表中相應的資料 秒十位 clr p1.0 p1.0 清零 秒十位標誌位 mov p0,a 顯示妙計數的十位 秒十位由p0口輸出 lcall delay 調延時子程式 setb p1.0 p1.0 置1...

微控制器RET指令怎麼執行,在微控制器中,RET和RETI分別是什麼返回指令

往堆疊中寫入暫存器地址,修改堆疊指標指向這個地址,然後ret就跳到所需的地址去 子程式執行完後,返回被呼叫地方 的指令。在中斷中返回應用reti ret,子bai 程式返回指令 把棧頂的內 du容送到pc暫存器中zhi,不影響標dao志 通常用在回acall或lcall呼叫子程式的答末尾。sp pc...