版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机应用技术1/81第第4 4章章 指令系统指令系统 单片机应用技术2/814.1 4.1 助记符语言助记符语言 高级语言高级语言编程简单编程简单, ,执行效率低执行效率低, ,常用在计算和管理的场合。常用在计算和管理的场合。 汇编语言汇编语言(助记符语言)编程繁琐,执行效率高,宜用于需要结构(助记符语言)编程繁琐,执行效率高,宜用于需要结构紧凑、反应快速的实时控制场合。紧凑、反应快速的实时控制场合。 助记符助记符一般是由操作码和操作数两部分组成的。操作码反映了指令一般是由操作码和操作数两部分组成的。操作码反映了指令的功能,操作数代表了指令的操作对象。的功能,操作数代表了指令的操作对象。 例
2、如,例如,ADD A,#6AHADD A,#6AH;AA+#6AH;AA+#6AH 其中其中ADDADD是操作码符号。是操作码符号。A A和和6 6AHAH是操作数。前者反映了该指令的功能是操作数。前者反映了该指令的功能是做加法,后者则表示相加的对象是是做加法,后者则表示相加的对象是A A累加器中的内容和立即数累加器中的内容和立即数6 6AHAH。 由助记符构成的编程语言一般称为汇编语言。由助记符构成的编程语言一般称为汇编语言。 目前大多数单片机的编译系统都支持目前大多数单片机的编译系统都支持C C语言编程,并可以对编译的代语言编程,并可以对编译的代码进行优化。使用码进行优化。使用C C语言编
3、程,具有编写简单、直观易读、通用性好等特语言编程,具有编写简单、直观易读、通用性好等特点,特别是控制任务比较复杂或者具有大量运算的系统中,点,特别是控制任务比较复杂或者具有大量运算的系统中,C C语言更显示语言更显示出了超越汇编语言的优势。然而,汇编语言是理解和掌握单片机原理及出了超越汇编语言的优势。然而,汇编语言是理解和掌握单片机原理及应用的基础,并且,在控制系统不太复杂、实时性要求较高的控制系统应用的基础,并且,在控制系统不太复杂、实时性要求较高的控制系统中,较多的用户还是使用汇编语言进行程序设计。中,较多的用户还是使用汇编语言进行程序设计。 4.1.1 4.1.1 概述概述 单片机应用技
4、术3/814.1.2 4.1.2 操作码操作码 操作码是指令功能的英文缩写。操作码是指令功能的英文缩写。 操作码操作码含义含义1. 1. 传送类:传送类: MOV MOV MOVX MOVX MOVC MOVC传送字节变量(数据存储器、传送字节变量(数据存储器、I/OI/O口)口)外部送数到外部送数到A A程序存储器送数到程序存储器送数到A A2. 2. 数据操作类:数据操作类: ADD ADD SUBB SUBB MUL MUL DIV DIV加加带借位减带借位减乘乘除除3. 3. 程序控制类程序控制类: AJMP AJMP(SJMPSJMP、LJMPLJMP) JZ JZ、JCJC、JBJ
5、B(JNZJNZ、JNCJNC、JNBJNB) ACALL ACALL(LCALLLCALL) RET RET CJNE CJNE绝对转移(短转移、长转移)绝对转移(短转移、长转移)有条件转移有条件转移绝对调用(长调用)绝对调用(长调用)子程序返回子程序返回第一操作数与第二操作数比较不等则转移第一操作数与第二操作数比较不等则转移4. 4. 逻辑操作类:逻辑操作类: ANL ANL ORL ORL XRL XRL与与或或异或异或单片机应用技术4/814.1.3 4.1.3 操作数操作数 操作数操作数是一条指令操作的对象。不同功能的指令,操作对象形式不同。是一条指令操作的对象。不同功能的指令,操作
6、对象形式不同。 操作数可以是数据,也可以是地址。操作数可以是数据,也可以是地址。 操作数是指令中给出的数据时,被称为立即数。它有操作数是指令中给出的数据时,被称为立即数。它有8 8位和位和1616位二进位二进制数两种。在助记符的数字前加以制数两种。在助记符的数字前加以“#”“#”来标记其是立即数,常用符号来标记其是立即数,常用符号“#“#data”data”表示。表示。 操作数也可以是存放数据的地址,这些地址可以是:操作数也可以是存放数据的地址,这些地址可以是:1.1.所选定寄存器工作区内的所选定寄存器工作区内的R R7 7R R0 0,A A、B B、C C(位)、位)、ABAB(双字节),
7、双字节),DPTRDPTR(双字节)等可编址的寄存器。双字节)等可编址的寄存器。2.2. 内部数据存储器中低内部数据存储器中低128128字节,专用寄存器字节,专用寄存器SFRSFR,可寻址的位。可寻址的位。3.3. 外部外部数据存储器空间。数据存储器空间。4.4. 程序存储器空间。程序存储器空间。 注意注意 :编写程序时,操作数的最高位大于:编写程序时,操作数的最高位大于9 9时,在操作数的最高时,在操作数的最高位前要加写位前要加写0 0。否则,编译会提示出错。例如:。否则,编译会提示出错。例如:MOV A,#0F8HMOV A,#0F8H是正确的,是正确的,而而MOV A,#F8HMOV
8、A,#F8H是不正确的。是不正确的。单片机应用技术5/814.2 4.2 指令格式及分类指令格式及分类 用助记符来描述机器指令的语言称为符号语言或汇编语言,汇编用助记符来描述机器指令的语言称为符号语言或汇编语言,汇编语言是一种面向机器的程序设计语言。其规定的格式如下:语言是一种面向机器的程序设计语言。其规定的格式如下: 标号标号:操作码助记符操作码助记符 第一操作数第一操作数,第二操作数第二操作数 , ,第三操作数第三操作数 ; ;注释注释 标号标号是表示该指令所在的符号地址,一般是由字母开头的字符串组成。是表示该指令所在的符号地址,一般是由字母开头的字符串组成。例如:例如: ABC Q3 P
9、AT D678 ABC Q3 PAT D678 均为标号的允许格式均为标号的允许格式 5 5AC -PTR +AAC -PTR +A等等 均为标号不允许的格式均为标号不允许的格式 操作码操作码助记符表示了指令的功能。助记符表示了指令的功能。 第一第一操作数操作数、第二操作数都表示操作的对象,这些是指令的核心、第二操作数都表示操作的对象,这些是指令的核心部分。指令操作码部分是必不可少的。操作数段有的指令可以没有,部分。指令操作码部分是必不可少的。操作数段有的指令可以没有,或者只有一个操作数,例如:或者只有一个操作数,例如: RETIRETI; ;中断返回,无操作数中断返回,无操作数 CPL AC
10、PL A; ;累加器逐位取反,只有一个操作数。累加器逐位取反,只有一个操作数。 注释注释字段是为方便用户阅读程序所加注的说明。字段是为方便用户阅读程序所加注的说明。 4.2.1 4.2.1 汇编语言汇编语言 单片机应用技术6/814.2.2 4.2.2 指令代码的存储格式指令代码的存储格式 指令代码是指令的二进制表示方法,是指令在存储器中存放的形指令代码是指令的二进制表示方法,是指令在存储器中存放的形式。汇编语言只有经式。汇编语言只有经“编辑编辑/ /汇编汇编”程序翻译成机器语言,才能被执行。程序翻译成机器语言,才能被执行。STC12C5410ADSTC12C5410AD单片机指令系统中的指令
11、字长有单字节、双字节、三字单片机指令系统中的指令字长有单字节、双字节、三字节三种。指令字节数越多,所占用内存单元越多。但是指令执行时间节三种。指令字节数越多,所占用内存单元越多。但是指令执行时间长短并不和所占用字节数的多少成比例。例如乘法为单字节指令,但长短并不和所占用字节数的多少成比例。例如乘法为单字节指令,但是所需的指令执行时间却最长。是所需的指令执行时间却最长。 单字节指令:操作码单字节指令:操作码 例:例:RETRET;机器代码:机器代码:2222H H 双字节指令:操双字节指令:操 作作 码操码操 作作 数数 例:例:MOV A,#0FHMOV A,#0FH;机器代码:机器代码:74
12、 074 0F HF H 三字节指令:操作码第一操作数第二操作数三字节指令:操作码第一操作数第二操作数 例:例:MOV 74H,#0BHMOV 74H,#0BH; 机器代码:机器代码:75 74 075 74 0BHBH单片机应用技术7/814.2.3 4.2.3 指令中的符号约定指令中的符号约定 符号符号含义含义A A累加器累加器ACCACCB B寄存器寄存器B BC C进(借)位标志位,在位操作指令中作为累加器使用进(借)位标志位,在位操作指令中作为累加器使用directdirect直接地址直接地址bitbit位地址,内部位地址,内部RAMRAM中的可寻址位和中的可寻址位和SFRSFR中的
13、寻址位中的寻址位# #datadata8 8位常数(位常数(8 8位立即数)位立即数)# #data16data161616位常数(位常数(1616位立即数)位立即数)间接寻址间接寻址relrel8 8位带符号偏移量。位带符号偏移量。RnRn当前工作区(当前工作区(0 03 3区)的工作寄存器(区)的工作寄存器(n=0,1,7n=0,1,7)RiRi可作地址寄存器的工作寄存器可作地址寄存器的工作寄存器R0R0和和R1R1(i=0,1i=0,1)(X X)X X寄存器内容寄存器内容(X X)由由X X寄存器寻址的存储单元的内容寄存器寻址的存储单元的内容表示数据的传送方向表示数据的传送方向/ /表
14、示位操作数取反表示位操作数取反表示逻辑与操作表示逻辑与操作表示逻辑或操作表示逻辑或操作表示逻辑异或操作表示逻辑异或操作单片机应用技术8/814.3 4.3 寻址方式寻址方式 指令中的源操作数是立即数,叫做立即寻址。立即数的类型可指令中的源操作数是立即数,叫做立即寻址。立即数的类型可以是:二进制以是:二进制(B)(B)、十进制、十六进制、十进制、十六进制(H)(H)、整数、序数或者字符。、整数、序数或者字符。立即数的字长可以是立即数的字长可以是8 8位或位或1616位。位。例如例如: MOV A,#61HMOV A,#61H这条指令是把这条指令是把61H61H这个数据送入到累加器这个数据送入到累
15、加器A A中。中。例如例如: MOV DPTRMOV DPTR,#,#2050H2050H这条指令是把这条指令是把2050H2050H这个数据送入到数据指针这个数据送入到数据指针DPTRDPTR中。中。1 1立即寻址立即寻址 操作数是指令的重要组成部分,它指定了参与运算的数或数所在操作数是指令的重要组成部分,它指定了参与运算的数或数所在单元地址,而如何得到这个地址就称为寻址方式。一般来说,寻址方单元地址,而如何得到这个地址就称为寻址方式。一般来说,寻址方式越多,计算机功能越强,灵活性越大。所以寻址方式对机器的性能式越多,计算机功能越强,灵活性越大。所以寻址方式对机器的性能有重大影响。有重大影响
16、。STC12C5410ADSTC12C5410AD单片机共有单片机共有7 7种寻址方式,描述如下:种寻址方式,描述如下:0111010001100001PC操作码立即数ACC中0E0H61H单片机应用技术9/812 2直接寻址直接寻址 直接寻址就是在指令中包含了操作数的地址,该地址直接给出直接寻址就是在指令中包含了操作数的地址,该地址直接给出了参加运算或传送的单元或位。它可访问三种地址空间:了参加运算或传送的单元或位。它可访问三种地址空间: (1 1) 特殊功能寄存器特殊功能寄存器SFRSFR:直接寻址是唯一的访问形式直接寻址是唯一的访问形式 (2 2) 内部数据内部数据RAMRAM中的中的0
17、000H H7FH7FH的的128128个字节单元个字节单元 (3 3) 位地址空间位地址空间 例如:例如:MOV A,60H ;MOV A,60H ;把把60H60H单元内容送入累加器单元内容送入累加器A A中。中。 1110010101100000操作码直接地址ACC 0E0HPC60H程序存储器RAM89H89H单片机应用技术10/813 3寄存器寻址寄存器寻址 指定某一可寻址的寄存器的内容为操作数,对寄存器指定某一可寻址的寄存器的内容为操作数,对寄存器ACCACC,B B,DPTRDPTR和和CYCY(进位标志,也是布尔处理机的累加器),其寻址时具体的进位标志,也是布尔处理机的累加器)
18、,其寻址时具体的寄存器已隐含在其操作码中。而对选定的寄存器已隐含在其操作码中。而对选定的8 8个工作寄存器个工作寄存器R R7 7R R0 0,则用则用指令操作码的低指令操作码的低3 3位指明所用的寄存器。在应用中,可以先通过位指明所用的寄存器。在应用中,可以先通过PSWPSW中中的的RS1RS1、RS0RS0两位来选择寄存器组,再用操作码中低两位来选择寄存器组,再用操作码中低3 3位来确定是组内哪位来确定是组内哪一个寄存器,达到寻址的目的。一个寄存器,达到寻址的目的。 例如:例如:INC R5INC R5; ;把寄存器把寄存器R3R3的内容加的内容加1 1后再送回后再送回R5R5000011
19、01110000RS1RS0PSWALU内部RAMPC D5D6D7单片机应用技术11/814 4寄存器间接寻址寄存器间接寻址 指令指定某一寄存器的内容作为操作数地址。指令指定某一寄存器的内容作为操作数地址。 STC12C5410AD STC12C5410AD单片机中可用来间接寻址的寄存器有:选定工作寄存器区的单片机中可用来间接寻址的寄存器有:选定工作寄存器区的R R0 0、R R1 1,1616位的数据指针位的数据指针DPTRDPTR,使用时前面加使用时前面加 表示间接寻址。表示间接寻址。 例如例如:MOV A MOV A , ,R0 R0 ; ;将将R0R0中的内容所表示的地址单元中的内容
20、送给中的内容所表示的地址单元中的内容送给A A MOVX MOVX DPTP DPTP , ,A A1110011 00D5D6D700110111RS1 RS00110000000110111内部RAM000021形成8位地址34PSW A 单片机应用技术12/815 5变址寻址变址寻址 由指令指定的偏移量寄存器和变址寄存器由指令指定的偏移量寄存器和变址寄存器DPTRDPTR或或PCPC相相加所得结果作为操作数地址。加所得结果作为操作数地址。 例如例如:MOVC A MOVC A , ,A+PCA+PC 其中其中A A作为偏移量寄存器,作为偏移量寄存器,PCPC作为变址寄存器,作为变址寄存器
21、,A A中内中内容为无符号数和容为无符号数和PCPC相加,从而得到其真正的操作数地址。相加,从而得到其真正的操作数地址。单片机应用技术13/816 6相对寻址相对寻址 把指令中给定的地址偏移量与本指令所在单元地址(即程序计数把指令中给定的地址偏移量与本指令所在单元地址(即程序计数器器PCPC中的内容)相加,即得到真正的程序转移地址。与变址方式不同。中的内容)相加,即得到真正的程序转移地址。与变址方式不同。该偏移量有正、负号,在该机器指令中必须以补码形式给出,所转移该偏移量有正、负号,在该机器指令中必须以补码形式给出,所转移的范围为相对于当前的范围为相对于当前PCPC值的值的-128-128+1
22、27+127之间。之间。 例如例如:JC 80HJC 80H 若若C=0C=0,则则PCPC值不变,若进位值不变,若进位C=1C=1,则以现行的则以现行的PCPC为基地址加上为基地址加上8080H H得到转向地址。得到转向地址。 1005H0100000010000000PC+11006HPC+2ALU1007H PC操作码偏移量1007H-80H=0F87H0F87HPC1007H单片机应用技术14/817 7位寻址位寻址 支持位单元存取操作是支持位单元存取操作是STC12C5410ADSTC12C5410AD单片机的一个主要特点。单片机的一个主要特点。位操作指令能对位地址空间的每一位都可进
23、行运算和传送操作。位操作指令能对位地址空间的每一位都可进行运算和传送操作。例如:例如:MOV C,P1.0MOV C,P1.0; ;将将P1.0P1.0的状态传送到的状态传送到C C SETB 20.6H SETB 20.6H ; ;将将2020H H单元的第单元的第6 6位置为位置为1 1 MOV A,50HMOV A,50H;50H;50H是字节地址是字节地址 MOV C,50H MOV C,50H ;50H;50H是位地址是位地址 MOV 60H,50HMOV 60H,50H;50H;50H是字节地址是字节地址单片机应用技术15/814.4 4.4 数据传送类指令数据传送类指令 数据传送
24、类指令是使用频率最高的一类数据传送类指令是使用频率最高的一类指令。主要用来给指令。主要用来给STC12C5410ADSTC12C5410AD系统的内部系统的内部和外部资源赋值,进行堆栈的存取操作等。和外部资源赋值,进行堆栈的存取操作等。数据传送类指令执行前后,对程序状态字数据传送类指令执行前后,对程序状态字PSWPSW不产生影响。按其操作方式,又可把它不产生影响。按其操作方式,又可把它们分为三种:们分为三种: 数据传送数据传送 数据交换数据交换 栈操作栈操作 单片机应用技术16/814.4.1 4.4.1 数据传送指令数据传送指令 格式:格式:MOV MOV , 功能:把第二操作数指定的字节变
25、量传送功能:把第二操作数指定的字节变量传送到由第一操作数指定的单元中,不影响源字节,到由第一操作数指定的单元中,不影响源字节,不影响任何别的寄存器或标志。这是最灵活的不影响任何别的寄存器或标志。这是最灵活的操作,允许操作,允许1515种源和目的寻址方式组合。种源和目的寻址方式组合。一、一、 MOV指令指令单片机应用技术17/811. 1. 立即数送累加器立即数送累加器A A和内部数据存储器(和内部数据存储器(RnRn,内部内部RAMRAM,SFRSFR)。共有共有4 4条指令:条指令:MOV A, #data MOV A, #data ; ;(A A) #data #dataMOV direc
26、tMOV direct, ,#data #data ; ;(directdirect) #data #dataMOV MOV RiRi, #data , #data ; ;(RiRi) #data #dataMOV MOV RnRn, #data , #data ; ;(RnRn) #data #data 符号表示间接寻址,(符号表示间接寻址,(RiRi)表示把立即数送到由表示把立即数送到由RiRi寄存器的内容所寄存器的内容所指出的那个指出的那个RAMRAM单元中去。单元中去。RiRi中中i=0i=0或或i=1i=1。例例1 1 MOV MOV RR0 0,#56H,#56H MOV MOV
27、RR1 1,#59H,#59H 假设假设R0R0的内容为的内容为2020H H,则执行上述第一条指令后则执行上述第一条指令后,立即数立即数5656H H将送入内部将送入内部数据数据RAMRAM字节地址为字节地址为2020H H的单元中。的单元中。例例2 2 MOVMOVR R0 0,#79H,#79H ; ;将立即数将立即数7979H H送到送到R0R0中中 MOVMOVR R1 1,#15H,#15H ; ;将立即数将立即数1515H H送到送到R1R1中中例例3 3 利用直接寻址可把立即数送入内部数据利用直接寻址可把立即数送入内部数据RAMRAM任意单元或任意单元或SFRSFR中任一特殊功
28、中任一特殊功能寄存器,如例能寄存器,如例1 1用间接寻址给内部用间接寻址给内部RAM 20HRAM 20H单元送立即数单元送立即数5656H H,需两条指令:需两条指令: MOVMOVR R0 0,#20H,#20H MOV MOVRR0 0,#56H,#56H 用直接寻址只用一条指令:用直接寻址只用一条指令: MOVMOV20H,#56H20H,#56H 而指令而指令MOVMOVP1,#80HP1,#80H 则可把立即数则可把立即数8080H H直接送入直接送入P1P1(字节地址为字节地址为9090H H)口中。口中。单片机应用技术18/81 2.2.内部数据存储器(内部数据存储器(RnRn
29、,内部内部RAMRAM,SFRSFR)与累加器与累加器A A传送数据传送数据共有共有6 6条指令:条指令: MOV AMOV A, , direct direct; ;(A A) (directdirect) MOV A, MOV A, RiRi ; ;(A A) (RiRi) MOV A, MOV A, RnRn ; ;(A A) (RnRn) MOV directMOV direct, , A A ; ;(directdirect) (A A) MOV MOV RiRi, A , A ; ;(RiRi) (A A) MOV MOV RnRn, A , A ; ;(RnRn)(A A) 间接
30、寻址间接寻址 RiRi是以是以RiRi的内容作为地址,由于的内容作为地址,由于RiRi为八位寄存器,寻址范围为八位寄存器,寻址范围为为0 0255255。但由于特殊功能寄存器。但由于特殊功能寄存器SFRSFR只能被直接寻址,而只能被直接寻址,而对于普通的对于普通的8051单片机来说,单片机来说,在在SFRSFR地址范围(地址范围(128128255255)中很多单元又无定义,若对之读)中很多单元又无定义,若对之读写,将得不到确定的值,写入的数也将丢失。所以对内部数据存储器来说间写,将得不到确定的值,写入的数也将丢失。所以对内部数据存储器来说间接寻址的真正作用范围实际上只有接寻址的真正作用范围实
31、际上只有0 0127127个单元的内部数据个单元的内部数据RAMRAM地址。地址。 例例4 4 指令序列:指令序列: MOV R1, #82HMOV R1, #82H MOV A, R1 MOV A, R1 上述指令对于普通上述指令对于普通80518051单片机是不正确的,因为单片机是不正确的,因为8282H H是特殊功能寄存器是特殊功能寄存器DPLDPL的地址值,对特殊功能寄存器来说,这种间接寻址方式无效。但是,对的地址值,对特殊功能寄存器来说,这种间接寻址方式无效。但是,对于于STC12C5410ADSTC12C5410AD单片机而言则是正确的,其功能是将内部单片机而言则是正确的,其功能是
32、将内部RAMRAM的的8282H H单元中的单元中的内容送到内容送到A A中。并且,对于中。并且,对于80528052的内部的内部80H80HFFHFFH的的RAMRAM单元,只能使用这种间单元,只能使用这种间接寻址方式进行访问。接寻址方式进行访问。 所以欲从所以欲从DPLDPL取数到累加器取数到累加器A A,可用直接寻址方式:可用直接寻址方式:MOV A, 82HMOV A, 82H单片机应用技术19/813.3.内部数据存储器中内部数据存储器中RnRn、SFRSFR和内部数据和内部数据RAMRAM之间的数据传送之间的数据传送, ,共有共有5 5条条指令:指令: MOV direct, di
33、rect MOV direct, direct ; ;(directdirect目目) (directdirect源源) MOV directMOV direct, RiRi ; ;(directdirect)(RiRi) MOV direct, MOV direct, RnRn ; ;(directdirect)(RnRn) MOV MOV RiRi, direct , direct ; ;(RiRi)(directdirect) MOV MOV RnRn, direct , direct ; ;(RnRn)(directdirect) 该该5条指令共有三种寻址方式:直接寻址,寄存器寻址,寄
34、存器间接寻址。条指令共有三种寻址方式:直接寻址,寄存器寻址,寄存器间接寻址。对于直接寻址方式,可访问内部对于直接寻址方式,可访问内部RAM 00H7FH地址空间的单元和所有特殊功地址空间的单元和所有特殊功能寄存器,对能寄存器,对80HFFH地址单元需要使用寄存器简介寻址方式进行访问。地址单元需要使用寄存器简介寻址方式进行访问。 例例5 5 指令指令 MOV P3, P1MOV P3, P1 可把可把P1P1口的内容直接送到口的内容直接送到P3P3口输出,而不必经过累加器口输出,而不必经过累加器A“A“中转中转”。 例例6 6 若设若设PSWPSW中标志位中标志位RS1RS1、RS0RS0为为“
35、11”“11”,则选中第三组工作寄存器区,则选中第三组工作寄存器区,在,在 这种情况下:这种情况下: MOV direct, R0MOV direct, R0 与与 MOV direct, 18HMOV direct, 18H两指令是等价的。两指令是等价的。 例例7 7 用立即寻址指令可直接给内部用立即寻址指令可直接给内部RAMRAM中中2020H H、25H25H和和P1P1口上置数:口上置数: MOV 20H, #25HMOV 20H, #25H MOV 25H, #10H MOV 25H, #10H MOV P1 , #0CAH MOV P1 , #0CAH执行后使(执行后使(2020H
36、 H)=25H=25H,(,(25H25H)=10H=10H,(,(P1P1)=0CAH=0CAH。单片机应用技术20/81 4.4. 目标地址传送目标地址传送, ,只有一条指令:只有一条指令: MOV DPTR ,#data16 MOV DPTR ,#data16 功能:把功能:把1616位常数装入数据指针。位常数装入数据指针。 例例8 8 指令指令 MOV DPTR ,#2003HMOV DPTR ,#2003H 表示把表示把1616位常数装入数据指针。其中位常数装入数据指针。其中DPH=20HDPH=20H,DPL=03HDPL=03H。单片机应用技术21/81二、外部数据存储器与累加器
37、二、外部数据存储器与累加器A A传送指令传送指令MOVXMOVX MOVX MOVX指令主要用于累加器指令主要用于累加器A A和外部扩充的和外部扩充的RAMRAM或扩展或扩展I/OI/O口进行数据传口进行数据传送。这种传送只有一种寻址方式,就是寄存器间接寻址。送。这种传送只有一种寻址方式,就是寄存器间接寻址。有两种寄存器间有两种寄存器间接寻址:接寻址: 1)用)用R1或或R0进行寄存器间接寻址。在传统的进行寄存器间接寻址。在传统的8051单片机中,这种单片机中,这种方式能访问外部数据存储器(或扩展方式能访问外部数据存储器(或扩展I/O口)口)256个字节中的一个字节。若个字节中的一个字节。若要
38、访问更大的空间,需使用要访问更大的空间,需使用P2口输出高口输出高8位地址。需先给位地址。需先给P2和和Ri赋值,然赋值,然后执行后执行MOVX指令。指令。在在STC12C5410AD单片机中,由于不再支持外部总单片机中,由于不再支持外部总线的扩展,因此,使用线的扩展,因此,使用R1或者或者R0间接寻址外部存储器时,不再需要由间接寻址外部存储器时,不再需要由P2口输出地址高口输出地址高8位,执行该指令时,也不会对位,执行该指令时,也不会对I/O口的内容造成任何影响。口的内容造成任何影响。 2)用)用16位的数据存储器地址指针位的数据存储器地址指针DPTR进行寄存器间接寻址。进行寄存器间接寻址。
39、 指令格式:指令格式:MOVX MOVX , MOVX A, DPTR MOVX A, DPTR ; ;(A A)(DPTRDPTR) MOVX A, MOVX A, RiRi ; ;(A A)(RiRi) MOVX DPTR,A MOVX DPTR,A ; ;(DPTRDPTR)(A A) MOVX MOVX RiRi, A , A ; ;(RiRi)(A A)在实际应用中,一般使用在实际应用中,一般使用DPTR寄存器间接寻址方式访问外部数据存储器。寄存器间接寻址方式访问外部数据存储器。 例例 若外部数据存储器单元中:(若外部数据存储器单元中:(30073007H H)= =(60H60H)
40、,(),(3008H3008H)= =(2FH2FH)则执行:则执行: MOV DPTR ,#3007HMOV DPTR ,#3007H MOVX A, DPTR MOVX A, DPTR使累加器(使累加器(A A)=60H=60H单片机应用技术22/81三、程序存储器向累加器三、程序存储器向累加器A A传送指令传送指令MOVCMOVC 对于程序存储器,对于程序存储器,STC12C5410ADSTC12C5410AD单片机提供了两条极其有用的单片机提供了两条极其有用的查表指令。这两条指令采用变址寻址,以查表指令。这两条指令采用变址寻址,以PCPC或或DPTRDPTR为基址寄存器,为基址寄存器,
41、以累加器以累加器A A为变址寄存器,基址寄存器与变址寄存器内容相加即得为变址寄存器,基址寄存器与变址寄存器内容相加即得到程序存储器某单元的地址值,到程序存储器某单元的地址值,MOVCMOVC指令则把该存贮单元的内容指令则把该存贮单元的内容传送到累加器传送到累加器A A中。中。 指令格式:指令格式:MOVC A ,A+PCMOVC A ,A+PC ; PC ; PC(PCPC)+1 +1 (A A)(A A)+ +(PCPC) MOVC A ,A+DPTR ; MOVC A ,A+DPTR ; (A A)(A A)+ +(DPTRDPTR) 功能:把累加器功能:把累加器A A中内容与基址寄存器(
42、中内容与基址寄存器(PCPC、DPTRDPTR)内容相加,内容相加,求得程序存储器某单元地址,再把该地址单元内容送累加器求得程序存储器某单元地址,再把该地址单元内容送累加器A A。指指令执行后不改变基址寄存器内容,由于执行令执行后不改变基址寄存器内容,由于执行1616位加法,从低位加法,从低8 8位产位产生的进位将传送到高位去,不影响任何标志。这两条指令主要用生的进位将传送到高位去,不影响任何标志。这两条指令主要用于查表,即完成从程序存储器读取数据的功能。但由于两条指令于查表,即完成从程序存储器读取数据的功能。但由于两条指令使用的基址寄存器不同,因此使用范围也不同。使用的基址寄存器不同,因此使
43、用范围也不同。单片机应用技术23/81 MOVC A ,A+PCMOVC A ,A+PC 以以PCPC作为基址寄存器,在作为基址寄存器,在CPUCPU取完指令操作码时取完指令操作码时PCPC会自动加会自动加1 1,指向下一条指令的第一字节地址,所以这时作为基址寄存器的指向下一条指令的第一字节地址,所以这时作为基址寄存器的PCPC已已不是原值,而是不是原值,而是PC+1PC+1值。因为累加器中的内容为值。因为累加器中的内容为8 8位无符号整数,位无符号整数,这就使得本指令查表范围只能在以这就使得本指令查表范围只能在以PCPC当前值开始后的当前值开始后的256256个字节范个字节范围内围内, ,
44、偏移量的计算公式如下:偏移量的计算公式如下: 偏移量:偏移量: DIS = DIS = 表首地址表首地址 (该指令所在地址(该指令所在地址+1+1) 例例1 1 若要根据累加器若要根据累加器A A的内容找出由伪指令的内容找出由伪指令DBDB所定义的四个值所定义的四个值中的一个。可用下列程序:中的一个。可用下列程序:ppqqppqq: ADD A ,#01HADD A ,#01Hppqq+2ppqq+2: MOVC A ,A+PCMOVC A ,A+PCppqq+3ppqq+3: RETRETppqq+4ppqq+4:STARSTAR: DB 66H DB 66H DB 77HDB 77H DB
45、 88HDB 88H DB 99HDB 99H单片机应用技术24/81 MOVC A ,A+DPTRMOVC A ,A+DPTR 指令基址寄存器为数据指针指令基址寄存器为数据指针DPTRDPTR,表格常数可设置在表格常数可设置在6464K K程序存储器的程序存储器的任何地址空间,而不必像任何地址空间,而不必像MOVC A ,A+PCMOVC A ,A+PC指令只设在指令只设在PCPC值以下的值以下的256256个单元个单元中。其缺点是若中。其缺点是若DPTRDPTR已有它用,在赋表首地址之前必须保护现场,执行完已有它用,在赋表首地址之前必须保护现场,执行完查表后再予以恢复。查表后再予以恢复。例
46、例2 2 试编制根据累加器试编制根据累加器A A中的数(中的数(0 09 9之间)查其平方表的子程序。之间)查其平方表的子程序。 COUNTCOUNT: PUSH DPH PUSH DPH ; ;保护保护DPTRDPTR内容内容 PUSH DPL PUSH DPL ; ; MOV DPTR ,#TABLE MOV DPTR ,#TABLE; ;赋表首址赋表首址DPTRDPTR MOVC A ,A+DPTR MOVC A ,A+DPTR ; ;据据A A中内容查表中内容查表 POP DPL POP DPL ; ;恢复恢复DPTRDPTR原内容原内容 POP DPH POP DPH RET RET
47、 ; ;返回主程序返回主程序 TABLETABLE: DB 00 DB 00 DB 01 DB 01 DB 04 DB 04 DB 09 DB 09 DB 16 DB 16 DB 25 DB 25 DB 36 DB 36 DB 49 DB 49 DB 64 DB 64 DB 81 DB 81单片机应用技术25/814.4.2 4.4.2 数据交换指令数据交换指令 1 1字节交换指令字节交换指令 XCH A,direct XCH A,direct ; ;(A A) (directdirect) XCH XCH A,RiA,Ri ; ;(A A) (RiRi) XCH XCH A,RnA,Rn ;
48、 ;(A A) (RnRn) 上述指令把累加器上述指令把累加器A A中内容与第二操作数所指定的工作寄存器,中内容与第二操作数所指定的工作寄存器,间接寻址和直接寻址的某单元内容互相交换。间接寻址和直接寻址的某单元内容互相交换。例例 设(设(R0R0)=20H=20H,(,(A A)=3FH=3FH,(,(20H20H)=75H=75H,执行指令执行指令 XCH A,R0XCH A,R0 将使(将使(A A)=75H=75H,(,(20H20H)=3FH=3FH,实现了累加器实现了累加器A A和内部和内部RAM RAM 20H20H单元内容的互换。单元内容的互换。 单片机应用技术26/81 2 2
49、半字节交换指令半字节交换指令 XCHD XCHD A,RiA,Ri ; ;(A A3030)(RiRi)3030) 该指令把累加器该指令把累加器A A的低的低4 4位和寄存器间接寻址的内部位和寄存器间接寻址的内部RAMRAM单元的低单元的低4 4位交换,高位交换,高4 4位内容不变,不影响标志位。位内容不变,不影响标志位。 例例 设设R1R1的内容为的内容为3030H H,A A的内容为的内容为6767H H,内部内部RAMRAM中中3030H H的内容为的内容为8484H H,执行指令执行指令 XCHD A,R1 XCHD A,R1 结果:(结果:(A A)=64H=64H,(,(30H30
50、H)=87H=87H单片机应用技术27/814.4.3 4.4.3 栈操作指令栈操作指令 PUSH direct PUSH direct; ;(SPSP)(SPSP)+1+1(SPSP)(directdirect) POP direct POP direct; ;(directdirect)(SPSP)()(SPSP)(SPSP)- 1- 1 堆栈中的数据是以堆栈中的数据是以“后进先出后进先出”的结构方式处理的,这种的结构方式处理的,这种“后进先出后进先出”的特点是由堆栈指针的特点是由堆栈指针SPSP来控制的,来控制的,SPSP用来自动跟踪栈顶地址。由于单片机堆用来自动跟踪栈顶地址。由于单片机
51、堆栈编址采用向上生成方式,即栈底占用较低地址,栈顶占用较高地址,所以栈编址采用向上生成方式,即栈底占用较低地址,栈顶占用较高地址,所以其过程为:其过程为: 入栈操作:先(入栈操作:先(SPSP)+1+1(SPSP),),指向栈顶的上一个空单元,后把直接指向栈顶的上一个空单元,后把直接寻址单元的内容压入寻址单元的内容压入SPSP所指的单元中。所指的单元中。 出栈操作:先弹出栈顶内容到直接寻址单元,后(出栈操作:先弹出栈顶内容到直接寻址单元,后(SPSP)- 1- 1(SPSP),),形形成新的堆栈指针。成新的堆栈指针。例例 PUSH ACC ;PUSH ACC ;保护累加器保护累加器ACCACC
52、中内容中内容 PUSH PSW PUSH PSW ; ;保护标志寄存器内容保护标志寄存器内容 ; ; 执行服务程序执行服务程序 POP PSW POP PSW ; ;恢复标志寄存器内容恢复标志寄存器内容 POP ACC ;POP ACC ;恢复累加器恢复累加器ACCACC中内容中内容 该程序执行后,累加器该程序执行后,累加器ACCACC和和PSWPSW寄存器中的内容可得到正确的恢复。寄存器中的内容可得到正确的恢复。 若为:若为: PUSH ACCPUSH ACC PUSH PSW PUSH PSW POP ACC POP ACC POP PSW POP PSW 则执行后,将使得则执行后,将使得
53、ACCACC和和PSWPSW中的内容互换。中的内容互换。单片机应用技术28/81在数据传送类操作中应注意以下几点:在数据传送类操作中应注意以下几点: 1 1除了用除了用POPPOP或或MOVMOV指令将数据传送到指令将数据传送到PSWPSW外,传送操作一般不影响外,传送操作一般不影响标志位。标志位。 2 2执行传送类指令时,把源地址单元的内容送到目的地址单元后,执行传送类指令时,把源地址单元的内容送到目的地址单元后,源地址单元中的内容不变。源地址单元中的内容不变。 3 3对特殊功能寄存器对特殊功能寄存器SFRSFR的操作必须使用直接寻址,也就是说,直的操作必须使用直接寻址,也就是说,直接寻址是
54、访问接寻址是访问SFRSFR的唯一方式。的唯一方式。 4. 4.对于对于80528052单片机内部单片机内部RAMRAM的的80H80HFFHFFH单元只能使用单元只能使用 RiRi间接寻址方间接寻址方式访问式访问 5 5将累加器将累加器ACCACC压入堆栈或弹出堆栈时,应使用压入堆栈或弹出堆栈时,应使用PUSH ACCPUSH ACC和和POP POP ACCACC指令,不能使用指令,不能使用PUSH APUSH A和和POP APOP A指令。否则,程序编译会出错。指令。否则,程序编译会出错。单片机应用技术29/814.5 4.5 逻辑操作类指令逻辑操作类指令 逻辑操作类指令共有逻辑操作类
55、指令共有2424条,包括与、或、清除、求反、条,包括与、或、清除、求反、左右移位等逻辑操作。按操作数可划分为单操作数和双操左右移位等逻辑操作。按操作数可划分为单操作数和双操作数两种。作数两种。 单操作数是专门对累加器单操作数是专门对累加器A A进行的逻辑操作,这些操进行的逻辑操作,这些操作主要是:清作主要是:清0 0、求反、左右移位等,操作结果保存在累、求反、左右移位等,操作结果保存在累加器加器A A中。中。 双操作数主要是累加器双操作数主要是累加器A A和第二操作数之间执行逻辑和第二操作数之间执行逻辑与、或和异或操作,第二操作数可以是立即数,也可以是与、或和异或操作,第二操作数可以是立即数,
56、也可以是内部数据存储器的内部数据存储器的RnRn、内部数据内部数据RAMRAM单元或者单元或者SFRSFR。其对应其对应的寻址方式是:寄存器、寄存器间接、直接寻址。逻辑操的寻址方式是:寄存器、寄存器间接、直接寻址。逻辑操作的结果保存在作的结果保存在A A中。也可将直接寻址单元作为第一操作中。也可将直接寻址单元作为第一操作数,和立即数,累加器数,和立即数,累加器A A执行逻辑与、或和异或操作,结执行逻辑与、或和异或操作,结果存在直接寻址单元中。果存在直接寻址单元中。单片机应用技术30/81左移左移带进位左移带进位左移单操作数单操作数CyD0D7CyD0D7CyD0D7CyD0D7D0D7D4 D
57、3低4位高4位交换RnRiaddressdata#(A A)/A/Adata#AANLANL(ORLORL,XRLXRL) A,A,ANLANL(ORLORL,XRLXRL)directdirect, ,异或异或或或(A A)AXAX(A A)AVXAVX(A A)AXAX其中,其中,X X代表第二操作数代表第二操作数directdirectYdirectdirectYdirectdirect VYdirectdirect VYdirectdirectYdirectdirectY其中,其中,Y Y代表代表A A或者或者#data#data与与双操作数双操作数SWAP ASWAP A4 4位环移
58、位环移RRC ARRC A带进位右移带进位右移RR ARR A右移右移RLC ARLC ARL ARL ACPL ACPL A取反取反(A A)00CLR ACLR A清零清零执行结果执行结果指令形式指令形式功能功能单片机应用技术31/814.5.1 4.5.1 对累加器对累加器A A进行的逻辑操作进行的逻辑操作 1. 1. 累加器累加器A A清清0 0指令:指令: CLR A ;CLR A ;(A A)00功能:把功能:把0000H H送入累加器送入累加器A A中中2. 2. 累加器累加器A A求反求反指令:指令: CPL A;CPL A;(A A)()()功能:把累加器内容求反后送入累加器
59、功能:把累加器内容求反后送入累加器A A中。中。例例 设累加器原来内容为设累加器原来内容为0707H H,则执行则执行CLR A CLR A 后将变成后将变成0000H H,再执行再执行CPL ACPL A后将变为后将变为0 0FFHFFH。单片机应用技术32/813. 3. 累加器累加器A A左右移位左右移位 RL ARL A; ;累加器左循环移位累加器左循环移位 RLC ARLC A; ;累加器通过累加器通过C C左循环移位左循环移位 RR ARR A; ;累加器右循环移位累加器右循环移位 RRC ARRC A; ;累加器通过累加器通过C C右循环移位右循环移位 SWAP ASWAP A;
60、 ;交换累加器两个半字节交换累加器两个半字节(4(4位循环移位位循环移位) ) 左移一位相当于乘左移一位相当于乘2 2。例例 MOV A ,#01HMOV A ,#01H;01H;01H送累加器送累加器A A RL A RL A ;02H;02H送送A A RL A RL A ;04H;04H送送A A RL A RL A ;08H;08H送送A A 右移一位相当于除右移一位相当于除2 2,上述累加器(,上述累加器(A A)=08H=08H,执行指令:执行指令: RR A RR A ; ;(A A)04H04H RR A RR A ; ;(A A)02H02H RR A RR A ; ;(A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年辽宁特殊教育师范高等专科学校单招职业技能笔试模拟试题带答案解析
- 2026年重庆科创职业学院高职单招职业适应性测试模拟试题带答案解析
- 2025年国企团委书记笔试题及答案
- 2025年临汾人事考试及答案
- 《国际快递实务》课件-4.4 物联网技术
- Unit5Whatanadventure!Usinglanguage课件-高中英语外研版
- 征收补偿协议书纠份案例
- 政府投资基金协议书范本
- 胶粘剂安全生产培训课件
- 未来五年塑钢拉门行业市场营销创新战略制定与实施分析研究报告
- 项目管理入门:WBS任务分解详解
- 花都区2024-2025学年第一学期六年级英语期末学业测评考点及答案
- 2025年iba事业单位面试题库及答案
- 口腔会员协议书
- 【《77500WDT散货船总体结构方案初步设计》18000字】
- 【妇产科学9版】第18章外阴及阴道炎症
- 部们凝聚力培训
- 燃油导热油锅炉施工方案
- 【地理 】人口分布课件2025-2026学年高中地理人教版必修二
- 检验检测机构质量培训
- 2026四川农商银行校园招聘1065人考试笔试备考试题及答案解析
评论
0/150
提交评论