单片机原理及设计应用 魏庆涛第3章

上传人:E**** 文档编号:89108510 上传时间:2019-05-18 格式:PPT 页数:83 大小:4.59MB
返回 下载 相关 举报
单片机原理及设计应用 魏庆涛第3章_第1页
第1页 / 共83页
单片机原理及设计应用 魏庆涛第3章_第2页
第2页 / 共83页
单片机原理及设计应用 魏庆涛第3章_第3页
第3页 / 共83页
单片机原理及设计应用 魏庆涛第3章_第4页
第4页 / 共83页
单片机原理及设计应用 魏庆涛第3章_第5页
第5页 / 共83页
点击查看更多>>
资源描述

《单片机原理及设计应用 魏庆涛第3章》由会员分享,可在线阅读,更多相关《单片机原理及设计应用 魏庆涛第3章(83页珍藏版)》请在金锄头文库上搜索。

1、第三章 MCS-51系列单片机的指令系统,任何一种处理器都必须经过设计人员对其进行以指令为基础的程序设计才能够使得处理器应用到系统中,完成相应的功能,也就是说指令系统是所有处理器完成任务所具备的最基本的条件,而不同机型的指令系统是不同的,本章主要介绍51系列单片机的寻址方式、指令格式及其功能。,在计算机指令系统的发展历史中,其指令系统是一套控制计算机操作的编码,称之为机器语言,计算机只能识别和执行机器语言的指令。为了便于人们理解记忆和使用,通常用符号来描述计算机的指令系统,而符号指令称之为汇编语言。各类机型计算机都有自己的汇编语言指令系统,并且能够将汇编语言进行编译成为机器语言指令。,第一节

2、MCS-51单片机指令系统简介,51系列单片机指令系统包含5种功能类型的指令,7种寻址方式,共有111条指令。 按照指令的字长划分 按照指令执行时间划分 按指令功能划分,由于计算机只识别和执行机器语言的特点,所以每条指令都会对应一个二进制数,这个二进制数就是该条指令的机器码。,3.1.1 指令编码格式,标号:操作码目的操作数,源操作数;注释 标号:表示该指令的符号地址,表示存放指令或数据的程序存储器的单元地址,可以由字母1-8个或数字串组成,以冒号结尾; 操作码:规定了指令所实现的操作功能,是指令或伪指令; 操作数:指出了参加操作的数据或数据的地址,这一字段可能有也可能没有,若有两个操作数,一

3、般情况操作数应以逗号分开; 注释:方便阅读程序而加的解释,可有可无。,单字节指令占用程序存储器的一个单元,其既包含操作码的信息,又包含操作数的信息。这其中有两种情况:一种是指令的功能和操作对象很明确,不需再用另一个字节来表示操作数,如INC A,其机器码为00000100B,其功能是将累加器A中的内容进行自加1;一种是用同一个字节的几位分别表示操作码和操作数,不用再增加字节来表示,如MOV A,R1,其机器码为11101001B,其功能是将工作寄存器R1中的内容送入累加器。,通过指令的格式可以判断出该条指令的字长。,双字节指令占用程序存储器的两个单元,一般是用一个字节单元存放操作码,另一个字节

4、单元存放操作数或操作数的地址,如MOV A,#20H,其机器码为01110100 00000010B,其功能是将20H立即数送入累加器。 三字节指令占用程序存储器的三个单元,一般是用一个字节单元存放操作码,另两个字节单元存放操作数或地址,如MOV 50H,#45H,其机器码为01110101 00000101 01000101B,其功能是将立即数45H送入片内数据存储器50H单元。,Rn 工作寄存器R0R7,n=07; Direct 8位直接地址,存放数据的片内数据存储器的地址; Ri 间接地址,只能选中寄存器区中可做地址寄存器的2个寄存器R0和R1,i=0,1; #data 立即数,一个十进

5、制最大值为255的8位二进制或2位十六进制数; #data16 立即数,一个十进制最大值为65535的8位二进制或2位十六进制数; addr16 16位目标地址,片外数据存储器或程序存储器以及外部芯片的地址,用于LCALL和LJMP指令中;,3.1.2 符号定义,在指令中经常会看到一些在操作数中使用的符号,这些符号定义如下:,addr11 11位目标地址,片内数据存储器或程序存储器的地址,用于ACALL和AJMP指令中; rel 相关地址,8位带符号偏移量,一般是程序存储器字节地址,通常在跳转类指令中使用,其对应的十进制范围为-128+127; bit 位地址,针对片内数据存储器中的可位寻址的

6、位使用; DPTR 数据指针,可用做16位的地址寄存器; (X) X指寄存器或十六进制数,则(X)为指向以X寄存器中的内容为目标地址的单元或以十六进制数据为目标地址的单元; 数据传送的方向,将左边的内容送入右边; A 累加器; ACC 直接寻址方式的累加器; B 寄存器B; C 进位标志位,是布尔处理机的累加器,也称为位累加器。,注:如果符号为目的操作数在一般情况下表示对某个具体单元或寄存器中的内容进行修改或其它操作,如果符号为源操作数一般情况表示对某个具体数或具体单元(或寄存器)中的内容进行传送、判断等操作,而不进行修改,目的操作数不能为立即数。,伪指令也称为汇编指令,但是大多数的伪指令在汇

7、编时不产生机器码,仅仅用来记忆汇编过程进行某种控制或对符号和标号进行赋值,所以其不属于指令系统中的指令,常用的伪指令有8条。 1、ORG addr16 定位伪指令 ORG伪指令出现在程序块或数据块的开始,用来指明词语句后面的目标程序或数据块存放的起始地址。在一个源文件中可多次使用ORG,规定不同的程序段的起始地址,但顺序要从小到大定义,并且不能重叠。,3.1.3 伪指令,例如: ORG 0000H LJMP MAIN ;上电转向主程序 ORG 0023H ;串行口中断入口地址 LJMP SERVE1 ;转中断服务程序 ORG 0100H ;主程序 MAIN: MOV A,#20H ;将立即数2

8、0H送入累加器 上述指令中,指令LJMP MAIN在程序存器的0000H单元,指令LJMP SERVE1程序存器的0023H单元,指令MOV A,#45H在程序存储器的0100H单元。,格式:标号:DB 字节数据项表 数据项表从标号制定的地址连续存放,可以是十进制数、十六进制数、由单引号括起来的字符串,每个字符串元素为一个ASCII码,各项数据用逗号分开。 例如: ORG 1000H ; SEG1:DB 53H,“2” ; SEG2:DB DAY ; 注:项表中的数取值范围为00H-FFH,字符串长度小于80,2、DB 字节定义伪指令,则(1000H)=53H (1001H)=32H (100

9、2H)=44H (1003H)=41H (1004H)=59H,格式:标号:DW 双字节数据项表,类似于DB,只是DB用于定义数据表,DW用于定义16位字。项或项表指所定义的一个字(两个字节)或用逗号分开的字节串。每个字的低8位字节先放置,高8位字节后放置,低字节放置在低地址,高字节放置在高地址。 例如 ORG 1000H TAB:DW 53H,“2” 结果为:(1000H)=53H ,(1001H)=00H ,(1002H)=32H ,(1003H)=00H,3、DW 字定义伪指令,格式:标号:DS 表达式 用于保留待放存放的一定数量的存储单元,定义应保留的存储单元数。该指令的功能是有标号指

10、定单元开始,定义一个存储区以备源程序使用,存储区内预留的存储单元个数由表达式的值决定。 例: ORG 3000H SEG:DS 08H ; DB 30H ; (3008H)=30H 注意:对MCS-51单片机来说,DB、DW、DS伪指令只能对程序存储器使用,不能对数据存储器使用。,4、DS 预留存储区伪指令,表示从3000H单元开始,连续预留8个存储单元,格式:名字 EQU 表达式 或者 名字 = 表达式 用于给一个表达式的值或一个字符串起个名字。程序中,该名字可以用作程序地址、数据地址或立即数使用,但必须是以字母开头的字母数字串,且名字必须唯一;表达式可以是8位或16位数据。 例如:STAR

11、T EQU 100H PORT = 2301H ORG START MOV DPTR,#PORT 在程序中PORT就是2301H。,5、EQU 为标号赋值伪指令,格式: 名字 DATA 直接字节地址 该伪指令是给一个8位内部RAM单元起一个名字,相当于定义一个变量,一个单元可以有很多名字。如: ERR DATA 32H MOV ERR,#23H 在程序中ERR就是32H。,6、DATA 数据地址赋值伪指令,格式:字符名 BIT 位地址 用于定义某特定位的标号。项指的是所定义的位。经定义后,便可用指令中最左面的标号来代替BIT项所指出的位。 例如:MN BIT P1.7 经BIT 伪指令定以后,

12、可以在指令中用MN来代替位地址P1.7。,7、BIT 位地址符号伪指令,8、END 源程序结束伪指令,该伪指令指出源程序到此结束,其后的程序语句不予处理。,寻址方式是对操作数而言的,就是指的寻找操作数的地址,如何找到这个地址就是寻址方式。在MCS-51系列单片机中共有7种寻址方式:寄存器寻址、直接寻址、寄存器间接寻址、立即寻址、变址寻址、相对寻址、位寻址。,第二节 寻址方式,寄存器寻址方式就是操作数存储在寄存器中,即指令的操作数为某个寄存器。可寻址的寄存器为:R0R7、累加器A、暂存寄存器B、数据指针DPTR等。 值得注意的是,在寻址工作寄存器时,指令本身只能说明工作寄存器组内的某一个寄存器,

13、由PSW的D4和D3两位来指明其所在的工作寄存器组号。例如,指令中标有操作数R3,且此时PSW.4,PSW.3两位的内容分别为“0”和“1”,则说明寻址1组工作寄存器的R3寄存器,即片内数据存储器的0BH单元。 例如:MOV A,R0表示把工作寄存器R0的内容传给累加器A。若执行指令前,A=35H,R0=6FH,则执行该指令后,A=6F,R0的内容不变。,一、寄存器寻址,直接寻址就是直接在指令中指定操作数的地址,即操作数为内部RAM单元的地址。可以作为直接寻址的片内RAM空间是低128字节和SFR,直接寻址方式的寻址范围仅限于内部数据存储器。 这里需要注意三个问题, 一是:如果操作数是A,则是

14、寄存器寻址,如果是ACC,则是直接寻址,虽然二者都是指一个存储空间; 二是:对于特殊功能寄存器SFR和位地址空间,这是唯一的寻址方式, 三是:对于片外的数据存储器地址空间不能使用直接寻址。 例如:MOV A,3AH 代表的意思就是将地址为3AH的存储单元中数据取出来传送给累加器。,二、直接寻址,寄存器间接寻址就是通过寄存器指定数据存储单元的地址,然后对该字节单元地址中的数据进行操作。 即寄存器中存储的是地址,操作数为某个工作寄存器Ri(i=0,1)或者DPTR。 以R0或R1为地址寄存器时,可以寻址片内数据存储器地址空间00H-FFH范围内的256个字节单元,以及片外数据存储器地址空间的256

15、个字节单元; 以16位寄存器DPTR作为间接寻址寄存器时,可寻址片外存储器的64K地址空间。 采用用寄存器间接寻址方式时应在寄存器前加上(at表示“在”)符号。(注:加表示地址),三、寄存器间接寻址,例如:MOVX A,DPTR 表示把以DPTR的内容为地址的外部数据存储器单元的内容传给累加器A。若执行指令前A=20H,DPTR=2000H,外部数据存储器2000H地址单元的内容为79H,则执行指令后A=79H。 对52系列单片机,内部数据存储器的80H0FFH地址单元与特殊功能寄存器的地址重叠,访问这些单元时只能使用寄存器间接寻址方式。,立即寻址就是直接给出操作数。 取指令时,即可由程序存储

16、器中直接取得操作数据。51单片机中除了一条指令(MOV DPTR,#data16)是16位长的立即数外,其余都是8位的立即数。 例如:MOV A,30H;无论执行之前A中的内容是多少,则执行后A=30H。 值得注意的一点是:在立即数寻址中立即数前面必须要加上一个“#”号,“#”表示其后面内容为立即数而不是一个字节单元地址。,四、立即寻址,变址寻址是以某个寄存器的内容为基础,然后在这个基础上再加上地址偏移量,形成真正的操作数地址。 需要特别指出的是用来作为基础的寄存器可以是PC或是DPTR,地址偏移量存储在累加器A中,二者内容之和即为操作数据的真实地址或程序转移的目的地址。 该寻址方式的特征是操作数为A+DPTR或者A+PC,对于数据传送时其处理数据都是从程序存储器中取出来的,常用来做查表。,五、变址寻址,MOV A,#01H ;A01H MOV DPTR,#1010H ;DPTR1

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号