单元3 MCS-51单片机指令系统(1) 下载本文

内容发布更新时间 : 2024/5/18 8:17:41星期一 下面是文章的全部内容请认真阅读。

单元三 MCS-51单片机指令系统

一、学习目标与要求

1、了解MCS-51单片机的寻址方式、指令结构及指令长度、指令周期等概念。 2、了解MCS-51单片机指令系统结构。 3、掌握常用指令的功能及指令操作方式。

4、能应用MCS-51单片机常用指令进行简单程序编写。 5、能解决简单应用课题程序设计。 二、本章重点内容 1、指令寻址方式

直接寻址、立即寻址、寄存器寻址、间接寻址、变址寻址、相对寻址、位寻址。 2、指令系统 (1)数据传送指令 (2)算术运算指令 (3)逻辑运算指令 (4)转移指令 (5)位指令

三、本章内容的前后联系 1、本章内容与前面内容的联系

单片机的指令执行过程同单片机的内部结构密切相关,他包括:单片机存储器空间、端口结构、程序状态字(PSW)、程序存储器中的常数表格等等。 2、与后面章节联系

指令是构成程序的基础,所以,必须注意掌握每一条指令的功能与使用特点,为后面汇编语言程序设计打好基础。 四、学习方法指导:

学习单片机指令系统要注意对指令功能及操作的理解,常用指令要在较短的时间内采取强化记忆的方式背记下来,同时,通过编写应用程序熟练掌握指令的应用环境。 1、对指令功能的理解以及常用与不常用指令

(1)数据传送指令中大部份指令的功能较为简单容易理解,难点是对查表指令MOVC A,@A+DPTR和MOVC A,@A+PC的理解,其中MOV A@A+DPTR是常用指令,它允许将常数表格存放在程序存储器内的任何位置,查表时只需将表的首地址赋1台数据指针DPTR(即DPTR指向表首地址),而A中的值是表内偏移地十,指令将程序存储器中(A+DPTR)单元中的内容传送到累加器A(即查表)。而MOVC A@A+PC指令形成的查表地址是(A)+(PC),其中程序计数器PC为该MOVC指令的下一条指令的地址(即所谓当前的PC值),往往要计

算当前PC值与表首地址的距离,将该距离加到累加器A中去,所以用MOVC,A@A+PC指令查表ee较麻烦,故该指令不是常用指令,半字节交换(XCHD)指令是常用指令,而累加器A高4位与低4位数据交换指令(SWAP指令)是常用指令。

(2)算术运送指令大多是常用指令,功能简明确,大多数指令以累加A为第一操作数,运算结果保存在累加A中,同一种运算的指令,第二操作数的来源于以来自不同的存储空间,也可以是相同的存储空间,但采用不同的寻址方式,例如将累加器A中的内容与片内RAM中50H单元的内容相加。

第二操作数采用直接寻址:ADD A:50H 第二操作数采用寄存器间接寻址:MOV R0,#50H ADD A,@R0

MCS-51单片机指令系统中只有带进位的减法指令,应用时要根据实际情况确定是否对进位标志清零。使用乘除法指令时,应注意每操作(被乘数或被除数)与第二操作数(乘数或除数)的存储位置以及运算结果的存储位置。

(3)逻辑运算指令大多也是功能简单常用指令,移位指令的作有征收数字电子技术中移位寄存器的作用类似,每次将累加器A中的内容左移(或右移)一位,数值上相当于将原数乘以2(或除以2)。

(4)控制转移指令是系统学习的难点之一,它难在条件转移指令中对转移条件的理解,它即要判断条件是否满足,又要确定程序是否转移。其实掌握这类指令并不难,简言之“满足条件则转移,不满足条件则执行下一条指令”。无条件转移指令容易理解,但要注意转移范围分别是-127B~+128B(短转移)或±2KB范围(相对转移)或64KB范围(长转移)。子程序调用与返回指令操作与堆拽操作有一定关系,要注意出入拽顺序。

(5)位操作指令是MCS-51单片机的特色,由于可以按位操作,方便了程序设计。位操作指令中的条件转移指令是短转移指令(-127~+128B范围),而且都是以条件位的状态作转移条件的。 五、典型例题分析

【例题3.1 】 0.2秒软件延时程序,设单片机振荡频率为12MHz。 TIME:MOV R6,#200 TIME1:MOV R7,#200 TIME2:NOP NOP NOP

DJNZ R7,TIME22 DJNZ R6,TIME1 RET

N R7-1=0? Y R6-1=0? Y 返回 内循环 外循环 开始 200→R6 200→R7 分析:1、该程序流程图如图1所示

2、由三条NOP指令和DJNZR7,TIME2 指令构成内循环,内循环次数为200次(R7从200减到等于0),延时时间为5个机器周期×200=1000机器周期,因fosc=12MHz,一个机器周期TC=1/(fosc/12)=1us,因此延时时间为1ms。

3、外循环次数同样为200次,因此总延时时间为f=200×[(5×200)+2+1]=200600us≈200ms=0.2s

4、采用三条NOP指令是为了方便延时时间的计算。

【例题3.2】 在程序存储器中从而2000H单元开始依次存放置0~9的平方值:0、1、4、9、?、81,要求依据累加器A中的值(0~9)来查找所对应的平方值,分析下述程序的结果。

MOV DPTR,#2000H MOV A,#09H MOVC A,@A+DPTR

执行结果:(DPTR)=2000H,(A)=81H。

这里根据累加器A中的值(0~9),利用查表指令来查找所对应的平方值。 【例题3.3】 对BCD码加法65+58 =123(BDH)进行十进制调整。

解:高R5(高)、R4(低)为被加数;高R3(高)、R2(低)为加数;相加和的结果存和:高R6(万)、R5(千、百)、R4(十、个)。 参考程序如下:

MOV A,R4 ;被加数十位?个位送入A ADD A,R2 ;十位?个位相加 DA A ;和的十位?个位调整 MOV R4,A ;和的十位?个位存入R4 MOV A,R5 ;被加数千位?百位送入A ADDC A,R3 ;千位?百位的和加低位进位 DA A ;和的千位?百位调整 MOV R5,A ;和的千位?百位存入R5 MOV A,#00H ; A清零 ADDC A,#00H ;求和的万位值 MOV R6,A ;和的万位存入R6

若程序执行前:(R5)=(98H)BCD, (R4)=(76H)BCD,(R3)=(54H)BCD,(R2)=(32H)BCD,则执行后:(R6)=(01H)BCD,(R5)=(53H)BCD,(R4)=(08H)BCD六、自我检查题

1、试确定下列程序运行后,累加器A,寄存器B,20H单元中的内容多少秒。