单片机原理及应用李建忠课件第3章.ppt
- 文档编号:18772923
- 上传时间:2023-11-07
- 格式:PPT
- 页数:83
- 大小:4.27MB
单片机原理及应用李建忠课件第3章.ppt
《单片机原理及应用李建忠课件第3章.ppt》由会员分享,可在线阅读,更多相关《单片机原理及应用李建忠课件第3章.ppt(83页珍藏版)》请在冰点文库上搜索。
第3章MCS-51单片机指令系统和汇编语言程序示例,3.1MCS-51单片机指令系统概述3.2寻址方式3.3数据传送类指令3.4算术运算类指令3.5逻辑运算及移位指令3.6控制转移类指令3.7子程序调用与返回指令3.8位操作类指令3.9汇编程序格式与伪指令3.10汇编程序设计示例,3.1MCS-51单片机指令系统概述,指令、指令系统的概念指令:
计算机内部执行的一种操作,提供给用户编程使用的一种命令。
指令系统:
计算机能够执行的全部操作所对应的指令集合。
指令的三种属性功能属性:
每条指令都对应一个特定的操作功能;时间属性:
一条指令执行所用的时间;空间属性:
一条指令在程序存储器中存储所占用的字节数。
MCS-51单片机指令系统及其指令格式功能:
数据传送、算术操作、逻辑操作、程序转移、位操作等五大类;空间属性:
单字节指令(49条)、双字节指令(46条)和最长的三字节指令(只有16条)。
时间属性:
单机器周期指令(64条)、双机器周期指令(45条)和只有乘、除法两条4个机器周期的指令。
结构:
操作码+操作数。
操作码:
表示计算机执行该指令将进行何种操作。
操作数:
表示参加操作的数的本身或操作数所在的地址。
(无操作数、单操作数、双操作数),指令格式:
标号:
操作码助记符目的操作数,源操作数;注释,描述指令的一些符号的约定意义的说明:
Ri和Rn:
表示当前工作寄存器区中的工作寄存器,i取0或1,表示R0或R1。
n取07,表示R0R7。
#data:
表示包含在指令中的8位立即数。
#data16:
表示包含在指令中的16位立即数。
rel:
以补码形式表示的8位相对偏移量,范围为-128127,主要用在相对寻址的指令中。
addr16和addr11:
分别表示16位直接地址和11位直接地址。
direct:
表示直接寻址的地址。
bit:
表示可位寻址的直接位地址。
(X):
表示X单元中的内容。
(X):
表示以X单元的内容为地址的存储器单元内容,即(X)作地址,该地址单元的内容用(X)表示。
/和符号:
“/”表示对该位操作数取反,但不影响该位的原值。
“”表示操作流程,将箭尾一方的内容送入箭头所指另一方的单元中去。
3.2寻址方式,寻址方式:
CPU执行一条指令时怎样找到该指令所要求的操作数的方式。
立即寻址寄存器寻址寄存器间接寻址直接寻址变址寻址相对寻址位寻址,立即寻址操作数直接出现在指令中,紧跟在操作码的后面,作为指令的一部分与操作码一起存放在程序存储器中,可以立即得到并执行,不需要经过别的途径去寻找。
*在一个数的前面冠以#符号作前缀。
寄存器寻址在指令选定的某寄存器中存放或读取操作数,以完成指令规定的操作。
*ACC,DPTR,AB,Rn,Cy,寄存器间接寻址由指令指出某一寄存器的内容作为操作数地址的寻址方法。
*寄存器中的内容不是操作数本身,而是操作数的地址,到该地址单元中才能得到操作数。
*Ri,DPTR*可寻址内部RAM(Ri)和外部数据存储器(Ri,DPTR),图3.1寄存器间接寻址示意图,直接寻址指令中直接给出操作数所在的存储器地址供存取数。
*直接寻址可用于访问片内数据存储器(低128字节)、SFR。
变址寻址,基址寄存器加变址寄存器两者内容的和作为程序存储器地址,再寻址该单元,读取数据。
*以数据指针寄存器DPTR或PC作为基址寄存器,累加器A作为变址寄存器(DPTR+A,PC+A)。
*常用于访问程序存储器中的常数表。
图3.2变址寻址示意图,相对寻址以当前程序计数器PC值加上指令中给出的偏移量rel,而构成实际操作数地址。
*用于访问程序存储器,常出现在相对转移指令中。
*当前PC值指相对转移指令的存储地址加上该指令的字节数。
*偏移量rel是有符号的单字节数,以补码表示,范围是-128+127。
转移的地址(目的地址)为:
目的地址=当前PC值+rel=指令存储地址+指令字节数+rel,位寻址在位操作指令中直接给出位操作数的地址。
*片内RAM中的128位和特殊功能寄存器SFR中的93位。
3.3数据传送类指令,访问片内数据存储器的一般数据传送指令功能:
实现数在片内RAM单元之间、寄存器之间、寄存器与RAM单元之间的传送。
格式:
MOV,;目的操作数单元源操作数(或单元),图3.3访问片内RAM的一般传送指令操作关系图,表3.1访问片内RAM的一般传送指令表,片内特殊传送指令堆栈操作指令,*机器码分别为:
C0direct和D0direct。
数据交换指令,片外数据存储器数据传送指令指令助记符操作功能注释机器码(H)MOVXA,DPTR;(A)(DPTR)E6MOVXA,Ri;(A)(Ri)E2、E3MOVXDPTR,A;(DPTR)(A)F0MOVXRi,A;(Ri)(A)F2、F3*对片外扩展的数据存储器RAM或I/O口进行数据传送,必须采用寄存器间接寻址的方法,通过累加器A来完成。
访问程序存储器的数据传送指令指令助记符操作功能注释机器码(H)MOVCA,A+DPTR;(A)(A)+(DPTR)93MOVCA,A+PC;(PC)(PC)+1,(A)(A)+(PC)83,*访问程序存储器的数据传送指令又称作查表指令,采用基址寄存器加变址寄存器间接寻址方式。
*前一条指令采用DPTR作基址寄存器,数据表格可以存放在程序存储器64KB地址范围的任何地方。
*后一条指令以PC作为基址寄存器,查表范围只能在256个字节范围内。
编程时需要进行偏移量的计算,即MOVCA,A+PC指令所在地址与表格存放首地址间的距离字节数的计算,并需要一条加法指令进行地址调整。
偏移量计算公式为:
偏移量=表首地址-(MOVC指令所在地址+1),3.4算术运算类指令,算术操作类指令共24条,包括加法、带进位加法、带减位减法、加1、减1、乘除及十进制调整指令。
*算术运算结果影响标志位Cy、AC、OV、P。
表3.2加减法指令表,加、减法指令,图3.4加减法指令形式结构图(a)加减法指令关系图;(b)加1、减1指令关系图,十进制调整指令,*若AC=1,CY=1同时发生,或者高4位虽等于9但低4位修正后有进位,则A应加66H修正。
*十进制调整指令是一条对二-十进制的加法进行调整的指令。
两个压缩BCD码按二进制相加,必须在加法指令ADD、ADDC后,经过本指令调整后才能得到正确的压缩BCD码和数,实现十进制的加法运算。
*DA指令不能对减法进行十进制调整。
做减法运算时,可采用十进制补码相加,然后用DAA指令进行调整。
机内十进制补码可采用:
x补=9AH-x。
乘、除法指令,MULAB;,(B)(A)(B)158(A)(A)(B)70CY0,机器码:
A4H,*乘数放在累加器A和寄存器B中,乘积16位数中的低8位存放在A中,高8位存放在B中。
*若乘积大于FFH(255),OV置1,否则OV清零。
*乘法指令执行后CY总是零。
2除法指令,*被除数放在累加器A,除数放在寄存器B中,商存于累加器A中,余数存于寄存器B中。
*进位标志位CY和溢出标志位OV均被清零。
*若B中的内容为0,OV被置1,CY仍为0。
3.5逻辑运算及移位指令,表3.3逻辑操作指令表,表3.3逻辑操作指令表,图3.5逻辑指令形式结构图,与加、减法指令寻址方式相同的逻辑指令;(b)与加、减法指令寻址方式不同的逻辑指令,*逻辑“或”指令常用来使字节中某些位置“1”,其它位保持不变。
则欲置位的位用1与该位相或,保留不变的位用0与该位相或。
*逻辑异或指令常用来使字节中某些位进行取反操作,其它位保持不变。
欲某位取反该位与1相异或;欲某位保留则该位与0相异或。
还可利用异或指令对某单元自身异或,以实现清零操作。
*用移位指令还可以实现算术运算,左移一位相当于原内容乘以2,右移一位相当于原内容除以2,但这种运算关系只对某些数成立。
3.6控制转移类指令,控制转移类指令共17条,分为无条件转移指令、条件转移指令、子程序调用及返回指令。
3.6控制转移类指令,无条件转移指令,表3.4无条件转移指令,1LJMP(长转指令)LJMPaddr16*执行后,程序无条件地转向16位目标地址(addr16)处执行,不影响标志位。
*可以使程序从当前地址转移到64KB程序存储器地址空间的任意地址。
*执行时间长,字节多。
2AJMP(绝对转移指令)AJMPaddr11*AJMP的机器码组成:
*程序转移的目的地址是由AJMP指令所在位置的地址PC值加上该指令字节数2,构成当前PC值。
取当前PC值的高5位与指令中提供的11位直接地址形成转移的目的地址。
转移目的地址(PC),PC15PC14PC13PC12PC11a10a9a8a7a6a5a4a3a2a1a0,*程序可转移的位置和PC当前值在同一2KB范围内。
转移可以向前也可以向后,指令执行后不影响状态标志位。
例:
1、若AJMP指令地址(PC)=2300H。
执行指令AJMP0FFH后,转移目的地址(PC)=20FFH,程序向前转到20FFH单元开始执行。
2、AJMP指令地址(PC)=2FFFH。
执行指令AJMP0FFH后,结果为:
转移目的地址(PC)=30FFH,程序向后转到30FFH单元开始执行。
*若addr11相同,AJMP指令的机器码相同,转移的目的地址却可能不同。
3SJMP(相对短转指令)SJMPrel*rel用8位带符号数补码表示,转移范围是:
相对PC当前值向前转128字节,向后转127字节。
转移目的地址=SJMP指令所在地址+2+rel*手工汇编时,rel的计算公式:
向前转移:
rel=FEH-(SJMP指令地址与目的地址差的绝对值)向后转移:
rel=FEH-(SJMP指令地址与目的地址差的绝对值)-2*SJMP$(80FEH)造成单指令的无限循环,进入等待状态。
4JMPA+DPTR(相对长转移指令)*数据指针DPTR的内容为基址,以累加器A的内容为相对偏移量,在64KB范围内无条件转移。
*转移地址可以在程序运行中加以改变。
条件转移指令共有8条指令,分为累加器判零条件转移指令、比较条件转移指令和减1条件转移指令三类。
*当某种条件满足时,程序转移执行;条件不满足时,程序仍按原来顺序执行。
*转移的条件可以是前面指令的执行结果(标志位),也可以是条件转移指令本身包含的某种运算结果。
*指令采用相对寻址,程序可在以当前PC值为中心的-128+127范围内转移。
表3.5条件转移指令,1判零条件转移指令以累加器A的内容是否为0作为转移的条件。
JZ指令:
为0转移,不为0则顺序执行;JNZ指令:
不为0转移,为0则顺序执行。
累加器A的内容由这条指令以前的指令执行的结果决定。
指令不作任何运算,也不影响标志位。
2比较转移指令*先对两个规定的操作数进行比较,根据比较的结果来决定是否转移。
若两个操作数相等,则不转移,程序顺序执行;若两个操作数不等,则转移。
*比较是进行一次减法运算,但其差值不保存,两个数的原值不受影响,标志位要受到影响。
利用标志位CY作进一步的判断,可实现三分支转移。
3减1条件转移指令*第一操作数减1,结果仍保存在第一操作数中,然后判断是否为零。
若不为零,则转移到指定的地址单元,否则顺序执行。
*对于构成循环程序是十分有用的,可以指定任何一个工作寄存器或者内部RAM单元作为循环计数器。
3.7子程序调用与返回指令,子程序调用指令子程序调用指令有长调用和绝对调用两条,它们都是双周期指令。
*LCALL和ACALL指令类似于转移指令LJMP和AJMP,不同之处在于它们在转移前要把执行完该指令的PC内容自动压入堆栈后,才将子程序入口地址addr16(或addr11)送PC,实现转移。
*LCALL可调用64KB范围内的子程序。
该指令为3字节,所以执行该指令时首先应执行(PC)(PC)+3,获得下一条指令地址,并把此时的PC内容压入堆栈(先压入低字节,后压入高字节)作为返回地址,堆栈指针SP加2指向栈顶,然后把目的地址addr16送入PC。
*指令执行不影响标志位。
*ACALL与AJMP一样提供11位地址,只能调用与PC在同一2KB范围内的子程序。
指令为2字节指令,执行该指令时应执行(PC)(PC)+2以获得下一条指令地址,并把该地址压入堆栈作为返回地址。
*机器码的组成如下:
*被调用子程序的目的地址由执行ACALL指令的当前PC值的高5位与指令中提供的11位直接地址形成。
返回指令,*RET指令必须作子程序的最后一条指令;RETI必须作中断服务程序的最后一条指令。
*RETI指令除恢复断点地址外,还恢复CPU响应中断时硬件自动保护的现场信息。
执行RETI指令后,将清除中断响应时所置位的优先级状态触发器,使得已申请的同级或低级中断申请可以响应;而RET指令只能恢复返回地址。
空操作指令NOP;(PC)(PC)+1*在设计延时程序、拼凑精确延时时间及在程序等待或修改程序等场合是很有用的。
3.8位操作类指令,位地址的表示方法:
直接位地址表示,如D5H。
点表示,如PSW.5。
位名称表示,如直接用F0表示。
用户定义名称表示,如用户定义用FLG代替F0。
表3.6条件转移指令,图3.6硬件逻辑电路图,3.9伪指令,伪指令能够帮助进行汇编,不产生目标程序,不影响程序的执行。
主要用来指定程序或数据的起始位置,给出一些连续存放数据的地址或为中间运算结果保留一部分存储空间以及表示源程序结束等等。
设置目标程序起始地址伪指令ORG格式:
符号:
ORG地址(十六进制表示)功能:
放在一段源程序(主程序、子程序)或数据块的前面,规定后面的目标程序或数据块的起始地址。
ORG2000HSTART:
MOVA,#7FH*一个源程序中,可以多次使用ORG指令来规定不同程序段的起始位置,但各程序段之间不能重叠。
结束汇编伪指令END格式:
符号:
END功能:
汇编语言源程序的结束标志,表示汇编结束。
*一个源程序只能有一个END命令,否则就有一部分指令不能被汇编。
END前面若加标号,应与被结束程序段的起始点的标号一致,表示结束的是该程序段。
定义字节伪指令DB格式:
标号:
DB项或项表功能:
把项或项表的数据(字符串按字符顺序以ASCII码)存入从标号地址开始的连续存储单元中。
项或项表指一个字节数据,用逗号分开的字节数据串,或以引号括起来的字符串。
ORG2000HTAB1:
DB30H,8AH,7FH,73DB5,A,BCD,(2000H)=30H(2001H)=8AH(2002H)=7FH(2003H)=49H;十进制数73以十六进制数存放(2004H)=35H;35H是数字5的ASCII码(2005H)=41H;41H是字母A的ASCII码(2006H)=42H;42H是字符串BCD中B的ASCII码(2007H)=43H;43H是字符串BCD中C的ASCII码(2008H)=44H;44H是字符串BCD中D的ASCII码,定义字伪指令DW格式:
标号:
DW项或项表功能:
定义字的内容。
项或项表指所定义的一个字(两个字节)或用逗号分开的字串。
汇编时,机器自动按高8位先存入,低8位在后的格式排列。
ORG1500HTAB2:
DW1234H,80H汇编以后:
(1500H)=12H(1501H)=34H(1502H)=00H(1503H)=80H,预留存储空间伪指令DS格式:
标号:
DS表达式功能:
从标号地址开始,保留若干个字节的内存空间以备存放数据。
保留的字节单元数由表达式的值决定。
ORG1000HDS20HDB30H,8FH汇编后:
从1000H开始,预留32(20H)个字节的内存单元,从1020H开始,按DB指令赋值。
(1020H)=30H(1021H)=8FH。
等值伪指令EQU格式:
标号:
EQU项功能:
将项的值赋予EQU前面的标号。
项可以是常数、地址标号或表达式。
TAB1:
EQU1000HTAB2:
EQU2000汇编后:
TAB1、TAB2分别具有值1000H、2000H。
用EQU伪指令对某标号赋值后,该标号的值在整个程序中不能再改变。
位地址定义伪指令BIT格式:
标号:
BIT位地址功能:
将位地址赋予BIT前面的标号。
赋值后可用该标号代替BIT后面的位地址。
PLG:
BITF0AI:
BITP1.0程序中就可以把FLG和AI作为位地址来使用。
3.10汇编程序设计示例,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 应用 李建忠 课件