① 單片機編程 建立0~6的立方表,通過查表指令將4的立方送到外部RAM 2000H單元
MOV DPTR,#TAB
MOV A,#4
MOVC A,@A+DPTR
MOV DPTR,#2000H
MOVX @DPTR,A
TAB:DB 00H,01H,08H,1BH,40H,7DH,D8H
② 單片機一道編程題
ORG 0000H
AJMP START
START: MOV P1, #0EFH ;EFH=11101111B,相當於將P1.4的燈點亮
ACALL DELAY ;調用延時程序
MOV P1, #0DFH ;DFH=11011111B,相當於將P1.5的燈點亮
ACALL DELAY
MOV P1, #0BFH ;BFH=10111111B,相當於將P1.6的燈點亮
ACALL DELAY
MOV P1, #7FH ;7FH=01111111B,相當於將P1.7的燈點亮
ACALL DELAY
AJMP START ;返回到START處,構成循環
DELAY: MOV R3, #09H ;1s 延遲
DL3: ACALL DELAY1
DJNZ R3, DL3
RET
DELAY1: MOV R1, #0FFH ;130ms延遲 屬於DELAY的子程序
MOV R2, #0FFH
DL2: DJNZ R2, DL1
DL1: DJNZ R2, DL1
DJNZ R1, DL2
RET
END
這種循環不提倡,不過在這里就簡單了。
特別說明,電路圖畫的時候,是二極體正極接電源,負極接P1.4-P1.7,中間串上220歐姆的電阻。
③ 菜鳥求教,剛學單片機關於查表法求平方的程
查表法,就是將你的一些固定的數據存儲到程序存儲器中,當你的程序中需要這些數據時,movc指令讀取這些數據。舉例假設你的系統要用數碼管顯示0-9這10個數字,而假設這10個數字各自的斷碼(點亮時io口相應的電平)分別為
0xC0, //"0"
0xF9, //"1"
0xA4, //"2"
0xB0, //"3"
0x99, //"4"
0x92, //"5"
0x82, //"6"
0xF8, //"7"
0x80, //"8"
0x90, //"9"
你有兩種方法存儲這時個數據,一種是在數據區用十個位元組存儲這些數據(數據常量),但這會佔用你的數據存儲器空間。另外一種方法就是把這些不變的數放到程序空間中,到需要的時候到程序空間中讀取,這便是查表。也就是在程序空間中建立一個表,假設你需要就9這個數值的斷碼,就去表中查看一下9對應的數據。
④ 單片機編寫查表程序求十進制數0-99的立方
//查表法
u32 code tab[]={0,1*1*1,2*2*2,3*3*3,4*4*4,....99*99*99};//表格自建
u32 js(u8 a)
{
if(a<=99)
{
return tab[a];
}
else
{
return 0xffff;
}
}
//非查表法
u32 js(u8 a)
{
return (a*a*a);
}
//非查表法,算乘方(算a的b次方)
float js(u8 a,u8 b)
{
float value;
value=1;
while(b>0)
{
value*=a;
b--;
}
return value;
}
⑤ 單片機查表程序
DEC A
因為要用自然數作為表的偏移,而自然數是從1開始的、表格偏移是從0開始的,所以當然要減1咯。例如要查2的平方,實際就是要查找表格偏移+1的元素。
RL A
因為表格每個元素是兩個位元組,所以偏移地址要乘以2。還是以查2的平方為例,它對應於表格偏移+1的元素,但因為每個元素佔用2個位元組,所以地址偏移量實際是(+1)×2 = +2h。
⑥ 匯編語言裡面的查表法是什麼意思啊。在單片機裡面是怎麼運行的啊~~~~
51單片機匯編語言有一條查表指令是:MOVC A, @A+DPTR
它不是單獨使用的,要和 DB 偽指令配套使用。
例如:若累加器A中有一個0~9的數,請用查表法求出該數的平方值,設平方表表頭地址為1000H。
程序如下:
;-------------------------------------
MOV DPTR,#1000H
MOVC A,@A+DPTR
……
ORG 1000H
DB 0, 1, 4, 9, 16, 25......
;-------------------------------------
「DB」,在ROM 1000H中,順序存放了一系列的「平方」數據。
MOVC A,@A+DPTR指令中A如果等於0,就會在「平方」數據中取出第0個,就是0;
MOVC A,@A+DPTR指令中A如果等於1,就會在「平方」數據中取出第1個,就是1;
MOVC A,@A+DPTR指令中A如果等於2,就會在「平方」數據中取出第2個,就是4;
MOVC A,@A+DPTR指令中A如果等於3,就會在「平方」數據中取出第3個,就是9;
……
MOVC A,@A+DPTR指令中A如果等於9,就會在「平方」數據中取出第9個,就是81。
⑦ 51單片機的查表法 的 原理是 什麼 透徹點給解釋下吧!
查表,其實就是字面上的意思,先用c語言的形式解釋比如用查表法計算平方根,你應該知道用單片機去求平方根的速度肯定是很慢的,但是當我們只需要求1到9的平方根時,我們可以把1到9的平方根直接保存在sqrt[]這個數組里,sqrt[1]=1;sqrt[2]=1.414;這樣類推。需要用到那個數的平方根直接sqrt[]裡面放上那個數就行了,這就是查表了。這樣速度就會快很多。單片機查表用的最多的是數碼管的解碼工作,就是把0-9的數字轉換成對應數碼管的段碼。還有就是一些需要計算的值。因為單片機的運行速度問題,為了提高速度常用查表法。如果是匯編其實就是把表放在數據區了,通過地址來查表。原理是一樣的。希望對你有所幫助。
⑧ 8051單片機 應用MOVC A,@A+DPTR指令求累加器A的立方值
單片機16位數據都是分兩部分放的..
一個存低8,一個存高8
寫的時候分兩次寫,讀的時候也分兩次讀..
mov
r2,a
movc
a,@a+dptr
xch
a,r2
inc
a
movc
a,@a+dptr
mov
r3,a
大根是這樣...
不知道是不是懂了...
祝你好運!
^_^
⑨ 單片機:利用(PC)查表程序求0_9bcd碼的立方值,和求平方值有什麼區別
立方表的數值超過255,需2個位元組存儲