《单片机原理与应用技术》电子课件 第3章.ppt_第1页
《单片机原理与应用技术》电子课件 第3章.ppt_第2页
《单片机原理与应用技术》电子课件 第3章.ppt_第3页
《单片机原理与应用技术》电子课件 第3章.ppt_第4页
《单片机原理与应用技术》电子课件 第3章.ppt_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第3章 MCS-51单片机的指令系统 与C语言程序设计,一般格式为: 标号:操作码 目的操作数,源操作数;注释,在两个操作数的指令中,通常目的操作数写在左边,源操作数写在右边。,3.1.1 MCS-51单片机指令格式,标号是程序员根据编程需要给指令设定的符号地址,可有可无。标号由18个字符组成,第一个字符必须是英文字母,不能是数字或其他符号,标号后必须用冒号。,操作码是指令的核心部分,用于指示机器执行何种操作,操作数是表示指令操作的对象,操作数可以是一个具体的数据,也可以是参加运算的数据所在的地址。,注释是对指令的解释说明,用以提高程序的可读性,注释前必须加分号。,3.1 概述,MCS-51单

2、片机指令系统按指令所占的字节数可分为以下三类: (1)单字节指令(49条) 例如:INC DPTR (2)双字节指令(46条) 例如:MOV A,# data (3)三字节指令(16条) 例如:MOV DPTR,#datal6,3.1.2 指令的字节,3.1.3 MCS-51单片机的助记符语言,指令的助记符用英文单词或缩写字母来表征指令功能,以便于人们识别、读/写、记忆和交流,常用于程序设计。 MCS-51指令系统中,操作码采用了42种助记符。,3.1.4 常用符号说明,3.2 寻址方式,寻址方式是指寻找操作数或指令的地址的方式。,MCS-51的寻址方式有七种。即:立即寻址、直接寻址、寄存器寻

3、址、寄存器间接寻址、变址寻址、位对寻址和相对寻址。,若不特别声明,我们后面提到的寻址方式均指源操作数的寻址方式。,指令中直接给出操作数的寻址方式称为立即寻址。立即数可以为一个字节,也可以是两个字节,并要用符号“”来标识。由于立即数是一个常数,所以只能作为源操作数。 立即寻址所对应的寻址空间为:ROM,3.2.1 立即寻址,如: MOV A,#30H ;A30H MOV DPTR,#1638H ;DPH16H,DPL38H,3.2.2 直接寻址,指令操作码之后的字节存放的是操作数的地址,操作数本身存放在该地址指示的存储单元中的寻址方式称为直接寻址。,直接寻址中的SFR经常采用符号形式表示。 寻址

4、空间为:片内RAM低128字节、SFR。,3.2.3 寄存器寻址,操作数存放在寄存器中,指令中直接给出该寄存器名称的寻址方式。可以获得较高的传送和运算速度。,寄存器可以是:R0R7、A、B、DPTR。,例: MOV A,R1;AR1,寄存器中的内容为地址,从该地址去取操作数的寻址方式称为寄存器间接寻址 。,寻址的存储空间为片内RAM或片外RAM。,片内RAM的数据传送采用“MOV”类指令,间接寻址寄存器采用寄存器R0或R1(堆栈操作时采用SP)。,片外RAM的数据传送采用“MOVX”类指令,这时间接寻址寄存器有两种选择:一是采用R0和R1作间址寄存器,这时R0或R1提供低8位地址(外部RAM多

5、于256字节采用页面方式访问时,可由P2口未使用的I/O引脚提供高位地址);二是采用DPTR作为间址寄存器。,3.2.4 寄存器间接寻址,例: MOV R0,#30H ;R030H MOV A,R0 ;A(R0) 即A(30H),寄存器间接寻址对应的空间为: 片内RAM(采用R0,R1或SP) 片外RAM(采用R0,R1或DPTR),3.2.5 变址寻址,以一个基地址加上一个偏移量地址形成操作数地址的寻址方式称为变址寻址。在这种寻址方式中,以数据指针DPTR或程序计数器PC作为基址寄存器,累加器A作为偏移量寄存器,基址寄存器的内容与偏移量寄存器的内容之和作为操作数地址。 变址寻址所对应的寻址空

6、间为:ROM,例如: MOVC A,A+DPTR,对位地址中的内容进行操作的寻址方式称为位寻址。采用位寻址指令的操作数是8位二进制数中的某一位。指令中给出的是位地址。位寻址方式实质属于位的直接寻址。 寻址空间为:片内RAM的20H2FH单元中的128可寻址位;SFR的可寻址位。,习惯上,特殊功能寄存器的寻址位常用符号位地址表示。 例如:CLR ACC.7 MOV C,7FH,3.2.6 位寻址,相对寻址是以程序计数器PC的当前值(指读出该2字节或3字节的跳转指令后,PC指向的下条指令的地址)为基准,加上指令中给出的相对偏移量 rel 形成目标地址的寻址方式 。 rel 是一个带符号的8位二进制

7、数,取值范围是128127,以补码形式置于操作码之后存放。,如: JC rel ; rel75H,3.2.7 相对寻址,3.3.1 内部数据传送指令,3.3 数据传送与交换指令,数据传送是进行数据处理的最基本的操作,这类指令一般不影响标志寄存器PSW的状态。,一、立即寻址型传送指令(5条),3.3.1 内部数据传送指令,二、直接寻址型传送指令(5条),3.3.1 内部数据传送指令,三、寄存器寻址型传送指令(3条),四、寄存器间接寻址型传送指令(3条),3.3.2 外部RAM数据传送指令(4条),3.3.3 查表指令(2条),3.3.4 堆栈操作指令(2条),堆栈是在内部RAM中按“后进先出”的

8、规则组织的一片存储区。此区的一端固定,称为栈底;另一端是活动的,称为栈顶。栈顶的位置(地址)由栈指针SP指示(即SP的内容是栈顶的地址),3.3.5 数据交换指令(5条),例1:若(R0)=80H,(A)=20H。执行指令 XCH A,R0 后,(A)=80H,(R0)=20H。,例2:若(R0)30H,(30H)67H,(A)20H。执行指令 XCHD A,R0 指令后,(A)27H,(30H)60H。 若(A)30H,执行指令SWAP A后,(A)03H。,3.4.1 加减法指令,一、加法指令(8条),算术运算指令可以完成加、减、乘、除及加1和减1等运算。这类指令多数以A为源操作数之一,同

9、时又使A为目的操作数。,3.4 算术运算指令,CY:和的D7位有进位时,(CY)=1;否则,(CY)=0。 AC:和的D3位有进位时,(AC)=1;否则,(AC)=0。 OV:和的D7、D6位只有一个有进位时,(OV)=1;溢出表示运算的结果超出了数值所允许的范围。如:两个正数相加结果为负数或两个负数相加结果为正数时属于错误结果,此时(OV)=1。 P:累加器ACC中“1”的个数为奇数时,(P)=1;为偶数时,(P)=0。,3.4.1 加减法指令,二、减法指令(4条),CY:差的位7需借位时,(CY)=1;否则,(CY)=0。 AC:差的位3需借位时,(AC)=1;否则,(AC)=0。 OV:

10、若位6有借位而位7无借位或位7有借位而位6无借位时,(OV)=1。 如要用此组指令完成不带借位减法,只需先清Cy为 0。,3.4.1 加减法指令,三、加1减1指令(9条),这些指令仅 INC A和DEC A影响P标志。其余指令都不影响标志位的状态。,指令的功能是对累加器A中刚进行的两个BCD码的加法的结果进行十进制调整。 两个压缩的BCD码按二进制相加后,必须经过调整方能得到正确的压缩BCD码的和。,DA A,四、十进制加法调整指令(1条),3.4.2 乘法和除法指令,MUL AB ;累加器A与B寄存器相乘 该指令的功能是将累加器A与寄存器B中的无符号8位二进制数相乘 ,乘积的低8位留在累加器

11、A中,高8位存放在寄存器B中。 当乘积大于FFH时,溢出标志位(OV)=1。而标志Cy总是被清0。,DIV AB ;累加器A除以寄存器B 该指令的功能是将累加器A中的无符号8位二进制数除以寄存器B中的无符号8位二进制数 ,商的整数部分存放在累加器A中,余数部分存放在寄存器B中。 当除数为0时,则结果的A和B的内容不定,且溢出标志位(OV)=1。而标志Cy总是被清0。,3.5.1 逻辑运算指令,一、逻辑与运算指令(6条),逻辑运算指令可以完成与、或、异或、清0和取反操作,当以累加器A为目的操作数时,对P标志有影响;,例1: 若(A)=C3H,(R0)=AAH,执行指令 ANL A,R0 之后,(

12、A)=82H。,3.5 逻辑运算及移位指令,3.5.1 逻辑运算指令,二、逻辑或运算指令(6条),例2:若(A)=C3H,(R0)=55H,执行指令ORL A,R0 之后,(A)=D7H。,3.5.1 逻辑运算指令,三、逻辑异或运算指令(6条),例3: 若(A)=C3H,(R0)=AAH,执行指令 XRL A,R0 之后,(A)=69H。,3.5.1 逻辑运算指令,四、累加器A清0和取反指令(2条),3.5.2 移位指令,3.6.1 无条件转移指令(4条),3.6 控制转移指令,通常情况下,程序的执行是顺序进行的,但也可以根据需要改变程序的执行顺序,这种情况称作程序转移。控制程序的转移要利用转

13、移指令。转移指令有无条件转移、条件转移及子程序调用与返回等。,LJMP addr16 ;PC addr16 第一字节为操作码,该指令执行时,将指令的第二、三字节地址码分别装入指令计数器PC的高8位和低8位中,程序无条件地转移到指定的目标地址去执行。,LJMP提供的是16位地址,因此程序可以转向64KB的程序存储器地址空间的任何单元。,一、长转移指令,3.6.1 无条件转移指令(4条),AJMP addr11 ;PC (PC)+ 2, PC100 addr11 该指令执行时,先将PC的内容加2(这是PC指向的是AJMP的下一条指令),然后把指令中11位地址码传送到PC100,而PC1511保持原

14、内容不变。,二、绝对转移指令,3.6.1 无条件转移指令(4条),SJMP rel ;PC (PC)+ 2,PC (PC)+ rel 第一字节为操作码,第二字节为相对偏移量 rel,rel 是一个带符号的偏移字节数(2的补码),取值范围为 127 128(00H7FH对应表示0 127,80HFFH对应表示1281)。负数表示反向转移,正数表示正向转移。,rel 可以是一个转移目标地址的标号,由汇编程序在汇编过程中自动计算偏移地址,并填入指令代码中。,三、短转移指令,3.6.1 无条件转移指令(4条),JMP A+DPTR ;PC (PC)+ 1,PC (A)+(DPTR) 该指令具有散转功能

15、,可以代替许多判别跳转指令。其转移地址由数据指针DPTR的16位数和累加器A的8位数进行无符号数相加形成,并直接装入PC。,例: 有一段程序如下: MOV DPTR,#TABLE JMP A+DPTR TABLE:AJMP ROUT0 AJMP ROUT1 AJMP ROUT2 AJMP ROUT3 当(A)=00H时,程序将转到 ROUT0处执行;当(A)=02H时,程序将转到 ROUT1处执行;其余类推。,四、变址寻址转移指令,3.6.1 无条件转移指令(4条),一、累加器A判零转移指令,3.6.2 条件转移指令(8条),指令的功能是对累加器A的内容为 0 和不为 0 进行检测并转移。当不

16、满足各自的条件时,程序继续往下执行。当各自的条件满足时,程序转向指定的目标地址。目标地址的计算与SJMP指令情况相同。指令执行时对标志位无影响。,二、比较条件转移指令,3.6.2 条件转移指令(8条),这组指令的功能是对指定的目的字节和源字节进行比较,若它们的值不相等则转移,转移的目标地址为当前的PC值加3后,再加指令的第三字节偏移量rel;若目的字节的内容大于源字节的内容,则进位标志清0;若目的字节的内容小于源字节的内容,则进位标志置1;若目的字节的内容等于源字节的内容,程序将继续往下执行。,三、减1非零转移指令,3.6.2 条件转移指令(8条),这组指令每执行一次,便将目的操作数的循环控制

17、单元的内容减1,并判其是否为 0。若不为0,则转移到目标地址继续循环;若为0,则结束循环,程序往下执行。,一、调用指令,3.6.3 子程序调用和返回指令(4条),ACALL指令执行时,被调用的子程序的首址必须设在包含当前指令(即调用指令的下一条指令)的第一个字节在内的2K字节范围内的程序存储器中。,LCALL指令执行时,被调用的子程序的首址可以设在64K字节范围内的程序存储器空间的任何位置。,二、返回指令,3.6.3 子程序调用和返回指令(4条),RET指令的功能是从堆栈中弹出由调用指令压入堆栈保护的断点地址,并送入指令计数器PC,从而结束子程序的执行。程序返回到断点处继续执行。,RETI指令

18、是专用于中断服务程序返回的指令,除正确返回中断断点处执行主程序以外,并有清除内部相应的中断状态寄存器(以保证正确的中断逻辑)的功能。,NOP ;PC (PC)+ 1 这条指令不产生任何控制操作,只是将程序计数器PC的内容加1。该指令在执行时间上要消耗1个机器周期,在存储空间上可以占用一个字节。因此,常用来实现较短时间的延时。,三、空操作指令,3.6.3 子程序调用和返回指令(4条),一、位传送指令(2条),3.7 位操作指令,在位操作指令中,位累加器要用字符“C”表示(注:在位操作指令中CY与具体的直接位地址D7H对应)。,例: 若(CY)=1,(P3)=1100 0101B,(P1)=001

19、1 0101B。执行以下指令: MOV P1.3,C MOV C,P3.3 MOV P1.2,C 结果为:(CY)=0,P3的内容未变,P1的内容变为 0011 1001B。,二、位置“1”和位清0指令(4条),三、位运算指令(6条),四、位控制转移指令(5条),这两条指令的功能是对进位标志位Cy进行检测,当(Cy)=1(第一条指令)或(Cy)=0(第二条指令),程序转向PC当前值与rel之和的目标地址去执行,否则程序将顺序执行。,这三条指令的功能是对指定位bit进行检测,当(bit)=1(第一和第三条指令)或(bit)=0(第二条指令),程序转向PC当前值与rel之和的目标地址去执行,否则程

20、序将顺序执行。对于第三条指令,当条件满足时(指定位为1),还具有将该指定位清0的功能。,3.8 伪指令,伪指令不是可执行指令,因此无机器代码,3.9 单片机编程语言介绍,PL/M是Intel从8080微处理器开始为其系列产品开发的编程语言,是一种结构化语言,但它使用关键字去定义结构。但对51系列,PL/M不支持复杂的算术运算、浮点变量,而且无丰富的库函数支持。,对于51系列单片机,现在有4种语言支持,即汇编、PL/M、C和Basic。,Basic通常附在PC上,是初学编程的第一种语言,用于要求编程简单而对编程效率和运行速度要求不高的场合。8052单片机片内就固化了Basic语言解释器。,C语言

21、是一种源于编写UNIX操作系统的语言,它是一种结构化语言,可产生压缩代码。C语言程序设计是单片机开发、应用的重要趋势之一。,与汇编相比,C语言有以下优点: (1)对单片机的指令系统不要求了解,仅要求对51的存储器结构有初步了解,寄存器分配、不同存储器的寻址及数据类型等细节可由编译器管理。 (2)既有多种高级语言的特点,又具备汇编语言的功能; (3)有丰富的库函数,运算速度快、编译效率高、可移植性好,而且可以实现对系统硬件的直接控制; (4)可以大大缩短目标系统软件的开发周期,软件的可读性明显增加,便于改进、扩充,研制规模更大、性能更完备的系统。,C51程序的基本单位是函数。函数由函数说明和函数

22、体两部分组成。一个C源程序至少包含一个主函数,也可以是一个主函数和若干其他函数。主函数是程序的入口;主函数中的所有语句执行完毕,则程序结束。,3.10 单片机C语言程序设计,C51程序的一般格式如下: 类型 函数名(参数表) 参数说明; 数据说明部分; 执行语句部分; ,C51中函数分为两大类: (1)库函数 (2)用户定义函数。 库函数是C51在库文件中已定义的函数,其函数说明在相关的头文件中。用户函数是用户自己定义、自己调用的一类函数。,3.10.1 数据类型,sfr 定义8位的特殊功能寄存器 sfr16 定义16位的特殊功能寄存器,如DPTR, 也可以用来定义连续的两个特殊功能寄存器。

23、sbit 定义特殊功能寄存器中的可位寻址的位。 对于常用的特殊功能寄存器,C语言提供了相应的头文件(*.h)(reg51.h)可以通过修改头文件添加新的特殊功能寄存器。,3.10.2 特殊功能寄存器(sfr),1.特殊功能寄存器(SFR)的C51定义 特殊功能寄存器只能用直接寻址方式访问,编译器提供了与标准语言不兼容的关键字”sfr”来定义。 格式: sfr 特殊功能寄存器名=特殊功能寄存器的地址常数 例如: sfr SCON=0 x88; sfr TMOD=0 x89;,2.特殊位(sbit)的C51定义 特殊位(sbit)是指特殊功能寄存器(sfr)中可按位访问的位,用关键字sbit定义。

24、可用3种方式定义: 例如: sfr PSW=0 x0d; sbit OV=PSW2; sbit OV=0 x0d2; sbit OV=0 xd2; 3.位变量(bit)的C51定义 格式: bit 位变量名 例如: bit var;,4. I/O口的C51定义 (1)片内I/O口的定义 使用 sfr 关键字 例如: sfr P1=0 x90; P1=0 x01; /写P1口 var=P1; /读P1口,读引脚 (2)片外扩展I/O口的定义 当作片外数据存储单元看待,使用#define语句定义 例如: #include #define PORTA XBYTE0 xffc; PORTA=0 x01

25、; /在PORTA 地址0 xffc上送出0 x01 Var=PORTA; /读PORTA 地址0 xffc的数据,3.10.3 存储类型,可以指定变量的存储区,主要有以下几个存储区:,3.10.3 存储类型,1. DATA段 (1)速度快,空间有限(128B 00H-7FH) (2)包含了堆栈、寄存器组(R0-R7) (3)一般在此区间定义使用频繁的变量。,3.10.3 存储类型,2. BDATA段 此区域中的变量可位寻址,(低128字节中的128个可寻址位,20H-2FH,16字节),注意:此区域不能定义float double类型的变量,三个函数,完成同样的功能,但是效率不同。,错误,应

26、该使用对应的位变量,3.10.3 存储类型,3. IDATA段 用寄存器间接寻址的内部RAM区,(高128字节,80H-FFH,与SFR区地址相同,只能使用间接寻址),3.10.3 存储类型,4. PDATA与XDATA段 PDATA区:外部RAM,256字节,8位地址 XDATA区:外部RAM,64K字节,18位地址 都使用MOVX指令,但是间址寄存器不同(R0,R1,DPTR),3.10.3 存储类型,5.CODE段 代码段,一般不能在程序运行中改写,用于存放常数,表格等,必须在编译时初始化。MOVC指令访问。,3.10.4 指针,1.通用指针 不指明是指向什么存储位置的指针,就是通用指针,指针本身占用3个字节,第一字节表明所指向的存储区,其它两个字节表明16位的偏移量。若指向DATA、IDATA、PDATA则只需要8位偏移量。 例如: long *state: 指向long型整数的指针,指针本身依据存储模式不同放在不同的RAM区,而指向的long型整数的存储位置在编译时也是未知的。 Char * xdata ptr:指向char型整数的指针,指针本身放在XDATA区,而指向的char型整数的存储位置在编译时也是未知的。,第一个字节所代表的存储类型的编码

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论