㈠ 單片機查表程序
// 希望能達到你的要求
ORG 0000H
LJMP MAIN
ORG 0003H
ORG 0030H
MAIN:
MOV SP,#30H ; 設置堆棧
MOV R2,#41H ;A的ASCII碼
MOV R3,#50H ;循環50次
MOV DPTR,#2000H ;表首地址
MOV A,#00H
GOTO:
PUSH ACC
MOVC A,@A+DPTR
XRL A,R2
JZ CONTROL ;如果是41H 則跳出保存
DJNZ R3,GOTO2 ;是否尋到了50H個地址 尋到了則退出(這時無有效的結果保存)_
LJMP EXIT
GOTO2:
POP ACC
INC A
AJMP GOTO
CONTROL:
POP ACC ;彈出A 即低位地址
MOV R1,A
MOV DPTR,#2051H
MOVX @DPTR,A ; 存放低位地址
INC DPTR
MOV A,#20H
MOVX @DPTR,A ; 存放高位地址
EXIT:
END
㈡ 關於單片機查表程序
如下:
ORG 0000H
BUF1 EQU 30H
BUF2 EQU 40H
N EQU 0AH
MOV 30H, #05H ;00~09H,加上這行,就是給定30H單元數據。
MOV R0, #5 ;這里不應該是5, 應該是BUF1
MOV R1, #BUF2 ;以下不變
……
㈢ 單片機 查表法
0100H、0200H表示的都是51單片機程序存貯器裡面的地址,51單片機可定址最大64k程序存貯器、最大64k內存。程序存貯器和內存不是統一編址。
PC時程序計數器,主要是記錄單片機在ROM的執行位置,一般單片機可以訪問64K的地址,也就是需要16位的字寬
單片機編址是16進制,看看編程器里怎樣表示的。
ORG 0100H 表示程序從這里開始執行
DPTR是一個16位的寄存器,對這個數據寄存器賦值時,對於寄存器定址方式,我們是把它拆分為高八位,低八位來訪問的
由於它是16位,所以我們可以用它來訪問64K的ROM空間,也可以訪問64K的外表RAM空間
ORG 0200H 表示存放數據的地址從這里開始,這個地址是程序存貯器地址,不可以在運行中改變。
SQU是查表子程序的編號,主程序調用這段查表程序需 LCALL SQU,這時候單片機的pc指向0101h,單片機從0101h開始執行指令 。
㈣ 51單片機的查表法 的 原理是 什麼 透徹點給解釋下吧!
原理,很簡單。
就是你開飯店,事先,你得准備好多種菜品的材料,放在冷庫。
顧客上門,點什麼,你馬上就能做什麼。不要現出去買。
㈤ 單片機查表程序編寫 急!
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
RET
S_TAB:
DB 1, 4, 9, 16, 25, 36, 49, 64, 81, 100
;完
㈥ 51單片機查表
DPTR是一個16位的數據指針,程序里就是標號TABLE的地址,你改了這地址里的內容,地址值還是不變的。
㈦ 單片機查表
題目已經說了,每個最大允許值,都是雙位元組的。所以以位元組為單位計算偏移量時應當乘以2,
㈧ 單片機C語言查表,應該怎麼寫如下
一個for循環,看誰最貼近10.
intmin=w[0];
for(i=0;i<50;i++)
if(abs(w[i]-10)<abs(min-10))min=w[i];
㈨ 單片機 查表設計
感測器輸出的電壓已由A/D轉換為8位二進制數,...,x為電壓值數據。
設測得的電壓值x放入R2R3 中...
----
電壓值x,僅有8位二進制數,不會放在 R2、R3 中的。
㈩ 單片機查表程序
DEC A
因為要用自然數作為表的偏移,而自然數是從1開始的、表格偏移是從0開始的,所以當然要減1咯。例如要查2的平方,實際就是要查找表格偏移+1的元素。
RL A
因為表格每個元素是兩個位元組,所以偏移地址要乘以2。還是以查2的平方為例,它對應於表格偏移+1的元素,但因為每個元素佔用2個位元組,所以地址偏移量實際是(+1)×2 = +2h。