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 種類太多了...