单片机原理及应用第2版张兰红第4章80C51单片机的软件基础PPT课件下载推荐.pptx
《单片机原理及应用第2版张兰红第4章80C51单片机的软件基础PPT课件下载推荐.pptx》由会员分享,可在线阅读,更多相关《单片机原理及应用第2版张兰红第4章80C51单片机的软件基础PPT课件下载推荐.pptx(137页珍藏版)》请在冰豆网上搜索。
操作码目的操作数,源操作数;
注释例:
LOOP:
ADDA,10H;
A(A)+10H,根据设计使某台计算机具有的指令的集合便构成了这一计算机的指令系统。
80C51系列单片机的指令系统共有111条指令。
30,5,1.标号标号是用户定义的一个符号,表示指令或数据的存储单元地址。
标号由以英文字母开始的18个字母或数字串组成,以冒号“:
”结尾。
不能用指令助记符、伪指令或寄存器名来做标号。
一旦使用了某标号定义一地址单元,在程序的其它地方就不能随意修改这个定义,也不能重复定义。
一条指令中的标号代表该指令所存放的第一个字节存储单元的地址,故标号又称为符号地址,在汇编时,把该地址赋值给该标号。
30,6,2.操作码操作码是用英文缩写的指令或伪指令功能助记符,用来表示指令的性质或功能。
如MOV表示传送操作,ADD表示加法操作。
30,7,3.操作数操作数字段给出参与操作的数据或数据所在单元的地址。
操作数字段的内容复杂多样,它可能为以下几种情况之一:
(1)工作寄存器名
(2)特殊功能寄存器名(3)标号名(4)常数(5)$(6)表达式,09:
30,8,
(1)工作寄存器名由PSW.3和PSW.4规定的当前工作寄存器区中的R0R7都可以出现在操作数字段中。
(2)特殊功能寄存器名8051中的21个特殊功能寄存器的名字都可以作为操作数使用。
(3)标号名可以在操作数字段中引用的标号包括:
赋值标号:
由汇编伪指令EQU等赋值的标号可以作为操作数。
指令标号:
指令标号虽未被赋值,但这条指令的第一字节地址就是这个标号的值,在以后指令操作数字段中可以引用。
30,9,(4)常数为了方便用户,汇编语言指令允许以各种数制表示常数,即常数可以写成二进制、十进制或十六进制等形式。
(5)$操作数字段中还可以使用一个专门符号“$”,用来表示程序计数器的当前值。
这个符号最常出现在转移指令中,如“SJMP$”,该指令表示继续执行该指令,在原地循环。
30,10,(6)表达式汇编程序允许把表达式作为操作数使用。
在汇编时,计算出表达式的值,并把该值填入目标码中。
例如:
MOVA,SUM+l。
30,11,4.注释注释是对指令或程序段的简要功能说明,以方便阅读与调试程序。
30,12,4.1.2指令系统的寻址方式寻找操作数所在单元的地址称为寻址;
确定操作数所在单元地址的方法称为寻址方式。
80C51单片机指令系统中的寻址方式共有七类,分别为立即寻址、寄存器寻址、寄存器间接寻址、直接寻址、变址寻址、相对寻址、位寻址。
30,13,1.立即寻址操作数就跟在操作码的后面,可以立即参与指令所规定的操作,不须另去寄存器或存储器等处寻找和取数。
例:
MOVA,#30H;
A30HMOVDPTR,#2000H;
DPTR2000H书写单片机指令时,为了辨识是立即数,规定在它的前面加一个“#”号作为前缀。
30,14,2.寄存器寻址寻址某工作寄存器,自该寄存器读取或存放操作数,以完成指令所规定的操作。
例MOVR3,A;
R3(A)ADDA,R2;
A(A)+(R2)可以寻址的寄存器种类有工作寄存器R0R7、累加器A、寄存器B、数据指针DPTR、位累加器Cy。
30,15,3.寄存器间接寻址寄存器中存放的是地址而不是操作数,寻找到该工作寄存器后,以其内容为地址,去寻找所指的RAM单元以读取或存放操作数,称为寄存器间接寻址。
例设R1的内容为40H,则MOVA,R1;
A片内RAM(40H)的内容。
图4-1MOVA,R1指令执行过程,A,1AH,09:
30,16,说明:
(1)对于51子系列单片机来说,寄存器间接寻址可用于访问内部RAM的128个存储单元(00H7FH),对于52子系列单片机芯片则可以访问内部RAM的256个单元(00HFFH)。
(2)只能用R0或R1间接寻址,对外部RAM,当地址值256B时,用DPTR间接寻址。
(3)书写单片机指令时,为了辨识是间接地址,规定在寄存器的前面加一作为前缀。
(4)此方式也可用于访问外部RAM的64KRAM。
(5)此方式不可以用于访问特殊功能寄存器。
30,17,51子系列的RAM编址图,52子系列的RAM编址图,09:
30,18,4.直接寻址直接给出操作数所在的存储单元地址,以供寻址取数或存放的寻址方式称为直接寻址。
对于80C51系列单片机,直接寻址可用于访问程序存储器,也可用于访问数据存储器。
30,19,
(1)访问程序存储器的转移类指令。
长转移LJMPaddrl6绝对转移AJMPaddr11长调用LCALLaddrl6绝对调用ACALLaddrll执行这些指令后,PC整16位或低11位地址将更换为指令直接给出的地址,机器将改为访问以所给地址为起始地址的存储器区间,取指令(或取数)依次执行。
30,20,
(2)访问数据存储器的含direct的各条指令。
例MOVA,directMOVRn,directMOVdirect1,direct2,09:
30,21,说明:
1)direct是一个8位地址,称为直接寻址字节。
它的值如小于等于127,可用于访问片内RAM的低128个单元,它的值如大于127,专用于访问特殊功能寄存器。
2)直接寻址是访问特殊功能寄存器的唯一方法。
特殊功能寄存器占用的是片内RAM自80HFFH间的地址,对于51子系列,片内RAM只有128个单元,它与特殊功能寄存器没有地址重叠。
对于52子系列,片内RAM有256个单元,其高128个单元与特殊功能寄存器间有重叠了。
为了避免混乱,设计时规定了直接寻址指令不能访问片内RAM的高128个单元,要访问这些单元,只能用寄存器间址指令。
30,22,51子系列的RAM编址图,直接寻址方式,52子系列的RAM编址图,直接寻址方式,09:
30,23,5.变址寻址(或称基址加变址寄存器间接寻址)这种寻址方式只用于访问程序存储器,当然只能读取,不能存放,它主要用于查表性质的访问。
以程序计数器PC或数据指针DPTR作为基址寄存器,以累加器A作为变址寄存器,把它们的和作为程序存储器的地址,再寻址该单元,读取数据。
指令MOVCA,A+DPTRMOVCA,A+PC,09:
30,24,例如:
MOVCA,A+DPTR;
A(A)+(DPTR)设(A)=10H,(DPTR)=2000H,程序存储器的(2010H)=36H,则上面语句的功能是将A的内容与DPTR的内容相加,形成操作数的地址2010H,把该地址中的数据传送到累加器A。
即(DPTR)+(A)A。
结果(A)=36H。
图4-2MOVCA,A+DPTR的执行示意图,09:
30,25,6.相对寻址在相对转移指令中采用相对寻址方式,在指令的操作数部分给出地址的相对偏移量。
相对偏移量为一个带符号的8位二进制数。
将相对转移指令所在的地址称为源地址;
转移后的地址称为目的地址。
目的地址=源地址+转移指令字节数+相对偏移量。
30,26,例SJMP50H设指令所在PC值为2000H,而指令的机器码为2字节80H、50H,则转移去的地址=2000H+02H+50H=2052H,故指令执行后,PC的值变为2052H,程序下一次执行的地址为2052H。
在实际编程中,往往已知源地址和目的地址,从而计算偏移量。
在80C51中,常用“rel”表示为相对偏移量。
rel计算方法:
rel=目的地址(源地址+转移指令字节数),09:
30,27,7.位寻址80C51单片机设有独立的位处理器(布尔处理器),位寻址时,可以对内部RAM和特殊功能寄存器的某些位寻址单元进行寻址。
区分位地址与字节地址的方法:
主要看是位操作指令还是其它指令,若为位操作指令,则操作数中的地址一定是位地址,反之则为字节地址。
SETB30H;
(30H)1,09:
30,28,寻址方式总结:
MCS-51系统的各寻址方式对应不同的存储器空间,使用时要特别注意在各种不同的存储器中采用什么寻址方式。
30,29,片内数据存储器,1.直接寻址方式2.间接寻址方式3.位寻址,1.直接寻址方式2.位寻址,间接寻址方式,09:
30,30,80C51系列单片机的指令系统包括数据传送、算术运算、逻辑运算、控制转移、位操作五大类指令。
分类介绍指令之前,先介绍描述指令的一些符号的意义。
Rn:
表示通用寄存器R0R7。
Ri:
表示通用寄存器中可间接寻址(即用做8位地址指针)的寄存器R0和R1。
#data8:
表示8位立即数。
#data16:
表示16位立即数。
4.1.3指令系统,09:
30,31,direct:
表示8位片内RAM或SFR区的直接地址。
addr16/addr11:
表示外部程序寄存器的16位或11位地址。
rel:
表示8位偏移量。
bit:
表示直接位地址。
:
间接寻址寄存器或基址寄存器的前缀,如Ri,DPTR/:
位操作数的前缀,表示对该位取反。
(X):
X中的内容。
由X寻址的单元中的内容。
指令操作流程,将箭头右边的内容送入箭头左边的单元,09:
30,32,例4-1用汇编语言编写程序,实现将数据00H-0FH写入到片内RAM30H3FH,然后将数据依次读出来,在P1.0P1.3引脚用发光二极管显示出来,设二极管的阴极与P1口相连。
用keil软件调试并查看片内RAM单元中数据的变化,用Proteus软件观察仿真结果。
30,33,ORG0000H;
复位后PC的起始地址为0000HLJMPMAIN;
跳转到用户程序真正的起始地址0030HORG0030HMAIN:
MOVR0,#10H;
准备传送16个数据,设置循环次数为16MOVR1,#30H;
使传送的数据指针R1指向首地址30HMOVA,#00HLOOP:
MOVR1,A;
传送16个数据INCR1INCADJNZR0,LOOPNEXT:
准备显示16个数据,设置循环次数为16MOVR1,#30H;
使显示的数据指针R1指向首地址30HLOOP1:
MOVA,R1;
显示16个数据LCALLDISPLAY;
调用显示子程序INCR1DJNZR0,LOOP1LJMP$;
原地循环,09:
30,34,;
显示子程序DISPLAY:
MOVDPTR,#TABLE;
表格首址赋值给DPTRMOVCA,A+DPTR;
查表MOVP1,A;
显示数据LCALLDELY1S;
调用软件延时