㈠ 单片机查表程序
// 希望能达到你的要求
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。