导航:首页 > 操作系统 > 单片机用c语言写查表指令

单片机用c语言写查表指令

发布时间:2023-08-13 12:35:18

单片机程序详解,尤其是查表指令,如何查表,tab怎么那么多数据啊数据怎么用顺序是怎么的谢谢!

MOV DPTR #TAB 是将TAB标号所在的地址给DPTR,对于查表指令所查数据为表中第(A中地址单元的值)个数据,假如你的程序20H的值是0,那么查表的数据就是0C0H,是1就是0F9H以此类推。另外TAB的数据为八段共阳数码管0~F的值

Ⅱ 关于单片机查表指令时用RLC左移指令

MOV
DPTR,#TAB
MOV
A,R3
;

R2R
3
=
0292H
=
0000
0010
1001
0010
(
十进制
658

CLR
C
;
C
=0
A=
1001
0010
RLC
A
;
A
=
0010
0100
C
=
1
(
左移一位)
XCH
A,R2
;
A
<=>
R2
A
=
0000
0010
C=1
RLC
A
;
A
=
0000
0101
C
=
0
(
左移一位)
XCH
AR2
;
A
<=>
R2
R2=0000
0101
A
=
0010
0100
(
十六进制
0524H)
ADD
A,DPL
;
(
十进制
1316)
MOV
DPL,A;调整DPL,DPH
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
TAB:
DW
XXXXH;共1024个
数据项
DW
XXXXH
......
DW
XXXXH

Ⅲ 单片机查表程序编写 急!

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

;完

Ⅳ 单片机查表指令MOVC A @A+DPTR

51单片机的指令系统中,是没有MOVC
A,@R0+DPTR的,查表指令只有两条:
1、MOVC
A,@A+DPTR
2、MOVC
A,@A+PC

Ⅳ MSC-51单片机指令中的查表问题

查表程序是要从一个专门的数据区内找到你所需要的那个数。这个数在表中的位置,由表首地址、数在表内相对表首地址的偏移量、一个数据的字节数等因素来确定。
具体方法是:将表首地址放入DPTR中,偏移量放入A中,用查表指令MOVC A,@A+DPTR;来完成从数据区取数。有如下几种情况:
1、如果数据区的长度不超过256个字节(累加器A的容量之内),且数据是单字节的,则不需要另外处理;
2、因为如果数据区的长度不超过256个字节,但数据是双字节的,需要将偏移量乘2,第一次读出一个字节保存,将地址加1后再读第二字节(类推:一个数据是n字节,则偏移量乘n,每次读出一个字节保存,将地址加1后再读下一字节,直到一个数全部读出)。
3、如果数据区的长度超过了256个字节,因为A已经存放不了256以上的偏移量,此时需要事先将偏移量加入到DPTR中去(即数据的真实地址全部放到DPTR中了),再将A清零后使用查表指令。同样也要如上区分单字节数和多字节数。
你所给例就是数据区的长度超过了256个字节,且数据为双字节的情况。程序解释如下,供参考。
MOV DPTR,#TAB ;表首地址入DPTR
MOV A,R3
CLR C
RLC A ;偏移量的低8位乘2在A中,移出的最高位在C中
XCH A,R2 ;乘2后的偏移量的低8入R2中,偏移量的高8位入A中
RLC A;偏移量的高8位乘2在A中
XCH A,R2 ;偏移量的高低字节归位,至此完成了偏移量乘2
ADD A,DPL
MOV DPL,A;
MOV A,DPH
ADDC A,R2
MOV DPH,A;将偏移量加到DPTR中,至此DPTR中就是数据第一个字节的实际地址
CLR A ;A清零,因为偏移量已经加入,DPTR内容不需要再修正。
MOVC A,@A+DPTR;读数据第一个字节
MOV R2,A;读数据第一个字节存入R2中
CLR A ;A清零
INC DPTR ;地址加“1”,准备读下一个字节
MOVC A,@A+DPTR
MOV R3,A 读数据第一个字节存入R3中
RET
TAB: DW XXXXH;TAB为表首地址,共1024个双字节数据项,共2048个字节
DW XXXXH
......
DW XXXXH

Ⅵ 51单片机,查表指令,乘2用移位。

51单片机查表指令是:MOVC A,@A+DPTR
DPTR是表的首地址,第二个A是偏移量。第一个A是取出的结果。
乘2相当于左移一位,即:RLC A(C需要先清零)
除2相当于右移一位,即:RRC A(C需要先清零)

Ⅶ PIC 的单片机如何实现查表功能

PIC系列单片机的查表程序可以利用子程序带值返回的特点来实现。
具体是在主程序中先取出表数据地址放入W,接着调用子程序,子程序的第一条指令将W置入PC,则程序跳到数据地址的地方,再由“RETLW”指令将数据返回到主程序。

Ⅷ 单片机中用C语言查表和移位问题

先说第一个问题:
比如用查表法将结果保存到变量i中,查表变量为x,则i = table[x],记住C语言里面数组是从0开始的,比如说上面的0x01就是table[0],0x02是table[1],以此类推。
再说第二个问题:
比如说从P1.0口发送出去,则可以写为
sbit OUT = P1^0;//定义OUT为P1.0口,这样今后好写程序
char i;
for(i = 0;i < 8;i++)
{
OUT = data & 0x80;//因为高位在前,将它写成二进制就明白了
data <<= 1;
}
上面的程序就能搞定了;
应该是所有的单片机都有CY位(不知道浮点DSP有没有);
C语言中左移和右移之后低位或高位自动补零,CY位也保持为零(视编译器而定,这个得看编译器手册),有些编译器提供了循环移位的函数;
还有什么不明白的补充问题就是

阅读全文

与单片机用c语言写查表指令相关的资料

热点内容
如何关闭手机dhcp服务器 浏览:979
php免费ide 浏览:200
程序员词句 浏览:976
服务器如何禁止某个ip段 浏览:329
便签手机文件夹 浏览:768
gameloft的java游戏 浏览:110
神佑释放怎么转服务器 浏览:735
洋葱app软件怎么登录 浏览:788
两相电空气压缩机 浏览:396
基于51单片机的智能语音密码锁设计 浏览:845
mac如何用ssh登录服务器 浏览:446
appstore怎么设置 浏览:954
在哪个app买韩国女装 浏览:111
php写入文件换行 浏览:749
dsp实现fft算法 浏览:485
棋牌源码转让交易手续费 浏览:293
云上服务器贵州 浏览:647
qq三国怎么使用云服务器 浏览:303
一键加密字体怎么设置 浏览:145
majority算法 浏览:822