第3章 指令系统与C语言程序设计_第1页
第3章 指令系统与C语言程序设计_第2页
第3章 指令系统与C语言程序设计_第3页
第3章 指令系统与C语言程序设计_第4页
第3章 指令系统与C语言程序设计_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

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

文档简介

1、第3章 MCS-51单片机的指令系统 与C语言程序设计一般格式为:一般格式为: 标号:操作码标号:操作码 目的操作数目的操作数 , 源操作数源操作数 ; 注释注释 在两个操作数的指令中,通常在两个操作数的指令中,通常目的操作数写在左边,源操作数写在目的操作数写在左边,源操作数写在右边。右边。 3.1.1 MCS-513.1.1 MCS-51单片机指令格式单片机指令格式 标号是程序员根据编程需要给指令设定的符号地址,可有可无。标号是程序员根据编程需要给指令设定的符号地址,可有可无。标号由标号由1 18 8个字符组成,第一个字符必须是英文字母,不能是数字个字符组成,第一个字符必须是英文字母,不能是

2、数字或其他符号,标号后必须用冒号。或其他符号,标号后必须用冒号。操作码是指令的核心部分,用于指示机器执行何种操作操作码是指令的核心部分,用于指示机器执行何种操作 操作数是表示指令操作的对象,操作数可以是一个具体的数据,操作数是表示指令操作的对象,操作数可以是一个具体的数据,也可以是参加运算的数据所在的地址。也可以是参加运算的数据所在的地址。 注释是对指令的解释说明,用以提高程序的可读性,注释前必须注释是对指令的解释说明,用以提高程序的可读性,注释前必须加分号。加分号。 3.1 3.1 概述概述 3.1.2 3.1.2 指令的字节指令的字节3.1.3 MCS-513.1.3 MCS-51单片机的

3、助记符语言单片机的助记符语言 指令的助记符用英文单词或缩写字母来表征指令功能,以便于人们识别、指令的助记符用英文单词或缩写字母来表征指令功能,以便于人们识别、读读/ /写、记忆和交流,常用于程序设计。写、记忆和交流,常用于程序设计。 MCS-51MCS-51指令系统中,操作码采用了指令系统中,操作码采用了4242种助记符。种助记符。 3.1.4 3.1.4 常用符号说明常用符号说明3.2 3.2 寻址方式寻址方式 寻址方式是指寻找操作数或指令的地址的方式。 MCS-51的寻址方式有的寻址方式有七七种。即:立即寻址、直接寻种。即:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、位对寻址

4、、寄存器寻址、寄存器间接寻址、变址寻址、位对寻址和相对寻址。址和相对寻址。 若不特别声明,我们后面提到的寻址方式均指源操作数若不特别声明,我们后面提到的寻址方式均指源操作数的寻址方式。的寻址方式。 指令中直接给出操作数指令中直接给出操作数的寻址方式称为立即寻址。立的寻址方式称为立即寻址。立即数可以为一个字节,也可以是两个字节,并要用符号即数可以为一个字节,也可以是两个字节,并要用符号“”来标识。由于立即数是一个常数,所以只能作为源来标识。由于立即数是一个常数,所以只能作为源操作数。操作数。 立即寻址所对应的寻址空间为:立即寻址所对应的寻址空间为:ROM 3.2.1 3.2.1 立即寻址立即寻址

5、如:如: MOV AMOV A,#30H #30H ;A30HA30H MOV DPTR MOV DPTR,#1638H #1638H ;DPH16HDPH16H,DPL38HDPL38H3.2.2 3.2.2 直接寻址直接寻址 指令操作码之后的字节存放的是指令操作码之后的字节存放的是操作数的地址操作数的地址,操,操作数本身存放在该地址指示的存储单元中的寻址方式称作数本身存放在该地址指示的存储单元中的寻址方式称为为直接寻址直接寻址。 直接寻址中的直接寻址中的SFRSFR经常采用符号形式表示。经常采用符号形式表示。寻址空间为:片内寻址空间为:片内RAMRAM低低128128字节、字节、SFRSF

6、R。3.2.3 3.2.3 寄存器寻址寄存器寻址 操作数存放在寄存器中,指令中直接给出该操作数存放在寄存器中,指令中直接给出该寄存器名称寄存器名称的寻址方式。可以获得较高的传送和运算速度。的寻址方式。可以获得较高的传送和运算速度。 寄存器可以是:寄存器可以是:R0R0R7R7、A A、B B、DPTRDPTR。例:例: MOV AMOV A,R1R1;AR1AR1 寄存器中的内容为地址,从该地址去取操作数寄存器中的内容为地址,从该地址去取操作数的寻址方的寻址方式称为寄存器间接寻址式称为寄存器间接寻址 。 寻址的存储空间为片内寻址的存储空间为片内RAMRAM或片外或片外RAMRAM。片内片内RA

7、MRAM的数据传送采用的数据传送采用“MOV”MOV”类指令,间接寻址寄存器类指令,间接寻址寄存器采用寄存器采用寄存器R0R0或或R1R1(堆栈操作时采用(堆栈操作时采用SPSP)。)。 片外片外RAMRAM的数据传送采用的数据传送采用“MOVX”MOVX”类指令,这时间接寻类指令,这时间接寻址寄存器有两种选择:一是采用址寄存器有两种选择:一是采用R0R0和和R1R1作间址寄存器,这作间址寄存器,这时时R0R0或或R1R1提供低提供低8 8位地址(外部位地址(外部RAMRAM多于多于256256字节采用页面字节采用页面方式访问时,可由方式访问时,可由P2P2口未使用的口未使用的I/OI/O引脚

8、提供高位地址);引脚提供高位地址);二是采用二是采用DPTRDPTR作为间址寄存器。作为间址寄存器。 3.2.4 3.2.4 寄存器间接寻址寄存器间接寻址例:例: MOV R0MOV R0,#30H #30H ;R030HR030H MOV A MOV A,R0 R0 ;A(R0) A(R0) 即即AA(30H30H)寄存器间接寻址对应的空间为:寄存器间接寻址对应的空间为:片内片内RAMRAM(采用(采用R0R0,R1R1或或SPSP)片外片外RAMRAM(采用(采用R0R0,R1R1或或DPTRDPTR) 3.2.5 3.2.5 变址寻址变址寻址 以一个基地址加上一个偏移量地址形成操作数地址

9、以一个基地址加上一个偏移量地址形成操作数地址的寻址方式称为变址寻址。在这种寻址方式中,以数据指的寻址方式称为变址寻址。在这种寻址方式中,以数据指针针DPTRDPTR或程序计数器或程序计数器PCPC作为基址寄存器,累加器作为基址寄存器,累加器A A作为偏作为偏移量寄存器,基址寄存器的内容与偏移量寄存器的内容之移量寄存器,基址寄存器的内容与偏移量寄存器的内容之和作为操作数地址。和作为操作数地址。 变址寻址所对应的寻址空间为:变址寻址所对应的寻址空间为:ROMROM例如:例如:MOVC AMOVC A,A+DPTR A+DPTR 对位地址中的内容进行操作对位地址中的内容进行操作的寻址方式称为位寻址。

10、采的寻址方式称为位寻址。采用位寻址指令的操作数是用位寻址指令的操作数是8 8位二进制数中的某一位。指令位二进制数中的某一位。指令中给出的是位地址。位寻址方式实质属于位的直接寻址。中给出的是位地址。位寻址方式实质属于位的直接寻址。 寻址空间为:片内寻址空间为:片内RAMRAM的的20H20H2FH2FH单元中的单元中的128128可寻址位;可寻址位;SFRSFR的可寻址位。的可寻址位。 习惯上,特殊功能寄存器的寻址位常用符号位地址表示。习惯上,特殊功能寄存器的寻址位常用符号位地址表示。 例如:例如:CLR ACC.7 CLR ACC.7 MOV C MOV C,7FH7FH3.2.6 3.2.6

11、 位寻址位寻址 相对寻址相对寻址是以程序计数器是以程序计数器PCPC的当前值的当前值(指读出该(指读出该2 2字字节或节或3 3字节的跳转指令后,字节的跳转指令后,PCPC指向的下条指令的地址)指向的下条指令的地址)为基为基准,加上指令中给出的相对偏移量准,加上指令中给出的相对偏移量 relrel 形成目标地址形成目标地址的寻的寻址方式址方式 。 relrel 是一个带符号的是一个带符号的8 8位二进制数,取值范围是位二进制数,取值范围是128128127127,以补码形式置于操作码之后存放。,以补码形式置于操作码之后存放。如:如:JC relJC rel ; relrel75H75H3.2.

12、7 3.2.7 相对寻址相对寻址3.3.1 3.3.1 内部数据传送指令内部数据传送指令3.3 3.3 数据传送与交换指令数据传送与交换指令 数据传送是进行数据处理的最基本的操作,这类指令一般不影响标志寄存器PSW的状态。一、立即寻址型传送指令(一、立即寻址型传送指令(5 5条)条)3.3.1 3.3.1 内部数据传送指令内部数据传送指令二、直接寻址型传送指令(二、直接寻址型传送指令(5 5条)条)3.3.1 3.3.1 内部数据传送指令内部数据传送指令三、寄存器寻址型传送指令(三、寄存器寻址型传送指令(3 3条)条)四、寄存器间接寻址型传送指令(四、寄存器间接寻址型传送指令(3 3条)条)3

13、.3.2 3.3.2 外部外部RAMRAM数据传送指令(数据传送指令(4 4条)条)3.3.3 3.3.3 查表指令(查表指令(2 2条)条)3.3.4 3.3.4 堆栈操作指令(堆栈操作指令(2 2条)条)堆栈是在内部堆栈是在内部RAMRAM中按中按“后进先出后进先出”的规则组织的一片存储区。此的规则组织的一片存储区。此区的一端固定,称为栈底;另一端是活动的,称为栈顶。栈顶的位置区的一端固定,称为栈底;另一端是活动的,称为栈顶。栈顶的位置(地址)由栈指针(地址)由栈指针SPSP指示(即指示(即SPSP的内容是栈顶的地址)的内容是栈顶的地址)3.3.5 3.3.5 数据交换指令(数据交换指令(

14、5 5条)条)例例1 1:若(:若(R0R0)=80H=80H,(,(A A)=20H=20H。执行指令。执行指令 XCH AXCH A,R0 R0 后,(后,(A A)=80H=80H,(,(R0R0)=20H=20H。 例例2 2:若(:若(R0R0)30H30H,(,(30H30H)67H67H,(,(A A)20H20H。执。执行指令行指令 XCHD AXCHD A,R0 R0 指令后,(指令后,(A A)27H27H,(,(30H30H)60H60H。 若(若(A A)30H30H,执行指令,执行指令SWAP ASWAP A后,(后,(A A)03H03H。3.4.1 3.4.1 加

15、减法指令加减法指令一、加法指令(一、加法指令(8 8条)条) 算术运算指令可以完成加、减、乘、除及加算术运算指令可以完成加、减、乘、除及加1和减和减1等运算。等运算。这类指令多数以这类指令多数以A为源操作数之一,同时又使为源操作数之一,同时又使A为目的操作数。为目的操作数。 3.4 3.4 算术运算指令算术运算指令CYCY:和的:和的D7D7位有进位时,(位有进位时,(CYCY)=1=1;否则,(;否则,(CYCY)=0=0。ACAC:和的:和的D3D3位有进位时,(位有进位时,(ACAC)=1=1;否则,(;否则,(ACAC)=0=0。OVOV:和的:和的D7D7、D6D6位只有一个有进位时

16、,(位只有一个有进位时,(OVOV)=1=1;溢出表示运算的结果超;溢出表示运算的结果超出了数值所允许的范围。出了数值所允许的范围。如:两个正数相加结果为负数或两个负数相加结如:两个正数相加结果为负数或两个负数相加结果为正数时属于错误结果,此时(果为正数时属于错误结果,此时(OVOV)=1=1。P P:累加器:累加器ACCACC中中“1”1”的个数为奇数时,(的个数为奇数时,(P P)=1=1;为偶数时,(;为偶数时,(P P)=0=0。 3.4.1 3.4.1 加减法指令加减法指令二、减法指令(二、减法指令(4 4条)条)CYCY:差的位:差的位7 7需借位时,(需借位时,(CYCY)=1=

17、1;否则,(;否则,(CYCY)=0=0。ACAC:差的位:差的位3 3需借位时,(需借位时,(ACAC)=1=1;否则,(;否则,(ACAC)=0=0。OVOV:若位:若位6 6有借位而位有借位而位7 7无借位或位无借位或位7 7有借位而位有借位而位6 6无借位时,无借位时,(OVOV)=1=1。如要用此组指令完成不带借位减法,只需先清如要用此组指令完成不带借位减法,只需先清CyCy为为 0 0。3.4.1 3.4.1 加减法指令加减法指令三、加三、加1 1减减1 1指令(指令(9 9条)条)这些指令仅这些指令仅 INC AINC A和和DEC ADEC A影响影响P P标志。其余指令都不标

18、志。其余指令都不影响标志位的状态。影响标志位的状态。 指令的功能是对累加器指令的功能是对累加器A A中刚进行的两个中刚进行的两个BCDBCD码的加法码的加法的结果进行十进制调整。的结果进行十进制调整。 两个压缩的两个压缩的BCDBCD码按二进制相加后,必须经过调整方码按二进制相加后,必须经过调整方能得到正确的压缩能得到正确的压缩BCDBCD码的和。码的和。DA ADA A四、十进制加法调整指令(四、十进制加法调整指令(1 1条)条)3.4.2 3.4.2 乘法和除法指令乘法和除法指令 MUL AB MUL AB ;累加器;累加器A A与与B B寄存器相乘寄存器相乘 该指令的功能是将累加器该指令

19、的功能是将累加器A A与寄存器与寄存器B B中的无符号中的无符号8 8位二位二进制数相乘进制数相乘 ,乘积的低,乘积的低8 8位留在累加器位留在累加器A A中,高中,高8 8位存放在位存放在寄存器寄存器B B中。中。当乘积大于当乘积大于FFHFFH时,溢出标志位(时,溢出标志位(OVOV)=1=1。而标志。而标志CyCy总总是被清是被清0 0。 DIV AB DIV AB ;累加器;累加器A A除以寄存器除以寄存器B B 该指令的功能是将累加器该指令的功能是将累加器A A中的无符号中的无符号8 8位二进制数位二进制数除以寄存器除以寄存器B B中的无符号中的无符号8 8位二进制数位二进制数 ,商

20、的整数部分商的整数部分存放在累加器存放在累加器A A中,余数部分存放在寄存器中,余数部分存放在寄存器B B中。中。当除数为当除数为0 0时,则结果的时,则结果的A A和和B B的内容不定,且溢出标的内容不定,且溢出标志位(志位(OVOV)=1=1。而标志。而标志CyCy总是被清总是被清0 0。3.5.1 3.5.1 逻辑运算指令逻辑运算指令一、逻辑与运算指令(一、逻辑与运算指令(6 6条)条) 逻辑运算指令逻辑运算指令可以完成与、或、异或、清可以完成与、或、异或、清0 0和取反操作,和取反操作,当以累加器当以累加器A A为目的操作数时,对为目的操作数时,对P P标志有影响;标志有影响;例例1

21、1: 若(若(A A)=C3H=C3H,(,(R0R0)=AAH=AAH,执行指令,执行指令 ANL AANL A,R0 R0 之后,之后,(A A)=82H=82H。3.5 3.5 逻辑运算及移位指令逻辑运算及移位指令3.5.1 3.5.1 逻辑运算指令逻辑运算指令二、逻辑或运算指令(二、逻辑或运算指令(6 6条)条)例例2 2:若(:若(A A)=C3H=C3H,(,(R0R0)=55H=55H,执行指令,执行指令ORL AORL A,R0 R0 之后,(之后,(A A)=D7H=D7H。3.5.1 3.5.1 逻辑运算指令逻辑运算指令三、逻辑异或运算指令(三、逻辑异或运算指令(6 6条)

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

23、、条件转移及子程序调用与返回等。 LJMP addr16 LJMP addr16 ;PC addr16 PC addr16 第一字节为操作码,该指令执行时,将指令的第二、第一字节为操作码,该指令执行时,将指令的第二、三字节地址码分别装入指令计数器三字节地址码分别装入指令计数器PCPC的高的高8 8位和低位和低8 8位中,位中,程序无条件地转移到指定的目标地址去执行。程序无条件地转移到指定的目标地址去执行。 LJMPLJMP提供的是提供的是1616位地址,因此程序可以转向位地址,因此程序可以转向64KB64KB的的程序存储器地址空间的任何单元。程序存储器地址空间的任何单元。一、长转移指令一、长转

24、移指令3.6.1 3.6.1 无条件转移指令(无条件转移指令(4 4条)条) AJMP addr11 AJMP addr11 ;PC PC (PCPC)+ 2+ 2, PC10PC100 addr11 0 addr11 该指令执行时,先将该指令执行时,先将PCPC的内容加的内容加2 2(这是(这是PCPC指向的是指向的是AJMPAJMP的下一条指令),然后把指令中的下一条指令),然后把指令中1111位地址码传送到位地址码传送到PC10PC100 0,而,而PC15PC151111保持原内容不变。保持原内容不变。二、绝对转移指令二、绝对转移指令3.6.1 3.6.1 无条件转移指令(无条件转移指

25、令(4 4条)条) SJMP relSJMP rel ;PC PC (PCPC)+ 2+ 2,PC PC (PCPC)+ rel+ rel 第一字节为操作码,第二字节为相对偏移量第一字节为操作码,第二字节为相对偏移量 relrel,relrel 是一个带符号的偏移字节数(是一个带符号的偏移字节数(2 2的补码),取值范围为的补码),取值范围为 127 127 128128(00H00H7FH7FH对应表示对应表示0 0 127127,80H80HFFHFFH对应表示对应表示1281281 1)。负数表示反向转移,正数表示正向)。负数表示反向转移,正数表示正向转移。转移。 relrel 可以是一

26、个转移目标地址的标号,由汇编程序在汇可以是一个转移目标地址的标号,由汇编程序在汇编过程中自动计算偏移地址,并填入指令代码中。编过程中自动计算偏移地址,并填入指令代码中。三、短转移指令三、短转移指令3.6.1 3.6.1 无条件转移指令(无条件转移指令(4 4条)条)JMP A+DPTR JMP A+DPTR ;PC PC (PCPC)+ 1+ 1,PC PC (A A)+ +(DPTRDPTR) 该指令具有散转功能,可以代替许多判别跳转指令。其转移地址由该指令具有散转功能,可以代替许多判别跳转指令。其转移地址由数据指针数据指针DPTRDPTR的的1616位数和累加器位数和累加器A A的的8 8

27、位数进行无符号数相加形成,并位数进行无符号数相加形成,并直接装入直接装入PCPC。例:例: 有一段程序如下:有一段程序如下: MOV DPTRMOV DPTR,#TABLE#TABLE JMP A+DPTR JMP A+DPTR TABLE TABLE:AJMP ROUT0AJMP ROUT0 AJMP ROUT1 AJMP ROUT1 AJMP ROUT2 AJMP ROUT2 AJMP ROUT3 AJMP ROUT3当(当(A A)=00H=00H时,程序将转到时,程序将转到 ROUT0ROUT0处执行;当(处执行;当(A A)=02H=02H时,程序时,程序将转到将转到 ROUT1RO

28、UT1处执行;其余类推。处执行;其余类推。 四、变址寻址转移指令四、变址寻址转移指令3.6.1 3.6.1 无条件转移指令(无条件转移指令(4 4条)条)一、累加器一、累加器A A判零转移指令判零转移指令3.6.2 3.6.2 条件转移指令(条件转移指令(8 8条)条) 指令的功能是对累加器指令的功能是对累加器A A的内容为的内容为 0 0 和不为和不为 0 0 进行检进行检测并转移。当不满足各自的条件时,程序继续往下执行。测并转移。当不满足各自的条件时,程序继续往下执行。当各自的条件满足时,程序转向指定的目标地址。目标地当各自的条件满足时,程序转向指定的目标地址。目标地址的计算与址的计算与S

29、JMPSJMP指令情况相同。指令执行时对标志位无影指令情况相同。指令执行时对标志位无影响。响。二、比较条件转移指令二、比较条件转移指令3.6.2 3.6.2 条件转移指令(条件转移指令(8 8条)条) 这组指令的功能是对指定的目的字节和源字节进行比较,若它们的这组指令的功能是对指定的目的字节和源字节进行比较,若它们的值不相等则转移,转移的目标地址为当前的值不相等则转移,转移的目标地址为当前的PCPC值加值加3 3后,再加指令的第三后,再加指令的第三字节偏移量字节偏移量relrel;若目的字节的内容大于源字节的内容,则进位标志清;若目的字节的内容大于源字节的内容,则进位标志清0 0;若目的字节的

30、内容小于源字节的内容,则进位标志置若目的字节的内容小于源字节的内容,则进位标志置1 1;若目的字节的内;若目的字节的内容等于源字节的内容,程序将继续往下执行。容等于源字节的内容,程序将继续往下执行。三、减三、减1 1非零转移指令非零转移指令3.6.2 3.6.2 条件转移指令(条件转移指令(8 8条)条) 这组指令每执行一次,便将目的操作数的循环控制单这组指令每执行一次,便将目的操作数的循环控制单元的内容减元的内容减1 1,并判其是否为,并判其是否为 0 0。若不为。若不为0 0,则转移到目标,则转移到目标地址继续循环;若为地址继续循环;若为0 0,则结束循环,程序往下执行。,则结束循环,程序

31、往下执行。一、调用指令一、调用指令3.6.3 3.6.3 子程序调用和返回指令(子程序调用和返回指令(4 4条)条)ACALLACALL指令执行时,被调用的子程序的首址必须设在包含当前指令(即调指令执行时,被调用的子程序的首址必须设在包含当前指令(即调用指令的下一条指令)的第一个字节在内的用指令的下一条指令)的第一个字节在内的2K2K字节范围内的程序存储器中。字节范围内的程序存储器中。LCALLLCALL指令执行时,被调用的子程序的首址可以设在指令执行时,被调用的子程序的首址可以设在64K64K字节范围内的程字节范围内的程序存储器空间的任何位置。序存储器空间的任何位置。二、返回指令二、返回指令

32、3.6.3 3.6.3 子程序调用和返回指令(子程序调用和返回指令(4 4条)条)RET指令的功能是从堆栈中弹出由调用指令压入堆栈保护的断点地址,指令的功能是从堆栈中弹出由调用指令压入堆栈保护的断点地址,并送入指令计数器并送入指令计数器PC,从而结束子程序的执行。程序返回到断点处继,从而结束子程序的执行。程序返回到断点处继续执行。续执行。RETI指令是专用于中断服务程序返回的指令,除正确返回中断断点处指令是专用于中断服务程序返回的指令,除正确返回中断断点处执行主程序以外,并有清除内部相应的中断状态寄存器(以保证正确执行主程序以外,并有清除内部相应的中断状态寄存器(以保证正确的中断逻辑)的功能。

33、的中断逻辑)的功能。 NOP NOP ;PC PC (PCPC)+ 1 + 1 这条指令不产生任何控制操作,只是将程序计数器这条指令不产生任何控制操作,只是将程序计数器PCPC的内容加的内容加1 1。该指令在执行时间上要消耗。该指令在执行时间上要消耗1 1个机器周期,个机器周期,在存储空间上可以占用一个字节。因此,常用来实现较在存储空间上可以占用一个字节。因此,常用来实现较短时间的延时。短时间的延时。三、空操作指令三、空操作指令3.6.3 3.6.3 子程序调用和返回指令(子程序调用和返回指令(4 4条)条)一、位传送指令(一、位传送指令(2 2条)条)3.7 3.7 位操作指令位操作指令在位

34、操作指令中,位累加器要用字符在位操作指令中,位累加器要用字符“C”C”表示(注:在位表示(注:在位操作指令中操作指令中CYCY与具体的直接位地址与具体的直接位地址D7HD7H对应)。对应)。 例:例: 若(若(CYCY)=1=1,(,(P3P3)=1100 0101B=1100 0101B,(,(P1P1)=0011 0101B=0011 0101B。执行以下指令:执行以下指令: MOV P1.3MOV P1.3,C C MOV C MOV C,P3.3P3.3 MOV P1.2 MOV P1.2,C C 结果为:(结果为:(CYCY)=0=0,P3P3的内容未变,的内容未变,P1P1的内容变

35、为的内容变为 0011 1001B0011 1001B。二、位置二、位置“1”1”和位清和位清0 0指令(指令(4 4条)条)三、位运算指令(三、位运算指令(6 6条)条)四、位控制转移指令(四、位控制转移指令(5 5条)条) 这两条指令的功能是对进位标志位这两条指令的功能是对进位标志位CyCy进行检测,当(进行检测,当(CyCy)=1=1(第一条(第一条指令)或(指令)或(CyCy)=0=0(第二条指令),程序转向(第二条指令),程序转向PCPC当前值与当前值与relrel之和的目标之和的目标地址去执行,否则程序将顺序执行。地址去执行,否则程序将顺序执行。 这三条指令的功能是对指定位这三条指

36、令的功能是对指定位bitbit进行检测,当(进行检测,当(bitbit)=1=1(第一和第(第一和第三条指令)或(三条指令)或(bitbit)=0=0(第二条指令),程序转向(第二条指令),程序转向PCPC当前值与当前值与relrel之和的之和的目标地址去执行,否则程序将顺序执行。对于第三条指令,当条件满足时目标地址去执行,否则程序将顺序执行。对于第三条指令,当条件满足时(指定位为(指定位为1 1),还具有将该指定位清),还具有将该指定位清0 0的功能。的功能。3.8 3.8 伪指令伪指令 伪指令不是可执行指令,因此无机器代码 3.9 单片机编程语言介绍单片机编程语言介绍对于对于5151系列单

37、片机,现在有系列单片机,现在有4 4种语言支持,即汇编、种语言支持,即汇编、PL/MPL/M、C C和和BasicBasic。Basic通常附在PC上,是初学编程的第一种语言,用于要求编程简单而对编程效率和运行速度要求不高的场合。8052单片机片内就固化了Basic语言解释器。C语言是一种源于编写语言是一种源于编写UNIX操作系统的语言,它是一种结构化语言,可操作系统的语言,它是一种结构化语言,可产生压缩代码。产生压缩代码。C语言程序设计是单片机开发、应用的重要趋势之一。语言程序设计是单片机开发、应用的重要趋势之一。 C51程序的基本单位是函数。函数由函数说明和函数体两部分组成。一个C源程序至

38、少包含一个主函数,也可以是一个主函数和若干其他函数。主函数是程序的入口;主函数中的所有语句执行完毕,则程序结束。 3.10 单片机单片机C语言程序设计语言程序设计 C51程序的一般格式如下:程序的一般格式如下:类型类型 函数名函数名(参数表参数表)参数说明参数说明; 数据说明部分数据说明部分; 执行语句部分执行语句部分;C51中函数分为两大类:中函数分为两大类:(1)(1)库函数库函数(2)(2)用户定义函数。用户定义函数。 库函数是库函数是C51在库文件中已定义的函数,其函数说明在相关在库文件中已定义的函数,其函数说明在相关的头文件中。用户函数是用户自己定义、自己调用的一类函数。的头文件中。

39、用户函数是用户自己定义、自己调用的一类函数。 3.10.1 3.10.1 数据类型数据类型sfr 定义定义8位的特殊功能寄存器位的特殊功能寄存器sfr16 定义定义16位的特殊功能寄存器,如位的特殊功能寄存器,如DPTR, 也可以用来定也可以用来定义连续的两个特殊功能寄存器。义连续的两个特殊功能寄存器。sbit 定义特殊功能寄存器中的可位寻址的位。定义特殊功能寄存器中的可位寻址的位。 对于常用的特殊功能寄存器,对于常用的特殊功能寄存器,C语言提供了相应的头文件语言提供了相应的头文件(*.h)()(reg51.h)可以通过修改头文件添加新的特殊功能寄存器。)可以通过修改头文件添加新的特殊功能寄存

40、器。3.10.2 3.10.2 特殊功能寄存器(特殊功能寄存器(sfrsfr)1.特殊功能寄存器(特殊功能寄存器(SFR)的)的C51定义定义 特殊功能寄存器只能用直接寻址方式访问,编译器提供了与标准语言不特殊功能寄存器只能用直接寻址方式访问,编译器提供了与标准语言不兼容的关键字兼容的关键字”sfr”来定义。来定义。 格式:格式:sfr 特殊功能寄存器名特殊功能寄存器名=特殊功能寄存器的地址常数特殊功能寄存器的地址常数例如:例如: sfr SCON=0 x88; sfr TMOD=0 x89;2.特殊位(特殊位(sbit)的)的C51定义定义 特殊位(特殊位(sbit)是指特殊功能寄存器()是

41、指特殊功能寄存器(sfr)中可按位访问的位,)中可按位访问的位,用关键字用关键字sbit定义。可用定义。可用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口口

42、,读引脚读引脚(2)片外扩展)片外扩展I/O口的定义口的定义当作片外数据存储单元看待,使用当作片外数据存储单元看待,使用#define语句定义语句定义例如:例如:#include #define PORTA XBYTE0 xffc;PORTA=0 x01; /在在PORTA 地址地址0 xffc上送出上送出0 x01Var=PORTA; /读读PORTA 地址地址0 xffc的数据的数据3.10.3 3.10.3 存储类型存储类型可以指定变量的存储区,主要有以下几个存储区:可以指定变量的存储区,主要有以下几个存储区:3.10.3 3.10.3 存储类型存储类型1. DATA段段 (1)速度快,

43、空间有限()速度快,空间有限(128B 00H-7FH) (2)包含了堆栈、寄存器组()包含了堆栈、寄存器组(R0-R7) (3)一般在此区间定义使用频繁的变量)一般在此区间定义使用频繁的变量。3.10.3 3.10.3 存储类型存储类型2. BDATA段段 此区域中的变量可位寻址,(低此区域中的变量可位寻址,(低128字节中的字节中的128个可寻址位,个可寻址位,20H-2FH,16字节)字节)注意:此区域不能定义注意:此区域不能定义float double类型的变类型的变量量 三个函数,完成同样三个函数,完成同样的功能,但是效率不同。的功能,但是效率不同。错误,应该使用对应的位变量错误,应

44、该使用对应的位变量3.10.3 3.10.3 存储类型存储类型3. IDATA段段用寄存器间接寻址的内部用寄存器间接寻址的内部RAM区,(高区,(高128字节,字节,80H-FFH,与,与SFR区地址相同,只能使用间接寻址)区地址相同,只能使用间接寻址)3.10.3 3.10.3 存储类型存储类型4. PDATA与与XDATA段段PDATA区:外部区:外部RAM,256字节,字节,8位地址位地址XDATA区:外部区:外部RAM,64K字节,字节,18位地址位地址都使用都使用MOVX指令,但是间址寄存器不同(指令,但是间址寄存器不同(R0,R1,DPTR)3.10.3 3.10.3 存储类型存储

45、类型5.CODE段段 代码段,一般不能在程序运行中改写,用于存放常数,表格等,代码段,一般不能在程序运行中改写,用于存放常数,表格等,必须在编译时初始化。必须在编译时初始化。MOVC指令访问。指令访问。3.10.4 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

提交评论