MCS-51单片机具有丰富的位操作指令和优异的布尔变量处理能力。进行位操作时,以进位标志位CY作为位累加器。汇编语言中位操作指令中位地址有以下4种表示形式:1)直接地址方式,如0A1H,2EH。表3-6位操作类指令注:√表示该指令影响某一标志位。直接位寻址为端口执行“读—修改—写”操作。3.位逻辑运算指令位逻辑运算指令共有6条:这两条指令可以实现位地址单元内容或取反后的值与进位位内容“与”操作,操作的结果送位CY。......
2023-11-17
MCS-51单片机指令系统具有功能强、指令短、执行快等特点。MCS-51单片机指令系统共有42种操作助记符,代表了33种操作功能,操作助记符与操作数的各种寻址组合共构造111条指令,同一种指令所对应的操作码最多可至8种(如指令中Rn对应的寄存器可以是R0~R7),操作码共有255种。
MCS-51单片机共有7种寻址方式,即立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址(基址寄存器加变址寄存器间接寻址)、相对寻址和位寻址。了解寻址方式是正确理解和使用指令的前提。
1.立即寻址
立即寻址是指在指令中直接给出操作数的寻址方式。指令中的操作数也称为立即数,其标志为前面加“#”,以区别直接寻址。立即数通常采用8位二进制数#data,例如:
假定立即数是30H,则指令为
指令代码为74H 30H。
除了8位立即数外,指令系统中还有一条立即数为#data16的指令。该指令为
假定立即数为1234H,则指令为
指令代码为90H 12H 34H。立即寻址示意图如图3-3所示。
图3-3 立即寻址示意图
2.直接寻址
直接寻址是指在指令中直接给出操作数的单元地址的寻址方式。在MCS-51指令系统中,直接寻址方式可以访问内部RAM的低128个单元及所有的专用寄存器。具体来说,直接寻址方式访问以下存储空间。
1)专用寄存器。专用寄存器只能用直接寻址方式访问,既可以使用它们的地址,也可以使用它们的名称,专用寄存器的名称同时也是符号化的地址。
2)片内数据存储器的低128个字节。需要注意的是,对于52子系列单片机,其内部数据存储器高128字节(80H~0FFH)不能直接寻址,必须使用寄存器间接寻址方式。
由于52子系列单片机的片内RAM有256个字节,其高128个字节与专用寄存器(SFR)的地址是重叠的。为了避免混乱,单片机规定:直接寻址的指令不能访问片内RAM的高128个单元(80H~0FFH),若要访问这些单元只能用寄存器间接寻址方式,而要访问专用寄存器(SFR)只能使用直接寻址方式。
【例3-2】假设(43H)=55H,执行如下两条指令可以实现什么功能,采用的是什么寻址方式?
【解】第一条指令的功能是将片内RAM中地址为43H单元的内容传送至累加器(A)。其源操作数寻址方式是直接寻址。第二条指令是将立即数85H传送至专用寄存器IE,其目的操作数的寻址方式是直接寻址。专用寄存器IE的字节地址为0A8H,因此该指令也可用专用寄存器的字节地址代替专用寄存器符号。MOV 0A8H,#85H,这两种方式的指令是等价的,即具有相同的机器代码。
直接寻址示意图如图3-4所示。
图3-4 直接寻址示意图
3.寄存器寻址
寄存器寻址是指将操作数存放于寄存器中,寄存器包括工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR等。例如:该指令的操作是把寄存器R0中的数据传送到累加器A中,其操作数存放在寄存器R0中,所以寻址方式为寄存器寻址。
由第2章可知,MCS-51单片机共有4组工作寄存器,每组8个工作寄存器R0~R7,共32个。但寄存器寻址只能使用当前寄存器组,因此指令中的寄存器名称只能是R0~R7。在使用本指令前,有时需要通过对PSW中RS1、RS0位的状态设置,来选择当前工作寄存器组。如果程序状态寄存器PSW的RS1、RS0=0、1(选中第二组工作寄存器,对应地址为08H~0FH),设累加器A的内容为20H,则执行
指令后,内部RAM地址09H的单元的值就变为20H,如图3-5所示。
图3-5 寄存器寻址示意图
4.寄存器间接寻址
寄存器间接寻址是指在指令中给出的寄存器存放的不是操作数而是操作数的地址,操作数是通过寄存器间接得到的,而寄存器寻址中寄存器存放的就是操作数。它们相区别在寄存器间接寻址的寄存器前加前缀标志“@”,而寄存器寻址没有这个标志。同时,寄存器间接寻址时访问片内RAM和片外RAM有一些区别:
1)由于片内RAM共有128字节,访问片内RAM时寄存器间接寻址采用形式为@R0、@R1或SP。访问时用MOV操作符。需要注意的是,MCS-51单片机寻址范围不能超过00H~7FH。对于52子系列单片机,其内部数据存储器高128字节(80H~0FFH)只能使用寄存器间接寻址方式。
2)由于片外RAM存储空间最大达到64KB,仅@R0、@R1无法寻址整个空间。当寻址片外存储空间时由P2口提供高8位地址,R0、R1提供低8位地址共同寻址64KB范围。也可用16位的DPTR作寄存器间接寻址64KB存储空间,访问时用MOVX操作符。
【例3-3】已知使用的第一组工作寄存器,其中(R0)=3AH,内部RAM地址3AH的单元内容为5DH,即(3AH)=5DH,分析执行指令 MOV A,@R0 后A中的内容。
【解】该指令采用寄存器间接寻址将片内RAM中由R0的内容为地址所指示的单元的内容传送到累加器(A),寻址方式如图3-6所示,结果(A)=5DH。
图3-6 寄存器间接寻址示意图
同样采用“MOVX”类寄存器间接寻址方式操作片外RAM的指令。例如:
(www.chuimin.cn)
5.变址寻址
变址寻址是指在指令中把基址寄存器的内容和变址寄存器的内容作为无符号数相加和作为操作数地址。基址寄存器是程序计数器(PC)或数据指针(DPTR),变址寄存器是A,形成的地址是16位地址。这种寻址方式用来访问ROM的查表操作,所以变址寻址操作只有读操作而无写操作。变址寻址指令操作符有MOVC查表指令。
【例3-4】已知(A)=05H,(DPTR)=2000H,即(DPH)=20H,(DPL)=00H,(2005H)=0AAH。试分析执行指令:MOVC A,@A+DPTR后累加器A中的内容。
【解】执行该指令时,首先将DPTR的内容2000H与累加器(A)的内容05H相加,得到地址2005H。然后将该地址的内容0AAH取出传送到累加器(A),这时累加器(A)的内容为0AAH,原来累加器(A)的内容05H被改变,变成0AAH。寻址方式如图3-7所示。
变址寻址方式有几点说明如下:
1)变址寻址方式只能对程序存储器ROM进行寻址,或者说它是专门针对程序存储器的寻址方式,寻址范围可达64KB。
2)变址寻址指令只有以下3条:
其中前两条是程序存储器读指令,后一条是无条件转移指令。
3)尽管变址寻址方式复杂,但这3条指令却是单字节指令。
4)变址寻址方式主要用于查表操作。
图3-7 变址寻址示意图
【例3-5】已知(A)=50H,(1051H)=55H,执行ROM的1050H处的指令:
试分析执行指令后累加器A中的内容。
【解】这条指令是单字节指令,即占用ROM的一个字节空间,那么下一条指令的地址为1001H,即执行MOVC A,@A+PC指令后,(PC)=1001H,再加上累加器(A)的内容50H,即为1051H,执行该指令就是将ROM的地址1051H处的单元内容55H取出,传送至累加器(A),因此执行结果累加器(A)=55H。值得注意的是,PC寄存器的内容没有改变。
例如,若(A)=06H,(DPTR)=3000H,执行指令JMP @A+DPTR后,(PC)=3006H,程序从ROM的3006H地址开始执行。虽然PC寄存器是只读寄存器,指令不能对其直接进行写操作,但是通过转移指令间接修改了PC寄存器的内容。
6.相对寻址
相对寻址是指程序计数器PC的当前内容(指读出该指令后,PC指向的下一条指令的地址)与指令中的操作数相加,其结果作为跳转指令的转移地址(也称目的地址)。该类寻址方式主要用于跳转指令。因此,转移的目的地址可用如下公式表示:
此种寻址方式修改了PC值,所以主要用于实现程序的分支转移。其中rel是一个带符号的8位二进制数,取值范围是-128~+127,以补码形式置于操作码之后存放。执行跳转指令时,先取出该指令,PC的内容是指向下一条指令地址,再把rel的值加到PC上以形成转移的目标地址。
例如,如图3-8所示的一段程序,图中SJMP LOOP指令存放于ROM的地址为3000H,指令汇编成指令代码后为80H 03H,占用2个字节,称之为双字节指令,其中80H为操作码,03即为操作数,接着就是转移的偏移量rel的值,利用上述的目的地址计算公式,程序计数器PC的当前内容是指向下一条指令的地址,即为3002H,故目的地址为3002H+03H=3005H,也就告知单片机下一条执行的程序的地址应为3005H,即LOOP标号处的程序,再一次说明标号就是地址的符号化。同理,利用公式的第二个等式也可知,转移指令的存储地址是3000H,转移指令的字节数是2个,故也可得出转移的目的地址也为3005H。
图3-8 相对寻址程序段图
为了方便起见,汇编程序中都有计算偏移量rel的功能。用户编写汇编源程序时,只需在相对转移指令中直接写上要转移的地址符号即可,程序汇编时会自动计算和填入。
7.位寻址
位寻址是指按位进行的寻址操作,而上述介绍的指令都是按字节进行的寻址操作。MCS-51单片机中,操作数不仅可以按字节为单位进行操作,也可以按位进行操作。当我们把某一位作为操作数时,这个操作数的地址称为位地址。
位寻址区包括专门安排在内部RAM中的两个区域:
1)内部RAM的位寻址区,地址范围是20H~2FH,共16个字节单元,128个位,位地址为00H~7FH。访问这些位有以下两种方法:
·直接使用位地址(00H~7FH)的方法
例如,MOV C,01H ;将位寻址区的第01H位的内容送至PSW寄存器中的CY位。
·字节单元地址加位数的方法
位寻址的字节单元地址有16个,范围为20H~2FH。例如,MOV C,20H.1,这条指令的功能同上,也是将位寻址区的第01H位(即20H字节单元的第1位)的内容送至PSW寄存器中的CY位,因此这两条指令是等价的。
2)专用寄存器SFR中有11个寄存器,只有83位可以位寻址,具体参见第2章中位地址的定义。观察发现,这11个可位寻址的专用寄存器的字节地址均可被8整除。访问这些专用寄存器的位有以下4种方法:
·直接使用位地址的方法
例如,PSW寄存器的位5(F0)的位地址为0D5H。如SETB 0D5H。
·位名称的方法
例如,PSW寄存器的位5是F0标志位,则可以使用F0表示该位。如SETB F0。
·字节单元地址加位数的方法
例如,PSW寄存器的字节单元地址是0D0H,要置F0位,即访问其第5位。如SETB 0D0H.5。
·专用寄存器的符号加位数的方法
例如,清除F0位,可使用指令CLR PSW.5。
一个寻址位有多种表示方法,初看起来有些复杂,但实际上这将为程序设计带来方便。
有关单片机基础及应用的文章
MCS-51单片机具有丰富的位操作指令和优异的布尔变量处理能力。进行位操作时,以进位标志位CY作为位累加器。汇编语言中位操作指令中位地址有以下4种表示形式:1)直接地址方式,如0A1H,2EH。表3-6位操作类指令注:√表示该指令影响某一标志位。直接位寻址为端口执行“读—修改—写”操作。3.位逻辑运算指令位逻辑运算指令共有6条:这两条指令可以实现位地址单元内容或取反后的值与进位位内容“与”操作,操作的结果送位CY。......
2023-11-17
这个问题称为机器指令的寻址方式,本节我们详细地讨论机器指令的寻址方式问题。设X=011表示操作数为相对寻址方式。显然,变址寻址方式的地址变化范围更大。......
2023-11-18
图5-7变量的存储种类图函数变量按其有效作用范围可以划分为局部变量和全局变量,还可以按变量的存储方式为其划分存储种类。按照默认规则,在函数体内部或复合语句内部定义的变量,如果省略存储种类说明,该变量即为自动变量。另一方面,Cx51编译器能够识别程序中使用频率最高的变量,在可能的情况下,即使程序中并未将该变量定义为寄存器变量,编译器也会自动将其作为寄存器变量来处理。......
2023-11-17
◎内容提要本章讲述MCS-51单片机的C51程序的基础知识,主要包括C51数据类型及存储类型、C51运算符及其表达式、C51流程控制语句、C51构造数据类型、C51指针的定义及使用、C51函数的定义及使用和预编译的用法。◇C51函数的定义、调用及使用时应注意的事项。※重点及难点◇C51存储类型和存储模式的区别。◇C51函数中参数的传递问题。教学目标:掌握MCS-51单片机的C51程序设计的基础知识。通过编程实例,快速掌握C51程序设计的思路和方法。......
2023-11-17
当CPU执行完任何能使PD置1的指令后,就使单片机进入掉电工作方式。退出掉电工作方式的唯一方法是硬件复位。在掉电工作方式期间,VCC可以降低到2V,但在进入掉电工作方式之前,VCC不能降低。而在准备退出掉电工作方式之前,VCC必须恢复正常的工作电压值,并维持一段时间,使振荡器重新启动并稳定。......
2023-11-17
由于用二进制代码表示的机器语言指令不便于阅读、理解和记忆,因此在MCS-51指令系统中采用汇编语言指令来编写程序。汇编语言指令最多包含4个部分:[标号:]操作码助记符 [目的操作数] [,源操作数] [;注释]指令的表示方式称为指令格式。MCS-51指令系统具有255种操作码。图3-1汇编语言指令各部分内容示意图为了更好地理解指令格式及后续指令的寻址方式,结合第2章的内容,下面通过一个例子进行说明。......
2023-11-17
8255共有3种工作方式,即方式0、方式1以及方式2。8255的“选通”是通过信号的“问”与“答”,以联络方式来实现的,所以这种数据传送方式是有条件的,适用于以查询或中断方式进行控制。3.方式2方式2是在方式1的基础上加上双向传送功能,但只有A口才能选择这种工作方式,这时A口既能输入数据又能输出数据。如果把A口置于方式2下,则B口只能工作于方式0。表8-7C口联络信号定义......
2023-11-17
当设置SCON寄存器的SM0SM1位为10时,单片机串行口进入工作方式2。图9-11串行工作方式2帧格式图1.数据的发送和接收在方式2下,字符还是8个数据位,只是增加了一个第9个数据位,而且其功能由用户确定,是一个可编程位。甲机工作于串行方式2,TB8为奇偶校验位;乙机用于接收串行数据,也工作于方式2,并对奇偶校验位进行校验,接收数据存放于RAM的60H~6FH中。......
2023-11-17
相关推荐