均查表編程
⑴ 查表指令編程
是匯編語言還是c語言?什麼程序啊?
匯編語言的查表很簡單
MOV DPTR,#TAB ;數據表格首地址TAB賦值給數據指針作為基址
MOV A,R0 ;把表格索引值R0(R0=0,1,2,3,4,5,6,7,表示表格里第幾個數據)送A作為變址
MOVC A,@A+DPTR ;查表格中基址DPTR(即表格首地址)加上變址A(表格里第幾個地址)里的和地址里的內容送到A
MOV P1,A ;將A裡面查表所得結果送到P1口輸出
……
TAB:3FH,06H,5BH,4FH,66H,6DH,7DH,07H,……
3F是表格里第0個數據,06是表格里第1個數據,5B是表格里第2個數據
例如:R0=2,那我們要查的是表格里第2個數據5B,DPTR中的基址是表格中第0個數據3F所在的地址,這個地址+2就是表格中第2個地址查得數據就是5B
⑵ 單片機 查表程序設計
LTB2:
;-------------------下面是R2R3乘以2
MOV A, R3
CLR C
RLC A
MOV R3, A
XCH A, R2
RLC A
XCH R2, A
;------------------下面是表首地址加上R2R3
MOV 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
----
這個程序,是根據兩個位元組的數據來查表,查出的,也是兩個位元組。
如果先弄懂了一個位元組的查表程序,看這個程序,也就沒有什麼難的了。
⑶ 單片機查表程序
A+DPTR=4000H+5H=4005H
A+PC=5H+50H=55H
MOV A,@A+DPTR 意思是把4005單元存儲的數放到A中,下同。
這條指令是匯編語言專用的查表指令,要查的表是一個順序表,它以DPTR為表中數據的首地址,A中事先存儲數據相對於表首地址的地址偏移量,最大不能超過255,通過調整A值可以查詢表中指定位置的數據。這條指令執行完畢後,A中存儲的是查詢到的數據。簡單的說:給DPTR賦表的首地址值,給A數據的偏移量,得到的查詢結果放在A中,下同
⑷ 匯編語言編寫一簡單查表程序
0-9循環顯示,經驗證完全無誤。。謝謝採納。
ORG 0000H
MOV DPTR,#TAB ;DPTR此時指向0C0H,以後由於A值的不停加1會不停的往後指,在循環
MAIN:MOV R5,#0 ;給初值
MOV A,R5;A=0
LP: MOVC A,@A+DPTR ;查表
MOV P1,A; 顯示
MOV A,R5
INC A ;加1
MOV R5,A
LCALL DELAY ;延時
CJNE A,#10,LP ;是否 到9.
SJMP MAIN
DELAY:MOV R3,#255
DEL1: MOV R4,#255
DEL2: NOP
DJNZ R4,DEL2
DJNZ R3,DEL1
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;共陽字元。0-9。
END 如有疑問,可以HI我。。
⑸ C語言查表
#include<stdio.h>
struct data
{int t;
float m;
};
struct data a[]={{0,29.4},{10,33.3},{20,37.2},{30,41.4},{40,45.8},{50,50.4},{60,55.2},{70,60.2},{80,65.6}};
void main()
{
int n,i;
scanf("%d",&n);
for(i=0;i<9;i++)
if(a[i].t==n)
{printf("%3.1f\n",a[i].m);
break;
}
}
這個簡單~
希望對你能有所幫助。
⑹ 【跪求】單片機編程:利用查表發求1~9的平方值
假設數據在R2中,求出平方後,仍然放在R2。
程序如下:
MOV A, R2
MOV DPTR, #TAB
MOVC A, @A+DPTR
MOV R2, A
RET
TAB: DB 0,1,4,9,16,25,36,49,61,81
END
⑺ c語言編寫查表的程序
用數組來解決最簡單方便,自己參考一下吧
#include <stdio.h>
int main()
{
char ch;
int i,j,BQ;
char * k1[3][4]={
{"0","0.1","0.2-0.3" ,"0.4-0.6"} ,
{"0.1" ,"0.2-0.3","0.4-0.6","0.7-0.9"} ,
{"0.2","0.4-0.6","0.7-0.9","1.0"} ,
};
printf("地下水狀態說明:\n");
printf("0-潮濕或點滴狀出水\n" );
printf("1-淋雨狀或涌流狀出水,水壓<=0.1MPa或單位出水量<=10L/min\n");
printf("2-淋雨狀或涌流狀出水,水壓>0.1MPa或單位出水量>10L/min\n");
printf("請選擇地下水狀態[0-2]:");
do {
scanf("%c",&ch );getchar();
} while ( ch > '2' || ch< '0' );
i=ch-'0' ;
printf("請輸入BQ值:");
scanf("%d" , &BQ );
if ( BQ > 450 ) j=0 ; //題目中寫的有問題,應該是>450,不是451
else if ( BQ > 350 ) j=1 ;
else if ( BQ > 250 ) j=2 ;
else j=3 ;
printf("K1=%s\n" , k1[i][j] );
system("pause");
return 0;
}
⑻ newton 插值計算均差表 matlab程序,怎樣能把均查表輸出來啊,看看這個matlab程序能不能改改
%保存文件名為New_Int.m
%Newton基本插值公式
%x為向量,全部的插值節點
%y為向量,差值節點處的函數值
%xi為標量,是自變數
%yi為xi出的函數估計值
function yi=New_Int(x,y,xi)
n=length(x);
m=length(y);
if n~=m
error('The lengths of X ang Y must be equal!');
%return;
end
%計算均差表Y
Y=zeros(n);
Y(:,1)=y';
for k=1:n-1
for i=1:n-k
if abs(x(i+k)-x(i))<eps
error('the DATA is error!');
%return;
end
Y(i,k+1)=(Y(i+1,k)-Y(i,k))/(x(i+k)-x(i));
end
end
%計算牛頓插值公式
yi=0;
for i=1:n
z=1;
for k=1:i-1
z=z.*(xi-x(k));
end
yi=yi+Y(1,i).*z;
end
Y
%{
實驗用語句
x=1:.25:5;
y=x.^2+3*rand(size(x));
xi=0:0.1:5;
yi=New_Int(x,y,xi);
plot(x,y,xi,yi)
legend('原函數','插值後函數')
%}
按上面語句試試
⑼ sql開發多表查詢時的編程方法
視圖和直接執行sql語句效率基本相同,當然是指在查詢條件不變的情況下。我的理解,查詢結果可以理解為一張表,如果經常調用這些表,還嫌每次寫語句麻煩,視圖就是將有一些編輯好的查詢語句固化。想要提高查詢效率,還應該在sql語句(包括視圖)優化上下功夫