① 单片机编程 建立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个字节存储