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

2022-05-26 07:16:41 字數 5734 閱讀 8659

1樓:匿名使用者

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

mov a,12h ;12h單元內容送a(秒個位指標)movc a,@a+dptr ;讀取資料表中相應的資料(秒個位)clr p1.1 ;p1.1 清零(秒個位標誌位)mov p0,a;顯示妙計數的個位 (秒個位由p0口輸出)lcall delay1;延時子程式

setb p1.1 ;p1.1 置1

mov a,21h ;21h單元內容送a(分十位指標)mov dptr,#tab ;資料表頭地址送dptr(此句可以不要)movc a,@a+dptr ;讀取資料表中相應的資料(分十位)clr p1.2 ;p1.2 清零(分十位標誌)mov p0,a;顯示分計數的十位 (分十位由p0口輸出)lcall delay2;調延時子程式

setb p1.2 ;p1.2 置1

mov a,22h ;22h單元內容送a(分個位指標)movc a,@a+dptr ;讀取資料表中相應的資料(分個位)clr p1.3 ;p1.3 清零(分個位標誌)mov p0,a;顯示分計數的個位 (分個位由p0口輸出)lcall delay3;延時子程式

setb p1.3 ;p1.3 置1

mov a,31h ;31h單元內容送a(時十位指標)mov dptr,#tab ;資料表頭地址送dptr(此句可以不要)movc a,@a+dptr ;讀取資料表中相應的資料(時十位)clr p1.4 ;p1.4 清零(時十位標誌)mov p0,a;顯示時計數的十位(時十位指標由p0口輸出)lcall delay4;調延時子程式

setb p1.4 ;p1.4 置1

mov a,32h;32h單元內容送a (時個位指標)movc a,@a+dptr ;讀取資料表中相應的資料(時個位)clr p1.5 ;p1.5 清零(時個位標誌)mov p0,a;顯示時計數的個位 (時個位指標由p0口輸出)lcall delay5;延時子程式

setb p1.5 ;p1.5 置1

lcall cctv ;調子程式cctv

ret ;中斷返回

2樓:匿名使用者

我要改變一個地方的資料,我要怎麼知道其它的哪些地方需要修改呢?這是什麼意思??

查表是已知一個表呀,我們一般是用第一個資料的地址(如陣列的名稱)和偏移量確定要查的資料,搞定偏移量那就看你要查的表的資料是怎麼編排的了(資料的型別和第幾個等)。

不知道我囉嗦這麼多是不是你想要的,呵呵

微控制器查表程式編寫 急!

3樓:做而論道

org 0000h

mov 30h, #1

mov 31h, #3

mov 32h, #5

mov 33h, #7

mov 34h, #9

mov 35h, #2

mov 36h, #4

mov 37h, #6

mov 38h, #8

mov 39h, #10

call sqrt

sjmp $

;查表法求平方的程式如下。

sqrt:

mov r0, #30h

mov r1, #40h

mov r2, #10

loop:

mov a, @r0

add a, #s_tab - ($ + 4)movc a, @a + pc

mov @r1, a

inc r0

inc r1

djnz r2, loop

rets_tab:

db 1, 4, 9, 16, 25, 36, 49, 64, 81, 100;完

4樓:匿名使用者

假設你的表是這樣的 tab:1 4 9 16 25 36 49 64 81 100

可以這樣查,

mov r3,#0ah

mov r0,#30h

mov r1,#40h

xy:mov a,@r0

mov dptr,#tab

mov a,@a+dptr

mov @r1,a

inc r0

inc r1

djnz r3,xy

注意下,那個表是十進位制的數,可以改成十六進位制的,改不改就看你顯示程式是怎麼編的了

5樓:朝酒晚舞

呵呵,網友 jingmingxie 看不懂好賴,就別出來丟人了。

微控制器 查表程式設計

6樓:做而論道

ltb2:

;-------------------下面是r2r3乘以2mov a, r3

clr c

rlc a

mov r3, a

xch a, r2

rlc a

xch r2, a

;------------------下面是表首地址加上r2r3mov dptr, #tab2

add a, dpl ;(r2r3)+(dptr)→(dptr)

mov dpl, a

mov a, dph

addc a, r2

mov dph, a

;------------------下面是查表,查出兩個位元組clr a

movc a, @a + dptr

mov r2,a

clr a

inc dptr

movc a, @a + dptr

mov r3,a

ret----

這個程式,是根據兩個位元組的資料來查表,查出的,也是兩個位元組。

如果先弄懂了一個位元組的查表程式,看這個程式,也就沒有什麼難的了。

51微控制器的查表法 的 原理是 什麼 ?透徹點給解釋下吧!

7樓:幻世萌

查表,其實就是字面上的意思,先用c語言的形式解釋比如用查表法計算平方根,你應該知道用微控制器去求平方根的速度肯定是很慢的,但是當我們只需要求1到9的平方根時,我們可以把1到9的平方根直接儲存在sqrt這個陣列裡,sqrt[1]=1;sqrt[2]=1.414;這樣類推。需要用到那個數的平方根直接sqrt裡面放上那個數就行了,這就是查表了。

這樣速度就會快很多。微控制器查表用的最多的是數碼管的譯碼工作,就是把0-9的數字轉換成對應數碼管的段碼。還有就是一些需要計算的值。

因為微控制器的執行速度問題,為了提高速度常用查表法。如果是彙編其實就是把表放在資料區了,通過地址來查表。原理是一樣的。

希望對你有所幫助。

微控制器查表顯示程式的一個問題!~~~

8樓:做而論道

要想讓數碼管顯示什麼數字,就必須把該數字的七段碼送到段地址。

軟體系統中,還要準備出來全部要顯示的七段碼,然後再根據待顯示的數字,找出對應的七段碼。

下列程式就是完成了這個過程。

.org 0

mov r0,#0 ;待顯示的數字是0

loop:

mov dptr, #8002h ;位地址.

mov a, #1 ;準備用第一位顯示.

movx @dptr, a ;輸出到「位」介面.

mov a, r0 ;取來待顯示的資料,可能是0~9

mov dptr, #tab ;七段碼錶的起始地址.

movc a, @a+dptr ;從表中,找到第0~9個位元組到a

mov dptr, #8004h ;段地址.

movx @dptr, a ;輸出a的內容到「段」介面,即可顯示出0~9的字形.

ljmp loop ;重複.

tab:db 3fh,06h,5bh,4fh,66h

db 6dh,7dh,07h,7fh,6fh

-------------------------------

答:(1)程式是將r7中指定的偏移地址,以tab為首地址,查表後送回到r7中。

(2)r7=39

不知道做得可對?對。

9樓:幽幽梵婀玲

這段**的關鍵指令其實就是片選指令。

mov dptr,#* ;把外部介面的地址碼傳給指標dptr,地址碼通過外部譯碼器轉

;換成片選訊號

movx @dptr,a ;把累加器a的值通過資料匯流排傳遞給dptr指向的外部介面,在

;這段程式中即實現段選和位選功能。

你的這段程式只能顯示數字「0」,下面詳細給你解讀這段程式:

org 0 ;程式**段從地址0開始

mov r0,#0 ;這句**是控制你所要顯示的數字的,它其實是tab表中的偏移

;量,現在偏移量是0,即顯示的是3fh,共陰數碼管段選碼錶示數

;字「0」

loop:mov dptr,#8002h ;位碼地址為8002h,指標指向位選的外部介面,選定一

;個數碼管

mov a,#1

movx @dptr,a ;以上兩句向位選介面傳動資料1,其實是把第一個數碼

;管置高電平,表示選通。

mov a,r0 ;a=ro=0

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

movc a,@a+dptr ;把tab+0地址上的資料傳送給a,@tab+n表示tab表中第

;n+1個資料,在這裡是a=3fh

mov dptr,#8004h ;段碼地址為8004h,指標指向段選的外部介面

movx @dptr,a ;把3fh傳送給段選介面,實現顯示「0」的功能

ljmp loop ;跳到loop處迴圈執行。

tab:db 3fh,06h,5bh,4fh,66h

db 6dh,7dh,07h,7fh,6fh

這樣解釋,你應該會明白的。 o(∩_∩)o

你的補充問題也回答正確。

10樓:匿名使用者

這裡的8004h和8002h都是外部io地址,所以要用movx指令來寫,程式的思路是這樣的:選中位碼地址,寫出1,也就是選中該為,讓該位能夠顯示。然後再選中段碼地址,用查表指令查出想要顯示的段碼寫出去就行了。

思路很簡單,你主要要了解這個問題:外部io地址的讀寫方法!! 寫的方法都是movx @dptr,a,讀movx a ,@dptr,只需給定a的值,以及dptr的值即可,a中是要讀或寫的內容,dptr是地址指標。

在輸出段碼時,是將**資料輸出到指定地址的,用查表指令,dptr做基址,設定為**的首地址,a作為偏移地址,也就是你想要輸出的第幾個資料。ro的值給a了看到吧,作為偏移地址來查詢**,0就查到第一資料,1就查到第二個資料。。。

講的夠詳細吧,還不懂再問吧

答:(1)程式是將r7中指定的偏移地址,以tab為首地址,查表後送回到r7中。

(2)r7=39

不知道做得可對? 對,看來真懂了

ps:樓主真有財啊,這麼簡單的題給這麼多分

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

我的分析不一定對,僅供參考。基本思路是從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乘...

微控制器程式設計對嗎

org 0060h mov r0,40h mov r2,00h mov r3,00h loop mov a,r3 a r3add a,r0 a a r0 mov r3,a r3 ajnc loop1 無進位跳過下一條.inc r2 高位元組 1loop1 inc r0 r0 r0 1 指標 1 cj...

微控制器的種類,微控制器的分類

按微控制器機器字長可分為 4位 很少用 8位,16位,32位按微控制器核心可分為 mcs51 avr pic msp ht arm等等 按微控制器廠家分就更多了,mcs51核心的廠家就有多種 如sst atmel stc winbond等 學習微控制器,電子知識,請到 電子設計網dzsj 種類太多了...