嵌入式系统设计 (1)PPT推荐.ppt
《嵌入式系统设计 (1)PPT推荐.ppt》由会员分享,可在线阅读,更多相关《嵌入式系统设计 (1)PPT推荐.ppt(124页珍藏版)》请在冰豆网上搜索。
,2,十六进制表示方式:
它是对二进制形式的一种简化。
00100100B24H00001000B08H在实验室等少数环境下,可以将这种形式作为输入程序的一种辅助手段。
但是,这种形式的指令格式必须由对应的监控程序把它们翻译成二进制的“机器码”后存入程序存储器并运行。
二进制表示的形式十六进制表示的形式,3,指令的“助记符”方式(也称“汇编格式”):
00100100B24H00001000B08HADDA,#08H1,这是一种由英文单词或字母、数字来表征指令功能的形式。
是一种便于阅读、书写和交流的表示形式。
2,这种“汇编”格式的指令必须把它“翻译”为二进制形式“机器码”后才能为CPU所识别和执行。
3,三种不同的表示方法适用于不同的场合。
本章内容都以汇编的形式介绍指令系统。
二进制表示形式十六进制表示汇编格式,返回,2.1.3指令的字节数,在MCS-51单片机的指令系统中,因指令操作码和操作数的不同,指令(在存储器中)长度也各不相同。
分为单字节、双字节和三字节。
单字节指令(49条):
分无操作数、有操作数两种。
无操作数:
如INCDPTR10100011BINCA00000100B【特点】:
操作数隐含在操作码中。
含有操作数寄存器名称的单字节指令:
如:
MOVA,R011101000BMOVA,R111101001B【特点】:
寄存器名以三位数代码的形式在指令的后三位。
双字节指令(46条):
指令的操作码和操作数各占一个字节。
MOVA,#data01110100Bdata很明显:
8位的操作数本身占据一个字节。
n,n+1,mova,#data,双字节指令在程序存储器的存放示意图,三字节指令(16条):
指令中的操作数为双字节。
MOVDPTR,#data161001000B,data15-8,data7-0或者:
指令中分别包含1个字节的操作数和1个字节的操作数地址。
MOVdirect,#data举例:
MOV20H,#0FFH,MOVdptr,#data16,MOVdirect,#data,三字节指令在存储器中存放的方式示意图,指令的字节数与指令的运行时间,指令的字节多是否意味着指令周期就长?
从表中可见,指令的字节数与指令周期不是对等的关系,返回,2.1.4指令的分类,MCS-51单片机的指令如果按功能划分可以分为五类:
1,数据传送类指令:
完成数据在单片机内部之间的传送。
分为8位数和16位两种。
除了奇偶位外,指令的执行对PSW无影响。
2,算术运算指令:
用于操作数之间的加、减、乘除运算。
【特点】:
多数情况下:
操作数之一在累加器A中,结果也保留在A中,运算结果要影响PSW(进位标志、奇偶和溢出标志等)。
3,逻辑操作和循环移位指令:
操作数之间的逻辑加、逻辑与、取反和异或等操作。
多数情况下一个操作数在A中,结果也存于A。
移位指令分为左移、右移和带进位和不带进位几种情况。
与算术类指令相比逻辑类指令基本不影响PSW的内容。
4,控制转移类指令:
条件转移、无条件转移,调用和返回。
通过修改程序指针PC的内容,使CPU转到另一处执行,从而改变程序的流向。
5,位操作指令:
位传送、位置位、位运算和位控制转移等操作。
按位操作而不是按字节的操作。
位控转移的判断不是检测某一个字节而是对某一个位进行检测并决定是否进行程序转移。
这类指令基本不影响PSW的内容。
返回,2.2寻址方式,在指令的操作数位置上,用于表征、寻找操作数的方式定义为“寻址方式”。
正确的理解、掌握寻址方式,是学习、使用指令的关键。
在MCS-51单片机中,共使用了七种寻址方式。
它们分别是:
1,寄存器寻址5,变址寻址;
2,直接寻址6,相对寻址;
3,立即数寻址7,位寻址。
4,寄存器间接寻址,继续,2.2.1寄存器寻址,当所需要的操作数在内部某一个寄存器Rn中时,将此寄存器名Rn直接写在指令的操作数的位置上。
MOVA,R7;
将寄存器R7中的内容送累加器A中。
MOV20H,R0;
将寄存器R0中的数据送内存20H单元INCR1;
将寄存器R1中的内容加一ADDA,R3;
A的内容与寄存器R3的内容相加送A寄存器寻址方式的指令大多是单字节指令。
指令本身并不带有操数,而是含有存放操作数的寄存器的3位代码。
以MOVA,Rn为例,使用R7寄存器,所以rrr=111,既指令的机器码为:
0EFH,11101rrr,操作码,寄存器代码,返回,E8HEFH,MOVA,Rn,2.2.2直接寻址,指令本身含有操作数的8位或16位地址。
既指令直接给出了操作数的地址。
MOVA,30H;
将RAM30H单元内容送累加器这里30H是操作数在RAM中的地址。
很明显,直接寻址的指令长度是两个或三个字节。
n,n+1,30H,累加器A,直接寻址示意图,使用直接寻址应注意的三个问题:
1,指令助记符中direct是用16进制数表示的操作数地址。
当地址恰好在SFR区域时,指令也可以用寄存器名来表示。
MOVA,80H可以写成MOVA,P0后者用SFR中寄存器的名字取代它的物理地址80H。
很明显,后者更容易阅读和交流,所以我们提倡使用SFR中寄存器名称来代替直接地址。
MOVA,SBUF;
串口数据缓冲器数据送AMOVIE,#00H;
初始化中断允许寄存器MOVTH1,#0FEH;
为定时器1赋初值尽管使用SFR的寄存器名称来取代直接地址,可以带来程序的可读性,但是在汇编时,仍要将寄存器名字转换为直接地址。
2,当直接地址时在工作寄存器区中时,可以使用两种寻址方式来访问。
MOVA,00H;
将RAM中00H单元数据送累加器AMOVA,R0;
将工作寄存器R0的内容送累加器A这里使用了不同的寻址方式,其指令的结构也不相同。
前者是:
11100101(0E5H)、00000000(00H)双字节。
后者的机器码是:
11101000(0E8H)单字节;
在物理结构上,R0与RAM的00H单元恰好是同一单元,所以不同的指令而执行结果是一样的。
类似的还有累加器A:
INCA寄存器寻址方式(单字节);
INCACC直接寻址方式(双字节);
INC0E0H直接寻址方式(双字节)。
3,在指令系统中:
字节地址与位地址是完全不同的概念。
前者用direct表示,而后者用bit表示,但在指令中都是用16进制表示的数。
MOVA,20H;
将RAM的20H单元内容送AMOVC,20H;
将位寻址区中的位地址为20H位内容送PSW中的Cy中。
片内RAM(20H-2FH)中的位寻址区结构图,2FH,20H,字节地址,返回,24H,位地址,返回前一次,2.2.3立即寻址,指令本身直接含有所需要的8位或16位的操作数。
将此数称为“立即数”(使用#标明)。
MOVA,#30H;
将(8位)立即数送累加器AMOVDPTR,#2000H;
16位立即数送DPTR积存器【注意】:
MOVA,#30HMOVA,30H两者的区别。
立即数寻址的指令长度为2或3个字节。
n,n+1,ROM,累加器A,MOVA,#30H指令执行流程,ROM,DPTR,MOVDPTR,#2000H指令的存储和执行,返回,2.2.4寄存器间接寻址,指令中含有保存操作数地址的寄存器Ri。
MOVA,Ri(i=0、1)CPU首先根据指令中寄存器名Ri找到操作数地址,然后再从该地址中找到操作数x。
MOVR0,#30H;
立即数送R0寄存器MOVA,R0;
从RAM的H单元取数送累加器A【注意】MOVA,R0和MOVA,R0指令的区别。
30H,R0,00H,累加器A,1,2,3,使用寄存器间址指令时应注意的三个问题:
1,间址寄存器Ri只能使用R0、R1寄存器(i=0、1)。
2,间址方式不仅用于片内RAM,同样也适用于片外RAM。
对于片内RAM使用Ri寄存器,寻址范围为00HFFH。
对于片外RAM,可以使用Ri,也可以使用DPTR做间址寄存器。
两者区别在于后者寻址范围为0000HFFFFH,两者都可以RAM和ROM。
3,间址方式的指令不能访问SFR中的单元。
如下面的程序是错误的:
MOVR1,#80HMOVA,R1(因为80H为SFR的物理地址),MCS-51片内、片外数据存储器示意图,特殊功能寄存器SFR,通用数据存储器,80H7FH,00H,FFH,片内数据存储器片外数据存储器256B个字节64KB个字节,片外数据存储器64KB,0000H,FFFFH,注意:
1,访问片内RAM20H存储单元;
MOVA,20H2,访问片外RAM存储单元;
MOVR0,#20HMOVXA,R03,尽管片内与片外的RAM单元的00H-FFH地址相重叠但由于指令的不同不会发生地址混乱。
返回,2.2.5变址寻址,指令使用DPTR或PC中的内容作为基地址,再与累加器A的内容相加,其和作为操作数地址。
MOVXA,A+PC;
PC内容与A的内容相加得操作数地址并将此操作数送AMOVXA,A+DPTR;
DPTR内容与A的内容相加得操作数地址并将此操作数送A使用变址指令时,要事先分别为A、DPTR赋值,以便获得操作数得地址。
变址指令只适用于对ROM存储器得访问,如查表等。
【举例】:
已知ROM中0302H单元有一个数x,现要把它送到累加器A中,试编程。
MOVDPTR,#0300H;
立即数送DPTRMOVA,#02H;
立即数送累加器AMOVCA,A+DPTR;
从ROM的00302单元取数送A,变址寻址示意图,02H,0300H,ALU,0302H,累加器A,DPTR,0300H+02H0302H,MOVCA,A+DPTR,返回,2.2.6相对寻址,转移指令中使用的一种寻址方式。
MCS-51单片机的指令系统中,有两类转移指令:
相对转移(2个或3个字节)绝对转移(3个字节)。
在绝对转移指令中,指令直接给出转移的目标地址(2字节地址),执行时将目标地址直接送给PC,从而控制程序转移;
而相对转移指令在执行中是将PC值与指令中的8位偏移量进行相加,形成指令要转移的目标地址。
SJMPrel由指令中有一个8位偏移量rel为带符号位的补码,所以控制程序转移的范围为+127-128。
54H,2002H,ALU,2056H,累加器A,PC,2002H+54H2056H,操作码,偏移量,例如:
SJMP54H;
(80H、54H),2000H,2002H,(LOOP1),相对寻址使用中应注意的问题,与绝对寻址相比,相对寻址具有很好的“浮动性”,因此是编程人员普遍使用的一种寻址方式。
使用时,要注意3点:
1,CPU进行地址计算时,PC取值是执行本指令后的地址值。
以上面的例子说明:
指令本身的首地址是2000H,执行完后变为2002H(既下一条指令的首地址)。
如果使用三字节的