51单片机_查表指令_课件
三、举例
讲解:①TABLE是数据表首地址的标号。 ②DB是一条伪指令,它的用途是将其 后面的数,即0~5的平方值0,1,4,9,16,25存放 在ROM中。 ③待查的数据保存在R0中,可根据需 要进行修改。
三、举例
④ 数据表(平方表)在ROM中存放的示意图: (注意:这里,标号 TABLE实际上是数据表 的首地址,它是一个具 体的值。只不过在这里, 用TABLE这个标号来 表示更为方便而已。)
二、查表程序格式
在使用时,将DPTR赋值为欲查数据表的首地 址,累加器A赋值为要查的数据,即可实现查 表功能,查得的数据保存在A中。通用格式如 下: MOV DPTR,#TABLE MOVC A,@A+DPTR ……(其他程序段) TABLE:DB ……(数据库)
三、举例
例1:将累加器A中的数(0~5),用查表的方法求 平方值。 MOV R0,#待查值 MOV DPTR,#TABLE MOV A,R0 MOVC A,@A+DPTR (显示程序段……) TABLE: DB 0,1,4,9,16,25
把控制码建成一个表,而利用MOVC A,@ A+DPTR做取码的操作,就可方便地处理一 些复杂的控制动作
三、举例 4、流程图
三、举例 5、程序段 查表指令控制流水灯.txt
此条指令的含义是将累加器A中的值与寄存器 此条指令的含义是将累加器 中的值与寄存器DPTR中的值 中的值 中的值与寄存器 相加,相加后的结果是程序存储器ROM中的某个存储单元 相加,相加后的结果是程序存储器 中的某个存储单元 的地址。将这个地址中的数据传送到A中保存起来 中保存起来。 的地址。将这个地址中的数据传送到 中保存起来。
模块七 查表指令
在日常生活中,很多场合需要单片机控制电 路做复杂的显示或运算。如大型的LED中文 显示屏,复杂的数据计算等。通常的做法是: 事先做好数据库(比如汉字库),然后让单 片机通过“查表”的方式调用数据库中的内 容进行相应的显示或其他操作。
一、指令讲解
51单片机指令系统中,有两个查表指令。
MOVC A,@A+PC MOVC A,@A+DPTR
MOVC—程序存储器ROM向累加器A传送数据的指令 A—累加器,用于保存临时数据 PC—程序计数指针,PC的值等于当前要执行的指令的存放地址(举例) DPTR—16位寄存器,在查表程序中,DPTR的值一般等于待查数据表的首 地址。 @—表示间接寻址方式。
三、举例
⑤程序执行情况分析: MOV R0,#2;待查2的平方,将R0赋值为2 MOV DPTR,#TABLE;将平方表的首地址送入DPTR中,假 设为1000H(标号为TABLE) MOV A,R0;A=R0=2 MOVC A,@A+DPTR;将A与DPTR相加,即1002H(TABLE+2),以该值为 地址,到ROM中相应单元去取数。程序中该单元的数据为4,正是2的平 方。 (显示程序段……) TABLE: DB 0,1,4,9,16,25
三、举例 例2例3:用查表方式控制广告灯显示
1. 实验任务 利用取表的方法,使端口P1做单一灯的变化: 左移2次,右移2次,闪烁2次(延时的时间 0.2秒)。
三、举例 2、电路原理图 控制流水灯实验\流水灯.DSN 3、设计思路
51单片机汇编指令速查表
51单片机汇编指令速查表指令格式功能简述字节数周期一、数据传送类指令MOV A, Rn 寄存器送累加器 1 1MOV Rn,A 累加器送寄存器 1 1MOV A ,@Ri 内部RAM单元送累加器 1 1MOV @Ri ,A 累加器送内部RAM单元 1 1MOV A ,#data 立即数送累加器 2 1MOV A ,direct 直接寻址单元送累加器 2 1MOV direct ,A 累加器送直接寻址单元 2 1MOV Rn,#data 立即数送寄存器 2 1MOV direct ,#data 立即数送直接寻址单元 3 2MOV @Ri ,#data 立即数送内部RAM单元 2 1MOV direct ,Rn 寄存器送直接寻址单元 2 2MOV Rn ,direct 直接寻址单元送寄存器 2 2MOV direct ,@Ri 内部RAM单元送直接寻址单元 2 2 MOV @Ri ,direct 直接寻址单元送内部RAM单元 2 2 MOV direct2,direct1 直接寻址单元送直接寻址单元 3 2 MOV DPTR ,#data16 16位立即数送数据指针 3 2MOVX A ,@Ri 外部RAM单元送累加器(8位地址) 1 2 MOVX @Ri ,A 累加器送外部RAM单元(8位地址) 1 2 MOVX A ,@DPTR 外部RAM单元送累加器(16位地址) 1 2 MOVX @DPTR ,A 累加器送外部RAM单元(16位地址) 1 2 MOVC A ,@A+DPTR 查表数据送累加器(DPTR为基址) 1 2 MOVC A ,@A+PC 查表数据送累加器(PC为基址) 1 2 XCH A ,Rn 累加器与寄存器交换 1 1XCH A ,@Ri 累加器与内部RAM单元交换 1 1XCHD A ,direct 累加器与直接寻址单元交换 2 1 XCHD A ,@Ri 累加器与内部RAM单元低4位交换 1 1 SWAP A 累加器高4位与低4位交换 1 1POP direct 栈顶弹出指令直接寻址单元 2 2PUSH direct 直接寻址单元压入栈顶 2 2二、算术运算类指令ADD A, Rn 累加器加寄存器 1 1ADD A,@Ri 累加器加内部RAM单元 1 1ADD A, direct 累加器加直接寻址单元 2 1ADD A, #data 累加器加立即数 2 1ADDC A, Rn 累加器加寄存器和进位标志 1 1ADDC A,@Ri 累加器加内部RAM单元和进位标志 1 1 ADDC A, #data 累加器加立即数和进位标志 2 1 ADDC A, direct 累加器加直接寻址单元和进位标志 2 1 INC A 累加器加1 1 1INC Rn 寄存器加1 1 1INC direct 直接寻址单元加1 2 1INC @Ri 内部RAM单元加1 1 1INC DPTR 数据指针加1 1 2DA A 十进制调整 1 1SUBB A, Rn 累加器减寄存器和进位标志 1 1SUBB A,@Ri 累加器减内部RAM单元和进位标志 1 1 SUBB A, #data 累加器减立即数和进位标志 2 1 SUBB A, direct 累加器减直接寻址单元和进位标志 2 1 DEC A 累加器减1 1 1DEC Rn 寄存器减1 1 1DEC @Ri 内部RAM单元减1 1 1DEC direct 直接寻址单元减1 2 1MUL AB 累加器乘寄存器B 1 4DIV AB 累加器除以寄存器B 1 4三、逻辑运算类指令ANL A, Rn 累加器与寄存器 1 1ANL A,@Ri 累加器与内部RAM单元 1 1ANL A, #data 累加器与立即数 2 1ANL A, direct 累加器与直接寻址单元 2 1ANL direct, A 直接寻址单元与累加器 2 1ANL direct, #data 直接寻址单元与立即数 3 1ORL A, Rn 累加器或寄存器 1 1ORL A,@Ri 累加器或内部RAM单元 1 1ORL A,#data 累加器或立即数 2 1ORL A,direct 累加器或直接寻址单元 2 1ORL direct, A 直接寻址单元或累加器 2 1ORL direct, #data 直接寻址单元或立即数 3 1XRL A, Rn 累加器异或寄存器 1 1XRL A,@Ri 累加器异或内部RAM单元 1 1XRL A,#data 累加器异或立即数 2 1XRL A,direct 累加器异或直接寻址单元 2 1XRL direct, A 直接寻址单元异或累加器 2 1XRL direct, #data 直接寻址单元异或立即数 3 2RL A 累加器左循环移位 1 1RLC A 累加器连进位标志左循环移位 1 1RR A 累加器右循环移位 1 1RRC A 累加器连进位标志右循环移位 1 1CPL A 累加器取反 1 1CLR A 累加器清零 1 1四、控制转移类指令类ACCALL addr11 2KB范围内绝对调用 2 2AJMP addr11 2KB范围内绝对转移 2 2LCALL addr16 2KB范围内长调用 3 2LJMP addr16 2KB范围内长转移 3 2SJMP rel 相对短转移 2 2JMP @A+DPTR 相对长转移 1 2RET 子程序返回 1 2RET1 中断返回 1 2JZ rel 累加器为零转移 2 2JNZ rel 累加器非零转移 2 2CJNE A ,#data ,rel 累加器与立即数不等转移 3 2 CJNE A ,direct ,rel 累加器与直接寻址单元不等转移 3 2 CJNE Rn,#data ,rel 寄存器与立即数不等转移 3 2 CJNE @Ri ,#data,rel RAM单元与立即数不等转移 3 2 DJNZ Rn ,rel 寄存器减1不为零转移 2 2DJNZ direct ,rel 直接寻址单元减1不为零转移 3 2 NOP 空操作 1 1五、布尔操作类指令(C表示进位标识)MOV C, bit 直接寻址位送C 2 1MOV bit, C C送直接寻址位 2 1CLR C C清零 1 1CLR bit 直接寻址位清零 2 1CPL C C取反 1 1CPL bit 直接寻址位取反 2 1SETB C C置位 1 1SETB bit 直接寻址位置位 2 1ANL C, bit C逻辑与直接寻址位 2 2 ANL C, /bit C逻辑与直接寻址位的反 2 2 ORL C, bit C逻辑或直接寻址位 2 2 ORL C, /bit C逻辑或直接寻址位的反 2 2 JC rel C为1转移 2 2JNC rel C为零转移 2 2JB bit,rel 直接寻址位为1转移 3 2JNB bit,rel 直接寻址为0转移。
51单片机中查表指令的使用
个偏移量,以补偿数据表首址与MoVc A,@A+PC后面下! 一条指令地址的差值。也就是说,基址加变址A+Pc中, !
PC虽然不能改变,但可将A中的数据进行调整(加上偏 移量),就能实现准确查表。实际应用中,使用MOVC A,@”Pc指令编写程序时,调整偏移量有以下几种处理 方法:
1.子程序法。将查表指令写成子程序,子程序后紧 跟着安排数据表。
I
MOV DPTR, #TABLE
MOV A, @A+DPTR
I
‘ ●
1
.
。
TABLE:DB……·
:
在实际的单片机应用系统中,往往需要扩展外部数!
据存储器或输入输出接口(如键盘和数码显示等)。在!
这种情况下,程序中就要用到数据指针DPTR,要将其指;
向外RAM地址(或键盘与显示器地址),利用Movx;
式。用MOVC A,@A+DPT财旨令查表,因为数据指针DPTR
是16位的,故数据表可安排在64KB的ROM的任意地址范l
围内。使用时只要将数据指针DPTR(基址寄存器)指向I
欲查数据表的首地址,将累加器A(变址参数寄存器)I
赋以要查表的数据,就可实现查表功能,查得的数据存l
在累加器A中。通用的程序如下:
A,@DPTR和MOVx@DPTR,A指令与外RAM进行数据交换。;
若此时还需要查表(如数码显示程序,需查找七段显示;
器的段码),使用MoVc A,@A+DPTR指令就不太方便。;
数据指针DPTR既要指向内部程序存储器RoM的数据表首;
址,又要指向外部RAM或其他接口的地址,这虽然可用;
堆栈等方法来实现,但比较麻烦。在这种情况下最好使!
应用设计
5 1单片机中查表指令的使用
51单片机查表指令
51单⽚机查表指令51单⽚机具有两条查表指令,⽤于从 ROM 中读出预存的数据:MOVC A, @A + PCMOVC A, @A + DPTR问题:在“MOVC A,@A+DPTR”和“MOVC A,@A+PC”中,分别使⽤了DPTR和PC作基址,请问这两个基址代表什么地址?使⽤中有何不同?答案:使⽤@A+DPTR基址变址寻址时,DPTR为常数且是表格的⾸地址,A为从表格⾸址到被访问字节地址的偏移量。
使⽤@A+PC基址变址寻址时,PC仍是下条指令⾸地址,⽽A则是从下条指令⾸地址到常数表格中的被访问字节的偏移量。
PC是程序计数器,DPTR是数据指针。
⽤这个MOVC A,@A+DPTR⽐较⽅便的,DPTR是16位。
范围⼴。
建议使⽤。
这两条都是查表指令,MOVC A,@A+PC,只能给累加器A赋值,所以只能查这条指令所在地址以后256字节范围内的代码或常数。
⽽MOVC A,@A+DPTR,可以给DPTR赋给任何⼀个16位的地址值,所以查表范围可达整个程序存储器64K字节空间的代码或常数。
其中前⼀条指令的⽤法,⽐较难,使⽤的时候,需要计算⼀个“偏移量”。
不了解“指令的字节数”的⼈,都不清楚应该如何计算。
做⽽论道曾在以前的⽂章中,介绍过“偏移量”的⾃动计算⽅法,可见如下链接:--------------------最佳答案:51单⽚机汇编语⾔有⼀条查表指令是:MOVC A, @A + DPTR它不是单独使⽤的,要和 DB 伪指令配套使⽤。
例如:若累加器A中有⼀个0~9的数,请⽤查表法求出该数的平⽅值,设平⽅表表头地址为1000H。
程序如下:;-------------------------------------MOV DPTR, #1000HMOVC A, @A + DPTR……ORG 1000HDB 0, 1, 4, 9, 16, 25......;-------------------------------------DB 伪指令从 ROM 1000H 开始,顺序存放了⼀系列的“平⽅”数据。
51单片机基础知识ppt课件
二进制
6 7 8 9 10 11
110 111 1000 1001 1010 1011
ppt精选
4
十六进制
❖ 十进制中的0-15分别表示为十六进制的0、1、 2、3、4、5、6、7、8、9、A、B、C、D、 E、F
❖ 熟练掌握二进制与十六进制之间的转换。
规律:一般把四个二进制数放在一起转换成 一个十六进制数,转换时先把二进制数转换 成十进制数,再把十进制数转换成十六进制 数。
4. 定时/计数器:两个16位的定时/计数器,实现定时 或计数功能。
5. 并行I/O口:4个8位的I/O口P0、P1、P2、P3。
6. 串行口:一个全双工串行口。
7. 中断控制系统:5个中断源(外中断2个,定时/计 数中断2 个,串行中断1个)
8. 时钟电路:可产生时钟脉冲序列,允许晶振频率
6MHZ和12MHZ
ppt精选
5
如:0001B -> 1 -> 1H B表示为二进制,H为十六进制
1001B -> 9 -> 9H 1010B -> 10 -> AH 0010 1100 -> 44 -> 2CH
ppt精选
6
二进制数的逻辑运算
1. “与”
“与”运算是实现“必须都有, 否 则就没有”这种逻辑关系的一种运算。 运算符为“· ”, 其运算规则如下:
从外部读取数据 处理数据 向外输出数据
ppt精选
22
什么是I/O
ppt精选
23
什么是I/O
❖ IO的访问----像内存一下,按地址
ppt精选
24
什么是I/O
❖ IO的访问----像内存一下,按地址
2024年度51单片机超详细教程PPT
实例:按键中断程序设计
3. 在主程序中初始化LED 灯和按键输入端口。
4. 开启外部中断0并等待 按键输入。
5. 当按键按下时,触发外 部中断0并执行中断服务 程序,实现LED灯的闪烁 功能。
2024/3/23
32
Part
06
接口技术与应用扩展
2024/3/23
33
并行I/O口扩展方法
2024/3/23
存放程序代码和常数表格 等,一般使用ROM或 EPROM实现
STEP 03
特殊功能寄存器
用于控制单片机的各种功 能,如定时器、中断等
存放变量、中间结果等, 一般使用RAM实现
9
I/O端口及特殊功能寄存器
要点一
I/O端口
要点二
特殊功能寄存器
与外部设备通信的接口,分为并行I/O和串行I/O两种
用于控制I/O端口的操作,如设置端口模式、读取端口状态 等
优势
51单片机在嵌入式系统领域具有广泛的应用,其稳定的性能和成熟的生态系统使得开发者能够快速开发出高质量 的嵌入式应用。
2024/3/23
5
应用领域与市场需求
应用领域
智能家居、工业自动化、医疗设备、汽车电子、物联网等。
市场需求
随着物联网、人工智能等技术的快速发展,对单片机的性能、功耗、安全性等方面提出了更高的要求 。同时,市场对于单片机的定制化、差异化需求也日益增加。
23
Part
05
中断系统与定时器/计数器应 用
2024/3/23
24
中断概念及中断源识别方法
2024/3/23
中断概念
中断是指在CPU执行程序的过程中,由于某种原因,暂时停止当前正在执行的程序,转 而去执行另一段特殊程序,待特殊程序执行完毕后,再返回原程序继续执行的过程。
51单片机指令表汇总
51单片机指令表汇总51 单片机是一种广泛应用于电子工程和嵌入式系统开发的微控制器。
要熟练掌握 51 单片机的编程,了解其指令表是至关重要的。
下面就为大家汇总一下 51 单片机的常见指令。
数据传送类指令MOV 指令:这是最基本的数据传送指令,用于在寄存器之间、寄存器与存储器之间传送数据。
例如,“MOV A, 50H”就是将立即数 50H传送到累加器 A 中。
MOVX 指令:用于在片外数据存储器和累加器 A 之间进行数据传送。
比如“MOVX A, @DPTR”,将片外数据存储器中由数据指针 DPTR 所指定单元的内容传送到累加器 A 中。
MOVC 指令:用于访问程序存储器中的数据表格。
“MOVC A, @A+DPTR”是常见的用法。
算术运算类指令ADD 指令:实现加法运算。
像“ADD A, R0”就是将累加器 A 的内容和寄存器 R0 的内容相加,结果存放在累加器 A 中。
ADDC 指令:带进位加法指令。
考虑了上一次运算产生的进位标志。
SUBB 指令:用于减法运算,并且会考虑借位标志。
逻辑运算类指令ANL 指令:进行逻辑与操作。
例如“ANL A, R0”,将累加器 A 和寄存器 R0 的内容进行逻辑与运算,结果存放在累加器 A 中。
ORL 指令:执行逻辑或操作。
XRL 指令:实现逻辑异或运算。
控制转移类指令JC 指令:若进位标志为 1 则跳转。
JZ 指令:若累加器 A 的内容为 0 则跳转。
LJMP 指令:长跳转指令,可以跳转到 64KB 程序存储器空间的任意位置。
位操作类指令SETB 指令:将指定的位设置为 1。
例如“SETB P10”,将 P1 端口的第 0 位置 1。
CLR 指令:把指定的位清零。
这些只是 51 单片机指令的一部分,实际应用中还有更多的指令和组合使用方式。
在编程时,合理选择和运用这些指令能够实现各种复杂的功能。
比如,通过数据传送指令来初始化变量和读取外部数据;利用算术运算指令进行数值计算;借助逻辑运算指令处理逻辑关系;使用控制转移指令实现程序的分支和循环;运用位操作指令控制单个引脚的状态。
《单片机》教学课件51单片机的指令系统
MOV Rn ,direct
;(direct)→Rn ,n =0~7
MOV Rn ,#data
;#data→Rn ,n =0~7
把源操作数送入当前寄存器区的R0~R7中的某一寄存器。
3.以直接地址direct为目的操作数的指令
MOV direct,A
; (A)→direct
MOV direct,Rn
寻址空间内快速地找到指定的地址单元。 下面介绍指令系统7种寻址方式。
5
1.寄存器寻址方式
指令中的操作数为某一寄存器的内容。
例如:MOV A,Rn
;(Rn)→A,n =0~7
把Rn中的源操作数送入到累加器A中。由于指令指定了从寄存 器Rn中取得源操作数,所以称为寄存器寻址方式。
本寻址方式的寻址范围:
4.以寄存器间接地址为目的操作数的指令
MOV @Ri,A
;(A)→((Ri)), i=0,1
MOV @Ri,direct ;(direct)→((Ri)),i=0,1
MOV @Ri,#data ;#data→((Ri)), i=0,1
功能是把源操作数内容送入R0或R1指定的存储单元中。
5.16位数传送指令
内部RAM的00H~7FH共128个单元。 6.堆栈操作指令 内部RAM中设定一个后进先出(LIFO,Last In First Out)
的区域,称为堆栈。在特殊功能寄存器中有一个堆栈指针 SP,指示堆栈的栈顶位置。堆栈操作有进栈和出栈两种, 因此,在指令系统中相应有两条堆栈操作指令。
22
(1)进栈指令 PUSH direct
(1)4组通用工作寄存区共32个工作寄存器。但只对当前工 作寄存器区的8个工作寄存器寻址,指令中的寄存器名称只 能是R0~R7。
51单片机汇编语言指令教程(校对版)ppt课件
06
05
04
03
02
01
00
返回前一次
最新课件
19
2.2.3立即寻址
指令本身直接含有所需要的8位或16位的操作数。
将此数称为“立即数”(使用#标明)。如:
MOV A,#30H
;将(8位)立即数送累加器A
MOV DPTR,#2000H ;16位立即数送DPTR积存器
【注意】:MOV A,#30H MOV A,30H 两者的区别。 立即数寻址的指令长度为2或3个字节。
三字节指令在存储器中存放的方式示意图
最新课件
9
指令的字节数与指令的运行时间
指令的字节多是否意味着指令周期就长?
指令
字节数 周期数
MOV A,R0
1
1
MOV A,#0FFH 2
1
MOV 20H,#30H 3
2
MUL AB
1
4
INC DPTR
1
1
指令说明 R0内容送累加器A
立即数FFH送A 立即数30H送内存20h单元
MOV A,00H ;将RAM中00H单元数据送累加器A
MOV A,R0 ;将工作寄存器R0的内容送累加器A
这里使用了不同的寻址方式,其指令的结构也不相同。
前者是:11100101(0E5H)、00000000(00H) 双字节。
后者的机器码是:11101000(0E8H)
单字节;
在物理结构上,R0与RAM的00H单元恰好是同一单元, 所以不同的指令而执行结果是一样的。
或者:指令中分别包含1个字节的操作数和1个字节的操作 数地址。如:
MOV direct,#data 举例:MOV 20H,#0FFH
单片机查表指令
单⽚机查表指令单⽚机具有两条查表指令,⽤于从 ROM 中读出预存的数据: MOVC A, @A + PC MOVC A, @A + DPTR 其中前⼀条指令的⽤法,⽐较难,使⽤的时候,需要计算⼀个“偏移量”。
不了解“指令的字节数”的⼈,都不清楚应该如何计算。
第⼀条指令 第⼀条指令中,Rn代表的是R0-R7。
第⼆条指令中,direct就是指的直接地址,⽽第三条指令中,就是我们刚才讲过的。
第四条指令是将⽴即数data送到A中。
下⾯我们通过⼀些例⼦加以说明: MOV A,R1 ;将⼯作寄存器R1中的值送⼊A,R1中的值保持不变。
MOV A,30H ;将内存30H单元中的值送⼊A,30H单元中的值保持不变。
MOV A,@R1 ;先看R1中是什么值,把这个值作为地址,并将这个地址单元中的值送⼊A中。
如执⾏命令前R1中的值为20H,则是将20H单元中的值送 ⼊A中。
MOV A,#34H ;将⽴即数34H送⼊A中,执⾏完本条指令后,A中的值是34H。
以寄存器Rn为⽬的操作的指令 MOV Rn,A MOV Rn,direct MOV Rn,#data 这组指令功能是把源地址单元中的内容送⼊⼯作寄存器,源操作数不变。
以直接地址为⽬的操作数的指令 MOV direct,A 例: MOV 20H,A MOV direct,Rn MOV 20H,R1 MOV direct1,direct2 MOV 20H,30H MOV direct,@Ri MOV 20H,@R1 MOV direct,#data MOV 20H,#34H 以间接地址为⽬的操作数的指令 MOV @Ri,A 例:MOV @R0,A MOV @Ri,direct MOV @R1,20H MOV @Ri,#data MOV @R0,#34H ⼗六位数的传递指令 MOV DPTR,#data16 8051是⼀种8位机,这是唯⼀的⼀条16位⽴即数传递指令,其功能是将⼀个16位的⽴即数送⼊DPTR中去。
51单片机查表指令
51单片机查表指令根据存放在ROM中数据表格的项数来查找和它对应的表中值。
专门的查表指令:MOVC A,@A+DPTRMOVC A,@A+PC------------------------------------------------------------------------------------------MOVC A,@A+DPTR执行过程:查表前要把数据表格起始地址放入DPTR,然后把要求查表的项数折算成相对数据表地址的的偏移量送入累加器A最后使用MOVC A,@A+DPTR可实现64KB地址范围内的数据查询。
MOVC A,@A+PC执行过程:1:利用传送指令把所查数据表格的项数送入累加器A2:使用ADD A,#data指令对累加器A进行修正。
Data值的确定公式:PC+data=数据表起始地址DTAB其中PC是查表指令的下一条指令码的起始地址所以data值等于查表指令和数据表存放初始地址之间的字节数。
3:利用MOVC A,@A+PC来完成查表只能实现256字节范围内的数据查询例:查表程序已知BLOCK1为起始的数据块(数据块长度在LEN单元),数块中每个存储单元中的高,低4位分别是两个十六进制数,请编程把他们转换成相应的ASCII码,并存放在BLOCK2开始的连续存储单元(低四位ASCII 码在前,高四位ASCII码在后)程序实例:ORG1000HLEN DATA30H;块长度BLOCK1DATA31H;源起始位置BLOCK2DATA51H;目标起始位置MOV R0,#BLOCK1;BLOCK1送R0MOV R1,#BLOCK2;BLOCK2送R1MOVA,@R0;取源数据块的数ANL A,#0FH;取与运算,得到后四位ADD A,#11H;第一次地址调整0x11=1+1+1+2+2+1+1+1+1+1+3+2就是17个字节MOVCA,@A+PCMOV@R1,A;存放第一次转换结果1BMOV A,@R0;重新取出被转换数1BSWAP A;高低四位交换1BANL A,#0FH;取低四位2BADD A,#09H;9=1+1+1+1+3+22B;第二次地址调位置调整的算法。
