51单片机-查表指令
51单片机-查表指令-课件
三、举例
例1:将累加器A中的数(0~5),用查表的方法求 平方值。 MOV R0,#待查值 MOV DPTR,#TABLE MOV A,R0 MOVC A,@A+DPTR (显示程序段……) TABLE: DB 0,1,4,9,16,25
三、举例
讲解:①TABLE是数据表首地址的标号。 ②DB是一条伪指令,它的用途是将其 后面的数,即0~5的平方值0,1,4,9,16,25存放 在ROM中。 ③待查的数据保存在R0中,可根据需 要进行修改。
此条指令的含义是将累加器A中的值与寄存器DPTR中的值 相加,相加后的结果是程序存储器ROM中的某个存储单元 的地址。将这个地址中的数据传送到A中保存起来。
二、查表程序格式
在使用时,将DPTR赋值为欲查数据表的首地 址,累加器A赋值为要查的数据,即可实现查 表功能,查得的数据保存在A中。通用格式如 下: MOV DPTR,#TABLE MOVC A,@A+DPTR ……(其他程序段) TABLE:DB ……(数据库)
把控制码建成一个表,而利用MOVC A,@ A+DPTR做取码的操作,就可方便地处理一 些复杂的控制动作
三、举例 4、流程图
三、举例 5、程序段 查表指令控制流水灯.txt
三、举例 例2:基于单片机的简易计算器设计 基于单片机的简易计算器.doc
wenku.baidu.com
单片机的查表程序
单片机的查表程序(共5页)
--本页仅作为文档封面,使用时请直接删除即可--
--内页可以根据需求调整合适字体及大小--
在单片机开发过程中.一些非线性的控制过程.最适合做一个表格来.时时改变系统的参数.达到控制的目的.最常的如产生正弦的的程.就是建一个大的数组时时改变输出的8位字节送给外部DA.由DA生成一个完整的正弦波.当然了.LED显示也是一个例子.通过建一个数组来实现段码的点亮点灭.下面就是一个LED表---digits[0]
#define SEG_a 0x01
#define SEG_b 0x02
#define SEG_c 0x04
#define SEG_d 0x08
#define SEG_e 0x10
#define SEG_f 0x20
#define SEG_g 0x40
#define SEG_dot 0x80
unsigned char digits[10] = {
(SEG_a|SEG_b|SEG_c|SEG_d|SEG_e|SEG_f), 过MCS-51指令系统中有专用的查表指令:MOVC A,@A+DP TR和MOV A,@A+PC.
MOVC A,@A+DPTR指令,DPTR作为基址寄存器时,其值为16位而且可根据需要设计,故可用于在64K ROM范围内查表。编写查表程序时,首先把表的首址送入DPTR中,再将要查找的数据序号(或下表值)送入A中,然后就可以使用该指令进行查表操作,并将结果送累加器A中。
MOVC A,@A+PC指令,PC作为基址寄存器时,其值由指令的位置确定,它只能设在查表指令操作码下的256个字节范围内。编写查表程序时,首先把查表数据的序号送入A中,再把从查表指令到表的首地址间的偏移量与A值相加,然后使用该指令进行查表操作,并把结果送累加器A中。
51单片机汇编指令速查表
51单片机汇编指令速查表
指令格式功能简述字节数周期
一、数据传送类指令
MOV A, Rn 寄存器送累加器 1 1
MOV Rn,A 累加器送寄存器 1 1
MOV A ,@Ri 内部RAM单元送累加器 1 1
MOV @Ri ,A 累加器送内部RAM单元 1 1
MOV A ,#data 立即数送累加器 2 1
MOV A ,direct 直接寻址单元送累加器 2 1
MOV direct ,A 累加器送直接寻址单元 2 1
MOV Rn,#data 立即数送寄存器 2 1
MOV direct ,#data 立即数送直接寻址单元 3 2
MOV @Ri ,#data 立即数送内部RAM单元 2 1
MOV direct ,Rn 寄存器送直接寻址单元 2 2
MOV Rn ,direct 直接寻址单元送寄存器 2 2
MOV direct ,@Ri 内部RAM单元送直接寻址单元 2 2 MOV @Ri ,direct 直接寻址单元送内部RAM单元 2 2 MOV direct2,direct1 直接寻址单元送直接寻址单元 3 2 MOV DPTR ,#data16 16位立即数送数据指针 3 2
MOVX 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 1
51单片机符号
ls的乱写
PC = progammer counter //程序计数器
ACC = accumulate //累加器
PSW = progammer status word //程序状态字
SP = stack point //堆栈指针
DPTR = data point register //数据指针寄存器
IP = interrupt priority //中断优先级
IE = interrupt enable // 中断使能
TMOD = timer mode //定时器方式(定时器/计数器控制寄存器)
ALE = alter (变更,可能是)
PSEN = progammer saving enable //程序存储器使能(选择外部程序存储器的意思) EA = enable all(允许所有中断)完整应该是enable all interrupt
PROG = progamme (程序)
SFR = special funtion register //特殊功能寄存器
TCON = timer control //定时器控制
PCON = power control //电源控制
MSB = most significant bit//最高有效位
LSB = last significant bit//最低有效位
CY = carry //进位(标志)
AC = assistant carry //辅助进位
OV = overflow //溢出
ORG = originally //起始来源
DB = define byte //字节定义
mcs51单片机指令集
一个单片机所需执行指令的集合即为单片机的指令系统。单片机使用的机器语言、汇编语言及高级语言,但不管使用是何种语言,最终还是要“翻译”成为机器码,单片机才能执行之。现在有很多半导体厂商都推出了自己的单片机,单片机种类繁多,品种数不胜数,值得注意的是不同的单片机它们的指令系统不一定相同,或不完全相同。但不管是使用机器语言、汇编语言还是高级语言都是使用指令编写程序的。
所谓机器语言即指令的二进制编码,而汇编语言则是指令的表示符号。在指令的表达式上也不会直接使用二进制机器码,最常用的是十六进制的形式。但单片机并不能直接执行汇编语言和高级语言,都必须通过汇编器“翻译”成为二进制机器码方能执行,但如果直接使用二进制来编写程序,那将十分不便,也很难记忆和识别,不易编写、难于辨读,极易出错,同时出错了也相当难查找。所以现在基本上都不会直接使用机器语言来编写单片机的程序。最好的办法就是使用易于阅读和辨认的指令符号来代替机器码,我们常称这些符号为助记符,用助记符的形式表示的单片机指令就是汇编语言,为便于记忆和阅读,助记符号通常都使用易于理解的英文单词和拼音字母来表示。
每种单片机都有自己独特的指令系统,那么指令系统是开发和生产厂商定义的,如要使用其单片机,用户就必须理解和遵循这些指令标准,要掌握某种(类)单片机,指令系统的学习是必须的。
MCS-51共有111条指令,可分为5类:
[1].数据传送类指令(共29条)
[2].算数运算类指令(共24条)
[3].逻辑运算及移位类指令(共24条)
[4].控制转移类指令(共17条)
51单片机查表指令
51单⽚机查表指令
51单⽚机查表指令
51单⽚机具有两条查表指令,⽤于从 ROM 中读出预存的数据:
MOVC A, @A + PC
MOVC 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。
单片机常用指令
计算机通过执行程序完成人们指定的任务,程序由一条一条指令构成,能为CPU识别并执行的指令的集合就是该CPU的指令系统。
MCS-51单片机汇编语言指令格式:
操作符目的操作数,源操作数
指令中的常用符号
Rn: n=(0~7),表示当前工作寄存器R0~R7中的一个
Ri: i=(0、1),代表R0和R1寄存器中的一个,用作间接寻址寄存器
dir : 8 位直接字节地址(片内RAM 和SFR )
#data: 8位立即数,即8位常数。可以为2进制(B)、10进制、16进制(H)、字符(‘ ’)#data16: 表示16位立即数,即16位常数,取值范围为#0000H~#0FFFFH
addr16 : 表示16位地址
addr11 : 表示11位地址
rel : 相对偏移量(为一字节补码)用于相对转移指令中
bit :位地址,在位地址空间中。
$: 表示当前指令的地址。
寻址方式
1、立即寻址
指令中直接给出操作数的寻址方式。在51系列单片机的指令系统中,立即数用一个前面加“#“号的8位数(#data,如#30H)或16位数(#data16,如#2052H)表示。立即寻址中的数,称为立即数。
例如指令:MOV A,#30H
2、直接寻址
操作数的地址直接出现在指令中。
寻址对象:
①内部数据存贮器:使用它的地址。
②特殊功能寄存器:既可使用它的地址,也可以直接使用寄存器名。
3、寄存器寻址
操作数存放在寄存器中。
寻址对象:A,B,DPTR,R0~R7 。
B 仅在乘除法指令中为寄存器寻址,在其他指令中为直接寻址。
A 可以寄存器寻址又可以直接寻址,直接寻址时写作ACC
C51单片机指令集大全
格式功能简述字节数周期
一、数据传送类指令
MOV A, Rn 寄存器送累加器 1 1
MOV Rn,A 累加器送寄存器 1 1
MOV A ,@Ri 内部RAM单元送累加器 1 1
MOV @Ri ,A 累加器送内部RAM单元 1 1
MOV A ,#data 立即数送累加器 2 1
MOV A ,direct 直接寻址单元送累加器 2 1
MOV direct ,A 累加器送直接寻址单元 2 1
MOV Rn,#data 立即数送寄存器 2 1
MOV direct ,#data 立即数送直接寻址单元 3 2
MOV @Ri ,#data 立即数送内部RAM单元 2 1
MOV direct ,Rn 寄存器送直接寻址单元 2 2
MOV Rn ,direct 直接寻址单元送寄存器 2 2
MOV direct ,@Ri 内部RAM单元送直接寻址单元 2 2 MOV @Ri ,direct 直接寻址单元送内部RAM单元 2 2 MOV direct2,direct1 直接寻址单元送直接寻址单元 3 2 MOV DPTR ,#data16 16位立即数送数据指针 3 2
MOVX 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 1
51单片机汇编指令速查表
51 单片机汇编指令速查表
指令格式功能简述字节数周期
一、数据传送类指令
MOV A, Rn 寄放器送累加器1 1
MOV Rn,A 累加器送寄放器1 1
MOV A ,@Ri 内部 RAM 单元送累加器1 1
MOV @Ri ,A 累加器送内部 RAM 单元 1 1
MOV A ,#data 当即数送累加器2 1
MOV A ,direct 直接寻址单元送累加器2 1
MOV direct ,A 累加器送直接寻址单元2 1
MOV Rn,#data 当即数送寄放器2 1
MOV direct ,#data 当即数送直接寻址单元3 2
MOV @Ri ,#data 当即数送内部 RAM 单元 2 1
MOV direct ,Rn 寄放器送直接寻址单元2 2
MOV Rn ,direct 直接寻址单元送寄放器2 2
MOV direct ,@Ri 内部 RAM 单元送直接寻址单元 2 2
MOV @Ri ,direct 直接寻址单元送内部 RAM 单元 2 2
MOV direct2,direct1 直接寻址单元送直接寻址单元3 2
MOV DPTR ,#data16 16 位当即数送数据指针3 2
MOVX 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
MCS-51单片机指令周期表
MCS-51单片机指令周期表
mcs-51指令速查表
类别指令格式功能简述字节数周期MOV A,Rn寄存器送累加器11
MOV Rn,A累加器送寄存器11
MOV A,@Ri内部RAM单元送累加器11
MOV@Ri,A累加器送内部RAM单元11
MOV A,#data立即数送累加器21
MOV A,direct直接寻址单元送累加器21
MOV direct,A累加器送直接寻址单元21
MOV Rn,#data立即数送寄存器21
MOV direct,#data立即数送直接寻址单元32
MOV@Ri,#data立即数送内部RAM单元21
MOV direct,Rn寄存器送直接寻址单元22
数据传送类指令期
MOV Rn,direct直接寻址单元送寄存器22
MOV direct,@Ri内部RAM单元送直接寻址单元22
MOV@Ri,direct直接寻址单元送内部RAM单元22
MOV direct2,direct1直接寻址单元送直接寻址单元32
MOV DPTR,#data1616位立即数送数据指针32
MOVX A,@Ri外部RAM单元送累加器(8位地址)12
MOVX@Ri,A累加器送外部RAM单元(8位地址)12
MOVX A,@DPTR外部RAM单元送累加器(16位地址)12
MOVX@DPTR,A累加器送外部RAM单元(16位地址)12
MOVC A,@A+DPTR查表数据送累加器(DPTR为基址)12
MOVC A,@A+PC查表数据送累加器(PC为基址)12
XCH A,Rn累加器与寄存器交换11
算术运算类指令
XCH A,@Ri累加器与内部RAM单元交换11
51单片机指令
MCS-51共有111条指令,可分为5类:
[1].数据传送类指令(共29条)
[2].算数运算类指令(共24条)
[3].逻辑运算及移位类指令(共24条)
[4].控制转移类指令(共17条)
[5].布尔变量操作类指令(共17条)
一些特殊符号的意义
Rn——当前选中的寄存器区的8个工作寄存器R0—R7(n=0-7)。
Ri——当前选中的寄存器区中可作为地址寄存器的两个寄存器R0和R1(i=0,1)
direct—内部数据存储单元的8位地址。包含0—127(255)内部存储单元地址和特殊功能寄存地址。
#data—指令中的8位常数。
#data16—指令中的16位常数。
addr16—用于LCALL和LJMP指令中的16目的地地址,目的地址的空间为64kB程序存储器地址。
#addr11—用于ACALL和AJMP指令中的11目的地地址,目的地址必须放在与下条指令第一个字节同一个2kB程序存储器空间之中。
rel—8位带符号的偏移字节,用于所有的条件转移和SJMP等指令中,偏移字节对于下条指令的第一个字节开始的-128——+127范围内。
@—间接寄存器寻址或基址寄存器的前缀。
/—为操作的前缀,声明对该位操作书取反。
DPTR—数据指针。
bit—内部RAM和特殊功能寄存器的直接寻址位。
A—累加器。
B—累加器B。用于乘法和除法指令中。
C—进位标志位。
(x)—某地址单元中的内容。
((x))—由X寻址单元中的内容。
MCS-51的寻址方式
[1].直接寻址
指令中操作数直接以单元地址形式出现,例如:MOV A,68H
这条指令的意义是把内部RAM中的68H单元中的数据内容传送到累加器A中。值得注意的是直接寻址方式只能使用8位二进制地址,因此这种寻址方式仅限于内部RAM进行寻址。低128位单元在指令中直接以单元地址的形式给出。对于特殊功能寄存器可以使用其直接地址进行访问,还可以以它们的符号形式给出,只是特殊功能寄存器只能用直接寻址方式访问,而无其它方法。
(完整版)51单片机汇编指令(全)
指令中常用符号说明
Rn当前寄存器区的8个工作寄存器R0~R7(n=0~7)
Ri当前寄存器区可作为地址寄存器的2个工作寄存器R0和R1(i=0,1)
Direct8位内部数据寄存器单元的地址及特殊功能寄存器的地址
#data表示8位常数(立即数)
#data16表示16位常数
Add16表示16位地址
Addr11表示11位地址
Rel8位代符号的地址偏移量
Bit表示位地址
@间接寻址寄存器或基址寄存器的前缀
( )表示括号中单元的内容
(( ))表示间接寻址的内容
指令系统
数据传送指令(8个助记符)
助记符中英文注释
MOV Move 移动
MOV A , Rn;Rn→A,寄存器Rn的内容送到累加器A
MOV A , Direct;(direct)→A,直接地址的内容送A
MOV A ,@ Ri;(Ri)→A,RI间址的内容送A
MOV A , #data;data→A,立即数送A
MOV Rn , A;A→Rn,累加器A的内容送寄存器Rn
MOV Rn ,direct;(direct)→Rn,直接地址中的内容送Rn
MOV Rn , #data;data→Rn,立即数送Rn
MOV direct , A;A→(direct),累加器A中的内容送直接地址中
MOV direct , Rn;(Rn)→direct,寄存器的内容送到直接地址
MOV direct , direct;(direct)→direct,直接地址的内容送到直接地址
MOV direct , @Ri;((Ri))→direct,间址的内容送到直接地址
MOV direct , #data;8位立即数送到直接地址中
8051单片机汇编指令速查表详解
8051系列单片机汇编语言指令速查表
说明:
1)Ri, Rn指当前工作寄存器,i,n = 0 – 7,当前工作寄存器由程序状态字寄存器PSW的2个位RS1, RS0决定
MCS-51使用汇编语言指令,它共有44个操作码助记符,33种功能,其操作数有#data、direct、Rn、@Ri等。这里介绍指令助记符及其相关符号的记忆方法。
一、助记符号的记忆方法
1、表格列举法
把44个指令助记符按功能分为五类,每类列表记忆。此处从略,请读者自己总结。
2、英文还原法
单片机的操作码助记符是该指令功能的英文缩写,将缩写还原成英语原文,再对照汉语有助于理解其助记符含义,从而加强记忆。例如:
增量INC-Incremect 减量DNC-Decrement 短转移SJMP-Short jump
长转移LJMP-Long jump 比较转移CJNE-Compare jump not equality
绝对转移AJMP-Absolute jump 空操作NOP-No operation
交换XCH-Exchange 加法ADD-Addition
乘法MUL-Multiplication 除法DIV-Division
左环移RL-Rotate left 进位左环移RLC-Rotate left carry
右环移RR-Rotate right 进位右环移RRC-Rotate right carry
3、功能模块记忆法
单片机的44个指令助记符,按所属指令功能可分为五大类,每类又可以按功能相似原则为2~3组。这样,化整为零,各个击破,实现快速记忆。
完整word版,51单片机指令表
此表主要是为了方便大家查阅每条指令的作用,写法以及字节数和周期数,建议大家保存为书签。
助记符指令说明字节数周期数
(数据传递类指令)
MOV A,Rn 寄存器传送到累加器 1 1
MOV A,direct 直接地址传送到累加器 2 1
MOV A,@Ri 累加器传送到外部RAM(8 地址) 1 1
MOV A,#data 立即数传送到累加器 2 1
MOV Rn,A 累加器传送到寄存器 1 1
MOV Rn,direct 直接地址传送到寄存器 2 2
MOV Rn,#data 累加器传送到直接地址 2 1
MOV direct,Rn 寄存器传送到直接地址 2 1
MOV direct,direct 直接地址传送到直接地址 3 2
MOV direct,A 累加器传送到直接地址 2 1
MOV direct,@Ri 间接RAM 传送到直接地址 2 2
MOV direct,#data 立即数传送到直接地址 3 2
MOV @Ri,A 直接地址传送到直接地址 1 2
MOV @Ri,direct 直接地址传送到间接RAM 2 1
MOV @Ri,#data 立即数传送到间接RAM 2 2
MOV DPTR,#data16 16 位常数加载到数据指针 3 1 MOVC A,@A+DPTR 代码字节传送到累加器 1 2 MOVC A,@A+PC 代码字节传送到累加器 1 2 MOVX A,@Ri 外部RAM(8 地址)传送到累加器 1 2 MOVX A,@DPTR 外部RAM(16 地址)传送到累加器 1 2 MOVX @Ri,A 累加器传送到外部RAM(8 地址) 1 2 MOVX @DPTR,A 累加器传送到外部RAM(16 地址) 1 2 PUSH direct 直接地址压入堆栈 2 2
MCS-51第三章MCS-51单片机的指令系统
A, #10 R4, #36 @R0, #7AH 31H,#01H DPTR,#1234H
School of Engineering & Automation · Tianjin Polytechnic University
微机原理及应用
b.直接寻址传送 MOV A, direct ;(direct)→A MOV direct, A ; (A) → direct MOV Rn, direct;(direct)→Rn MOV @Ri,direct;(direct)→(Ri)
微机原理及应用
MCS-51单片机的指令系统
1. 数据传送类指令
①.内部数据传送类指令(MOV) MOV 目,源 a.立即数传送
双字节
MOV A, #data ;data→A MOV Rn, #data ;data→Rn MOV @Ri, #data ;data→(Ri)
School of Engineering & Automation · Tianjin Polytechnic University
微机原理及应用
例.已知累加器 A中有一个0~9范围内的数,用以 上查表指令编出能查出0~9的平方值的程序。设平方 表首地址为2000H。 a.采用DPTR作为基址寄存器, 程序为: MOV DPTR, #2000H MOVC A, @A+DPTR 若累加器处值为3,得到一个新地址2003H,从该地 址中查表得9并存入累加器A中
常见51单片机指令及详解
常见51单片机指令及详解
数据传递类指令
(1)以累加器为目的操作数的指令
MOV A,Rn
MOV A,direct
MOV A,@Ri
MOV A,#data
第一条指令中,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。
(2)以寄存器Rn为目的操作的指令
MOV Rn,A
MOV Rn,direct
MOV Rn,#data
这组指令功能是把源地址单元中的内容送入工作寄存器,源操作数不变。
(3)以直接地址为目的操作数的指令
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
(4)以间接地址为目的操作数的指令
MOV @Ri,A 例:MOV @R0,A
MOV @Ri,direct MOV @R1,20H
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
③待查的数据保存在R0中,可根据需 要进行修改。
6
三、举例
④ 数据表(平方表)在ROM中存放的示意图: (注意:这里,标号 TABLE实际上是数据表 的首地址,它是一个具 体的值。只不过在这里, 用TABLE这个标号来 表示更为方便而已。)
13
此条指令的含义是将累加器A中的值与寄存器DPTR中的值 相加,相加后的结果是程序存储器ROM中的某个存储单元 的地址。将这个地址中的数据传送到A中保存起来。
3
二、查表程序格式
在使用时,将DPTR赋值为欲查数据表的首地 址,累加器A赋值为要查的数据,即可实现查 表功能,查得的数据保存在A中。通用格式如 下: MOV DPTR,#TABLE MOVC A,@A+DPTR ……(其他程序段) TABLE:DB ……(数据库)
模块七 查表指令
1
在日常生活中,很多场合需要单片机控制电 路做复杂的显示或运算。如大型的LED中文 显示屏,复杂的数据计算等。通常的做法是: 事先做好数据库(比如汉字库),然后让单 片机通过“查表”的方式调用数据库中的内 容进行相应的显示或其他操作。
2
一、指令讲解
51单片机指令系统中,有两个查表指令。
MOVC A,@A+PC MOVC A,@A+DPTR
MOVC—程序存储器ROM向累加器A传送数据的指令 A—累加器,用于保存临时数据 PC—程序计数指针,PC的值等于当前要执行的指令的存放地址(举例) DPTR—16位寄存器,在查表程序中,DPTR的值一般等于待查数据表的首
地址。 @—表示间接寻址方式。
7
三、举例
⑤程序执行情况分析: 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),以该值为
4
三、举例
例1:将累加器A中的数(0~5),用查表的方法求 平方值。 MOV R0,#待查值 MOV DPTR,#TABLE MOV A,R0 MOVC A,@A+DPTR (显示程序段……) TABLE: DB 0,1,4,9,16,25
5
三、举例
讲解:①TABLE是数据表首地址的标号。 ②DB是一条伪指令,它的用途是将其
左移2次,右移2次,闪烁2次(延时的时间 0.2秒)。
10
三、举例
2、电路原理图 控制流水灯实验\流水灯.DSN 3、设计思路
把控制码建成一个表,而利用MOVC A,@ A+DPTR做取码的操作,就可方便地处理一 些复杂的控制动作
11
三、举例 4、流程图
12
三、举例 5、程序段
查表指令控制流水灯.txt
地址,到ROM中相应单元去取数。程序中该单元的数据为4,正是2的平 方。 (显示程序段……) TABLE: DB 0,1,4,9,16,25
8
三、举例 例2:基于单片机的简易计算器设计 基于单源自文库机的简易计算器.doc
9
三、举例
例3:用查表方式控制广告灯显示
1. 实验任务 利用取表的方法,使端口P1做单一灯的变化: