MCS51原理和汇编指令集.doc_第1页
MCS51原理和汇编指令集.doc_第2页
MCS51原理和汇编指令集.doc_第3页
MCS51原理和汇编指令集.doc_第4页
MCS51原理和汇编指令集.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

概述把微型计算机的主要部件都集成在一块芯片上,就称为单片机。这样做使得数据传送距离缩短,抗干扰能力更强,可靠性更高,运行速度更快。MCS-51单片机是美国INTEL公司于1980年推出的产品。MCS-51具有总线结构完善、专用寄存器集中管理、布尔操作功能以及指令系统完善等优点,为以后的其它单片机的发展奠定了基础。微型计算机的结构有两种类型。一种是程序存储器和数据存储器相互独立的结构,即哈佛(Harvard)结构;另一种是程序存储器与数据存储器统一编址的结构,即普林斯顿(Princeton)结构。MCS-51系列单片机采用的是哈佛结构,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。近年来MCS-51获得了飞速的发展,许多电气商都开发了MCS-51系列单片机,最典型的是PHILIPS和ATMEL公司。PHILIPS公司在低功耗、高速度和增强型功能上作出了贡献,在原有基础上新增了高速I/O口,A/D转换器,PWM(脉宽调制)、WDT(看门狗定时器)以及串行总线(I2C)和网络总线(CAN)等功能部件。ATMEL公司推出的AT89Cxx系列MCS-51兼容型单片机,完美地将Flash(非易失闪存技术)EEPROM与80C51内核结合起来,Flash程序存储器可以反复写入擦除,使得单片机开发更为便利。MCS-51系列单片机主要包括8031、8051和8751等产品,其主要性能如下:8位CPU4k字节(或更大)的程序存储器(ROM)128字节的数据存储器(RAM)32条I/O口线111条指令,大部分为单字节指令21个专用寄存器2个可编程定时/计数器5个中断源,2个优先级一个全双工串行通信口外部数据存储器寻址空间为64kB外部程序存储器寻址空间为64kB逻辑操作位寻址功能MCS-51单片机结构MCS-51单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等单元以及数据总线、地址总线和控制总线等三条总线。其基本结构如图。中央处理器(CPU):中央处理器是整个单片机的核心部件,负责控制、指挥和调度系统中各部件协调的工作,完成运算和控制输入输出功能等操作。它主要由算术/逻辑运算单元(ALU)和指令执行控制器组成。ALU具有加、减、乘、除运算和进行与、或、取反、异或等逻辑运算的功能,另外MCS-51的ALU还具有位处理能力,即具有置位、清零、取反等位逻辑功能,因此,MCS-51也叫做布尔处理机。指令执行控制器产生指令执行所需的控制信号,完成由取指令到指令译码等任务。数据存储器(RAM):MCS-51内部有128/256个8位数据存储单元和128个专用寄存器单元,它们是统一编址的。专用寄存器存放用于设置单片机的特定数据,不能用于存放自定义数据(即用户数据)。所以,真正意义上的RAM只有128个,可存放I/O数据,运算的中间结果或字型表等。程序存储器:目前流行的MCS-51单片机多采用Flash闪存作为程序存储器,用于存放程序、常数或表格。AT89C51的程序存储器容量为4K字节。时钟电路:时钟电路是微处理器的核心部件之一。AT89C51内置最高频率达24MHz的时钟电路,用于产生整个单片机运行的脉冲时序。定时/计数器(ROM):MCS-51系列单片机有两个(8052有三个)16位的可编程定时/计数器,称为T0和T1 。它们的核心部件是一个可预置的加一计数器,具有定时和对外部事件计数的功能,可用于定时控制、延时、对外部事件监测和计数等场合。并行输入输出(I/O)口:MCS-51单片机共有4组8位I/O口(P0、 P1、P2或P3),用于对外部设备的数据传输。全双工串行口:MCS-51单片机内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。中断系统:MCS-51单片机具备较完善的中断功能,有两个外部中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并有二个优先级别可选择。MCS-51单片机引脚MCS-51系列单片机中的8031、8051及8751多采用40引脚双列直插(DIP)封装,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,另有4根控制线,如图所示。这些引脚的功能如下: Pin20: 接地。 Pin40: 正电源,接+5V电源(某些芯片用3-6V宽电压电源,或3.3V电源)。 Pin19: 时钟XTAL1脚,片内振荡电路的输出端。 Pin18: 时钟XTAL2脚,片内振荡电路的输入端。 时钟电路有两种方式。一种是片内振荡器方式,但需在18和19脚外接石英晶体和电容,电容的值一般取10p-30p。另外一种是外部时钟方式,即将XTAL1接地,外部时钟信号从XTAL2输入。输入输出(I/O)引脚: Pin39-Pin32为P0.0-P0.7 I/O引脚,Pin1-Pin7为P1.0-P1.7 I/O引脚,Pin21-Pin28为P2.0-P2.7 I/O引脚,Pin10-Pin17为P3.0-P3.7 I/O引脚,这些输入输出引脚的功能将在下面叙述。Pin9: RESET/Vpd ,复位/备用电压复用引脚。上电时,时钟电路开始工作,在RESET引脚上出现两个机器周期以上的高电平,单片机即复位。复位过程中,程序计数器PC指向0000H,P0-P3口全部为高电平,堆栈指针为07H,其它专用寄存器被清零,但不改变RAM内容。RESET由高电平下降为低电平后,单片机即从0000H地址开始执行程序。此外,RESET/Vpd还是一个复用引脚,Vcc掉电期间,此引脚可接上备用电源,以保证内部RAM中的数据不丢失。 _Pin30: ALE/PROG,访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址的低8位。不访问外部存储器时,ALE端输出1/6时钟频率的正脉冲信号。如果是EPROM或EEPROM型单片机,在编程期间,此引脚用于输入编程脉冲。 _Pin29: PSEN,访问外部程序存储器时,此引脚输出负脉冲选通信号,PC的16位地址数据将出现在P0口和P2口上,外部程序存储器则把指令放到P0口上,由单片机读入并执行。 _Pin31: EA/Vpp,高电平时,访问内部程序存储器,并且当程序地址大于4kB时,自动读取外部程序存储器。为低电平,只访问外部程序存储器。在编程时,该引脚需加上编程电压。MCS-51单片机时序时序是用定时单位来描述的,MCS-51的时序单位有四个,它们分别是节拍、状态、机器周期和指令周期。节拍与状态:单片机内置振荡器的脉冲周期称为节拍(用P表示),振荡脉冲经过二分频后得到单片机内部工作的时钟信号,这一信号的周期称为状态(用S表示)。这样,一个状态就有两个节拍,前半周期相应的节拍为P1 ,后半周期对应的节拍为P2 。机器周期:MCS-51的机器周期是固定的(在振荡器频率确定的情况下)。一个机器周期有6个状态,分别表示为S1-S6。则一个机器周期有12个节拍,可以记为S1P1、S1P2S6P1、S6P2。即机器周期就是振荡脉冲周期的1/12。例如,使用12MHz的时钟频率,机器周期就是1us。指令周期:执行一条指令所需要的时间称为指令周期。MCS-51的指令周期不尽相同,可能为一到四个不等的机器周期。MCS-51的指令:MCS-51指令系统中,按它们的存放容量划分,可分为单字节指令、双字节指令和三字节指令。根据存放容量和执行时间的不同,指令有下面几种形式:单字节单周期指令 单字节双周期指令双字节单周期指令双字节双周期指令三字节双周期指令单字节四周期指令MCS-51单片机I/O口MCS-51单片机有4组8位I/O口:P0、P1、P2和P3口。P0口:P0 口是一个漏极开路型双向I/O口。在访问外部存储器时,P0口是低8位地址/数据复用总线。一般情况下,P0口需外接上拉电阻。 P1口: P1口为带内部上拉电阻的8位双向I/O口。P2口P2口为带内部上拉电阻的8位双向I/O口。在访问外部存储器时,P2口输出高8位地址。P3口:P3口是一个带内部上拉电阻的8位双向I/O口。P3口增加了第二功能控制逻辑。P3口的第二功能引脚定义如下:P3.0串行输入口(RXD)P3.1串行输出口(TXD)P3.2外中断0(INT0)P3.3外中断1(INT1)P3.4定时/计数器0的外部输入口(T0)P3.5定时/计数器1的外部输入口(T1)P3.6外部数据存储器写选通(WR)P3.7外部数据存储器读选通(RD) 由P0-P3口的结构可知,将这些口作为输入口时,必须预先使这些口线下方的MOS管截止,否则引脚读到的状态一直为0。也就是说,在读外部数据前,应先使接口置1。MCS-51单片机存储器结构程序存储器程序存储器用于存放程序代码、常数和表格等。MCS-51有64kB程序存储器寻址空间。对于内部无ROM的8031单片机,它的程序存储器必须外接,此时单片机的端必须接地,强制CPU从外部程序存储器读取程序。对于内部有ROM的8051等单片机,则需接高电平,使CPU先从内部的程序存储器中读取程序,当PC值超过内部ROM的容量时,才会转向外部程序存储器读取程序。 AT89C51片内有4kB的程序存储器,其地址为0000H0FFFH。单片机复位后,程序计数器的内容为0000H,系统将从0000H单元开始执行程序。数据存储器一般用随机存取存储器(RAM)作为数据存储器。MCS-51单片机内部有128或256个字节的RAM(不同的型号容量可能不同),也可以外接数据存储器。 AT89C51内部共有256个字节RAM,分为两个部分。其一是地址从00H7FH(共128个字节)的用户数据存储区;另一是地址从80HFFH(也是128个字节)的特殊功能寄存器组(SFR)。 地址为00H1FH的32个字节被分为四块,每块为八个8位寄存器,均以R0R7来命名,常称这些寄存器为通用寄存器。程序状态字(PSW)的第3和第4位(RS0和RS1),可以确定R0-R7与RAM地址的映射关系,其对应关系如下表所示。 地址为20H2FH的区域为位寻址区,它们既可作为一般字节单元用字节寻址,也可对它们进行位寻址。位寻址区共有16个字节,128个位,位地址为00H7FH。位地址分配如表所示。字节地址MSB 位地址 LSB2FH7FH7EH7DH7CH7BH7AH79H78H2EH77H76H75H74H73H72H71H70H2DH6FH6EH6DH6CH6BH6AH69H68H2CH67H66H65H64H63H62H61H60H2BH5FH5EH5DH5CH5BH5AH59H58H2AH57H56H55H54H53H52H51H50H29H4FH4EH4DH4CH4BH4AH49H48H28H47H46H45H44H43H42H41H40H27H3FH3EH3DH3CH3BH3AH39H38H26H37H36H35H34H33H32H31H30H25H2FH2EH2DH2CH2BH2AH29H28H24H27H26H25H24H23H22H21H20H23H1FH1EH1DH1CH1BH1AH19H18H22H17H16H15H14H13H12H11H10H21H0FH0EH0DH0CH0BH0AH09H08H20H07H06H05H04H03H02H01H00HCPU能直接寻址这些位,执行例如置“1”、清“0”、求“反”等逻辑操作。常称MCS-51具有布尔处理功能,布尔处理的存储空间指的就是这些位寻址区。 特殊功能寄存器特殊功能寄存器(SFR)也称为专用寄存器,可分为两组:控制寄存器和状态寄存器。控制寄存器用于控制单片机内一些部件的运作方式;而状态寄存器则反映了单片机的运行状态。MCS-51有21个特殊功能寄存器,它们分布在内部RAM的80HFFH地址中,这些寄存器的功能已作了规定,其结构不能修改。 程序计数器PC(Program Counter)PC是一个16位计数器,它指出CPU即将执行的一条指令的地址。PC有自动加1功能,即完成了一条指令的执行后,PC自动加1。当有转移、子程序调用、中断响应和复位等操作时,PC被强制改写,使CPU改变执行顺序。PC本身并没有地址,无法对它进行读写。累加器ACC(Accumulator)累加器A是一个最常用的专用寄存器。大部分单操作数指令的操作数取自累加器,很多双操作数指令中的一个操作数也取自累加器。加、减、乘、除法运算的指令,运算结果都存放于累加器A或AB累加器对中。寄存器B乘法指令中,两个操作数分别取自累加器A和寄存器B,其结果存放于AB寄存器对中。除法指令中,被除数取自累加器A,除数取自寄存器B,结果商存放于累加器A,余数存放于寄存器B中。也可以作为一般寄存器使用。程序状态字PSW(Program Status Word)PSW是一个8位寄存器,用于存放程序运行的状态信息,PSW的一些位可由软件设置,有些位则由硬件自动设置。寄存器的各位定义如下(其中PSW.1是保留位,未使用)。PSW.7(CY)进位标志位,可在位操作中作位累加器使用。PSW.6(AC)辅助进位标志位,加、减运算时若低4位向高4位进位或借位,AC置位,否则被清零。AC辅助进位也常用于十进制调整。PSW.5(F0) 自定义标志位。PSW.4、PSW.3(RS1和 RS0)寄存器组选择位。PSW.2(OV)溢出标志。带符号加减运算时,若运算结果超出了累加器A所能表示的符号数范围(-128+127),即产生溢出,OV=1,表明运算结果错误。若OV=0,表明运算结果正确。执行加法指令ADD时,当位6向位7进位,而位7不向CY进位时,OV=1。或者位6不向位7进位,而位7向CY进位时,同样OV=1。除法指令,乘积超过255时,OV=1,表示乘积在AB寄存器对中。若OV=0,则说明乘积没有超过255,乘积只在累加器A中。除法指令中,OV=1,表示除数为0,运算不被执行。否则OV=0。 PSW.0(P)奇偶校验位,用于指示累加器A的奇偶性。数据指针(DPTR) 数据指针为16位寄存器。可以按16位寄存器来使用,也可以按两个8位寄存器来使用,即寄存器DPH和DPL。DPTR主要是用来保存16位地址,当对64kB外部数据存储器寻址时,可作为间址寄存器使用,例如以下两条指令(数据传送方向相反):MOVXA,DPTR ;将外部数据送累加器或MOVXDPTR,A ;累加器内容送到外部存储器在访问程序存储器时,DPTR可作为基址寄存器,采用基址+变址寻址方式访问程序存储器,这条指令常用于读取程序存储器内的表格数据:MOVCA,A+DPTR堆栈指针SP(Stack Pointer)8位寄存器,用于指示栈顶在内部RAM中的位置。系统复位后,SP的初始值为07H。从RAM的结构分布中可知,08H1FH隶属13工作寄存器区,若编程时需要用到这些寄存器,必须在初始化程序中对堆栈指针SP进行设置。原则上设在任何一个区域均可,但一般设在40H60H之间较为适宜。堆栈是一种数据结构。数据写入堆栈称为入栈(PUSH,也称为压入),从堆栈中取出数据称为出栈(POP,也称为弹出)。堆栈的最主要特征是“后进先出”规则,即最先入栈的数据放在堆栈的最底部,而最后入栈的数据放在栈的顶部,因此,最后入栈的数据出栈时则是最先的。这和往一个箱里存放书本很相似,欲将放入下层的书取出,必须先取走上层的书本。那么堆栈有何用途呢?堆栈的设立是为了在中断操作和子程序调用时用于保存数据,即常说的“断点保护”或“现场保护”。微处理器无论是调用子程序或执行中断服务程序结束后,都要回到主程序中来,在转入子程序或中断服务程序前,必须先将现场的数据(即“断点数据”)进行保存,否则返回时,CPU将不知道原来的程序执行到哪一步,原来的中间结果如何。具体做法是,在转入子程序或中断服务程序前,先将需要保存的数据(包括断点地址、中间结果等)压入堆栈中保存;而在返回时,复原这些数据,使主程序在断点处继续执行。转入子程序或中断服务程序时,需要保存的数据有若干个。如果微处理器进行多重子程序或中断服务程序嵌套,那么需保存的数据就更多,这就要求堆栈有相当的容量,否则会造成堆栈溢出,丢失备份数据,轻者使运算和执行结果错误,重则使整个系统紊乱。堆栈的操作有两种方式:一是自动方式,即在中断响应或子程序调用时,返回地址自动进栈,返回主程序时,返回地址由堆栈自动弹出送给PC,以保证程序从断点处继续执行,这种方式不需要编程人员干预。二是指令方式,使用专有的堆栈操作指令进行进出栈操作,有两种指令:进栈指令为PUSH;出栈指令为POP。 I/O口专用寄存器(P0、P1、P2、P3)I/O口寄存器P0、P1、P2和P3分别是MCS-51单片机的四组I/O口数据寄存器。MCS-51单片机没有专门的I/O口操作指令,而是把I/O口当作一般寄存器来处理,数据传送都统一使用MOV指令来进行。这样做的好处在于,I/O口还可以用寄存器直接寻址方式参与其他操作。定时/计数器(TL0、TH0、TL1和TH1)MCS-51单片机有两个相互独立的16位的定时/计数器T0和T1,由四个8位寄存器组成。定时/计数器方式选择寄存器(TMOD)TMOD是一个专用寄存器,用于控制两个定时/计数器的工作方式,TMOD可以用字节传送方式设置其内容,但不能位寻址。 串行数据缓冲器(SBUF)串行数据缓冲器SBUF用于串行通信应用中存放发送和接收的数据,它由两个独立的寄存器组成,一个是发送缓冲器,另一个是接收缓冲器,二者使用同一个符号SBUF。MCS-51定时/计数器MCS-51单片机有两个16位可编程定时/计数器,可产生定时,也可以对外部脉冲计数。它们共有四种工作方式,通过对其控制寄存器的编程,就可以选择工作方式。 定时/计数器的工作方式寄存器TMOD定时/计数器T0由寄存器TL0(低8位)和TH0(高8位)组成,定时/计数器T1由寄存器TL1(低8位)和TH1(高8位)组成。特殊功能寄存器TMOD控制定时/计数器的工作方式,其格式如下。 TMOD寄存器结构D7D6D5D4D3D2D1D0GATEM1M0GATEM1M0T1方式字段T0方式字段 M1和M0M1和M0是工作方式选择位。M1M0=00,方式0,为13位计数器;M1M0=01,方式1,为16位计数器;M1M0=10,方式2,为自动重装的8位计数器;M1M0=11,方式3。定时/计数选择位。=0时为定时器,对机器周期计数;=1时为计数器,对外部脉冲计数。GATE门控位。GATE=1时,只有INT0(INT1)引脚为高电平且程序中使TR0(TR1)置1时,定时/计数器被启动;GATE=0时,只要程序中使TR0(TR1)置1,定时/计数器就被启动。定时/计数器控制寄存器TCONTCON寄存器结构D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0TR0T0运行控制位,为1时启动T0。TR1T1运行控制位,为1时启动T1。 工作方式0定时/计数器工作方式0是13位计数器,由TH的全部8位和TL的低5位构成,TL的高3位没有使用。TL的低5位溢出时,向TH进位,而全部13位计数器溢出时,则向计数器溢出标志位TF进位,这时若允许定时/计数中断,单片机产生中断。工作方式1定时/计数器工作方式1为16位计数器。工作方式2定时/计数器工作方式2为自动重装的8位计数器。工作方式0和工作方式1在计数溢出后,计数器为全0,不再进行计数。因而在多点定时或循环计数应用时就必须重复设置定时初值,这给程序设计带来不便,同时也会影响定时精度。工作方式2针对这一问题而设置,它具有自动重装功能,即自动加载计数初值。在这种工作方式中,16位计数器分为两部分,即以TL为计数器,以TH作为预置寄存器,初始化时把计数初值分别装入TL和TH中。计数溢出时,由预置寄存器TH以硬件方法自动给计数器TL重新加载。这种方式也有其不利的一面,即计数器只有8位,计数值最大只能到255。MCS-51的中断系统 中断系统使计算机具有对时间上重叠的多个事件的处理能力,从而使其应用范围进一步扩大。MCS-51提供了5个中断源,两个中断优先级。并支持中断屏蔽,可将一部分或所有的中断关闭,只有打开相应的中断允许位后,方可接收相应的中断请求。MCS-51的中断源MCS-51单片机有5个中断源,分别是两个外中断INT0(P3.2)和INT1(P3.3)、两个定时/计数器(T0和T1)溢出中断和串行口中断。 TCON寄存器中的IT0和IT1用于设置外部中断的触发类型:IT0:外部中断0触发类型控制位,IT0=1,边沿触发中断;IT0=0,电平触发中断。IT1:外部中断1触发类型控制位,IT1=1,边沿触发中断;IT1=0,电平触发中断。中断的控制 MCS-51单片机对中断的允许和屏蔽是由中断允许寄存器IE控制的,IE的格式如下:IE寄存器结构IED7D6D5D4D3D2D1D0EA-ESET1EX1ET0EX0EA: 中断允许的总控制位。EA=1,允许中断;EA=0,禁止所有中断。ES: 串行口中断控制位。ES=1,允许串行口中断;ES=0,禁止串行口中断。ET1: 定时/计数器T1中断控制位。ET1=1,允许T1中断;ET1=0,禁止T1中断。EX1: 外中断1控制位。EX1=1,允许外中断1;EX1=0,禁止外中断1。ET0: 定时/计数器T0中断控制位。ET0=1,允许T0中断;ET1=0,禁止T0中断。EX0: 外中断0中断控制位。EX0=1,允许外中断0;EX1=0,禁止外中断0。MCS-51有两个中断优先级,即高优先级和低优先级,每个中断源都可设置为高或低中断优先级。一个低优先级的中断执行时,若出现高优先级中断的中断请求,CPU则响应这个高优先级的中断,待处理结束后再接着处理被打断的低优先级中断,这就是所谓的中断嵌套。相反,当CPU正在处理高优先级的中断时,若有低优先级的中断发出中断请求,CPU将不理会这个中断,继续执行中断服务程序(高优先级的),直到结束并返回主程序后,才会响应新的中断请求。MCS-51有一个中断优先级控制寄存器IP,IP的格式如下。IP中断优先级控制寄存器结构IPD7D6D5D4D3D2D1D0-PSPT1PX1PT0PX0PS: 串行口中断优先级控制位。PS=1,串行口中断为高优先级中断;PS=0,串行口为低优先级中断。PT1: 定时器1中断优先级控制位。PT1=1,定时器1中断为高优先级中断;PT1=0,定时器1中断为低优先级中断。PX1: 外中断1优先级控制位。PX1=1,外中断1为高优先级中断;PX1=0,外中断1为低优先级中断。PT0: 定时器0中断优先级控制位。PT0=1,定时器0中断为高优先级中断;PT0=0,定时器0中断为低优先级中断。PX0:外中断0优先级控制位。PX0=1,外中断0为高优先级中断;PX0=0,外中断0为低优先级中断。中断处理流程CPU响应中断请求后,就转入中断服务程序。不同的中断源、不同的中断要求可能有不同的中断处理方法,但它们的处理流程都大致如下。 中断请求不同的中断和不同的中断方式,使满足中断请求的条件不尽相同。对外部中断,IT=0时,若CPU监测到外中断引脚上的低电平,就判为中断请求;IT=1,则若CPU监测到外中断引脚由高电平变为低电平,判为中断请求。对定时/计数器,计数器的溢出就向CPU发出了中断请求。中断响应CPU响应中断,由硬件自动将程序计数器PC内容(断点地址)压入堆栈,而将相应的中断服务程序入口地址装入程序计数器PC,转入中断服务程序。5个中断源的中断服务程序入口地址如下。5个中断源的中断服务程序入口地址中断源入口地址外中断00003H定时/计数器0000BH外中断10013H定时/计数器0001BH串行口中断0023H中断处理由于CPU响应中断时没有对各寄存器中的数据进行备份,中断处理时有可能破坏这些数据,而这些数据是中断返回后由断点处继续执行所必需的,所以应在中断服务程序的开始备份这些数据。中断处理结束后,应将这些数据恢复。一般的做法是,在中断服务程序的开始将这些寄存器数据压入堆栈,而在中断处理结束后将堆栈数据弹出到原来的寄存器中。注意弹出和压入应是是反序的。中断返回中断返回就是从中断服务程序转到被中断程序处执行。MCS-51单片机中,中断返回是通过一条专门的指令实现的:RETI。MSC-51指令系统一个单片机的指令集合即为单片机的指令系统。每种单片机都有自己独特的指令系统,那么指令系统是生产厂商定义的,如要使用其单片机,用户就必须理解和遵循这些指令规则,要掌握某种(类)单片机,指令系统的学习是必须的。单片机使用的语言主要有汇编语言和高级语言,但不管使用何种语言,最终都要“翻译”成为机器语言(机器码),单片机才能执行。机器语言是指单片机指令的二进制编码,汇编语言则是指令的助记符 。MSC-51寻址方式寻址方式即寻找操作数地址的方式。MSC-51指令系统有7种寻址方式。寄存器寻址寄存器寻址方式可用于访问8个工作寄存器R0-R7。在这种寻址方式中,被寻址寄存器的内容就是操作数。如指令MOV A,Rn(n=0-7)表示把寄存器Rn的内容传送给累加器A,其中源操作数就是Rn的内容。直接寻址直接寻址是指在指令中直接给出RAM地址而取得操作数的寻址方式。例如指令MOV A,40H表示把RAM中40H单元的内容传送给A。源操作数采用的就是直接寻址方式。对于特殊功能寄存器,在助记符指令中,可直接用规定符号来代替地址,如MOV A,P0表示把P0口(地址为80H)的内容传送给A。寄存器间接寻址寄存器间接寻址是以寄存器内容为地址的寻址方式,用于访问内部RAM或外部RAM。访问内部RAM或外部RAM的低256字节时,可采用R0或R1作为间址寄存器。例如指令MOV A,Ri(i=0或1),其中(Ri)=40H,这条指令从Ri中取出内容40H,作为操作数地址,把该地址中的内容传送给A,即把RAM中40H单元的内容送A。访问外部RAM的低256字节时,只要把MOV改为MOVX就可以了。访问外部RAM时,可用16位数据指针DPTR作间址寄存器,可对整个外部数据存储器空间(64K)寻址。 立即寻址操作数出现在指令中,即为立即寻址。例如指令MOV A,#40H表示把立即数40H(冠以前缀#号,以便与地址相区别)传送给A。基址寄存器加变址寄存器间址寻址 这种寻址方式用于访问程序存储器,地址由基址寄存器(DPTR或PC)与变址寄存器A的内容相加得到。例如指令MOVC A,A+DPTR,其中A为05H,DPTR的内容为0400H,该指令执行的结果是把程序存储器0405H单元的内容传送给A。这种寻址方式在查表时特别有用。相对寻址 相对寻址方式是为了程序的相对转移而设计,以PC的内容为基址,加上给出的偏移量作为转移地址,从而实现程序的转移。位寻址 MCS-51单片机中,RAM中的20H2FH字节单元对应的位地址为00H7FH,特殊功能寄存器中的某些位也可位寻址。MCS-51共有111条指令,可分为5类: 1.数据传送指令(共29条) 2.算术运算指令(共24条) 3.逻辑运算及移位指令(共24条) 4.控制转移指令(共17条) 5.布尔变量操作指令(共17条) 一些符号的意义 在介绍指令系统前,我们先了解一些符号的意义,这对今后程序的编写都是相当有用的。 Rn当前选中的寄存器区的8个寄存器R0R7(n=0-7)。 Ri当前选中的寄存器区中可作为间址寄存器的两个寄存器R0和R1(i=0,1) direct内部RAM的8位地址。包含0127(255)内部RAM地址和特殊功能寄存地址。 #data指令中的8位常数。 #data16指令中的16位常数。 addr16用于LCALL和LJMP指令中的16位目的地址,其空间为64kB程序存储器地址。 #addr11用于ACALL和AJMP指令中的11位目的地址。 rel8位带符号的偏移量,用于所有的条件转移和SJMP等指令中,偏移量应处于下条指令首地址的-128+127范围内。 间接寄存器寻址或基址寄存器的前缀。 /为操作的前缀,声明对该位取反。 bit位寻址区中和特殊功能寄存器中的可寻址位。 A累加器。 B累加器B。用于乘法和除法指令中。 C进位标志位。 (x)x地址单元中的内容。 (x)以x内容为地址,所指单元中的内容。 “:”、“,”、“;”分别为标号后缀、操作数分隔符和注释符。注意,这些符号不能以中文输入法输入。数据传送指令 数据传送指令共有29条。数据传送指令把源操作数传送到目的操作数,指令执行后,源操作数不变,目的操作数等于源操作数。数据传送指令不影响标志C,AC和OV,但可能会对奇偶标志P有影响。 以累加器A为目的操作数的指令(4条) 这4条指令把源操作数送到累加器A。有直接、立即、寄存器和寄存器间接寻址方式: MOV A,data ;(data)(A) 直接地址中的内容送到累加器A MOV A,#data ; #data(A) 立即数送到累加器A MOV A,Rn ;(Rn)(A) Rn中的内容送到累加器A MOV A,Ri ;(Ri)(A) Ri指向的地址中的内容送到累加器A 以寄存器Rn为目的操作数的指令(3条) 这3条指令把源操作数的内容送到Rn中。有直接、立即和寄存器寻址方式: MOV Rn,data ;(data)(Rn) 直接地址中的内容送到寄存器Rn中 MOV Rn,#data ; #data(Rn) 立即数送到寄存器Rn中 MOV Rn,A ;(A)(Rn) 累加器A中的内容送到寄存器Rn中 以直接地址为目的操作数的指令(5条) 这组指令的功能是把源操作数送到RAM中的直接地址data中。有直接、立即、寄存器和寄存器间接寻址等寻址方式: MOV data,data ;(data)(data) 直接地址单元之间的数据传送 MOV data,#data ; #data(data) 立即数送到直接地址单元 MOV data,A ;(A)(data) 累加器A中的内容送到直接地址单元 MOV data,Rn ;(Rn)(data) 寄存器Rn中的内容送到直接地址单元 MOV data,Ri ;(Ri)(data) Ri指向的地址中的内容送直接地址单元 以间接地址为目的操作数的指令(3条) 这组指令的功能是把源操作数送到以Ri内容为地址的片内RAM中。有直接、立即和寄存器3种寻址方式: MOV Ri,data ;(data)(Ri) 直接地址单元送Ri内容为地址的RAM单元 MOV Ri,#data ; #data(Ri) 立即数送到Ri内容为地址的RAM单元 MOV Ri,A ;(A)(Ri) 累加器A内容送到Ri内容为地址的RAM单元 查表指令(2条) 这组指令的功能是对存放于程序存储器中的表数据进行查找,使用变址寻址方式: MOVC A,A+DPTR ;(A)+(DPTR)(A) 表单元中的内容送到累加器A MOVC A,A+PC ;(A)+(PC)(A) 表单元中的内容送到累加器A 累加器A与外部RAM之间的传送指令(4条) 这4条指令的作用是累加器A与片外RAM间的数据传送。 MOVX DPTR,A ;(A)(DPTR) 累加器A送数据指针指向的片外RAM单元 MOVX A, DPTR ;(DPTR)(A) 数据指针指向的片外RAM单元送到累加器 MOVX A, Ri ;(Ri)(A) 寄存器Ri指向的片外RAM单元送到累加器 MOVX Ri,A ;(A)(Ri) 累加器送到寄存器Ri指向的片外RAM单元 堆栈操作指令(2条) 这类指令只有两条,为入栈操作指令和出栈操作指令。 PUSH data ;(SP)+1(SP),(data)(SP) POP data ;(SP)(data),(SP)-1(SP) 数据交换指令(5条) 这5条指令的功能是把累加器A中的内容与源操作数相互交换。 XCH A,Rn ;(A)(Rn) XCH A,Ri ;(A)(Ri) XCH A,data ;(A)(data) XCHD A,Ri ;(A3-0)(Ri)3-0)累加器与Ri所指单元的低半字节互换 SWAP A ;(A3-0)(A7-4)累加器中高低半字节互换 16位数据传送指令(1条) 这条指令的功能是把16位常数送入数据指针寄存器。 MOV DPTR,#data16 ; #dataH(DPH),#dataL(DPL)16位常数的高8位送到DPH,低8位送到DPL算术运算指令 算术运算指令共有24条,主要是加、减、乘、除法四则运算指令。虽然MCS-51单片机的算术逻辑单元ALU仅能对8位无符号整数进行运算,但利用进位标志C,可进行多字节无符号整数的运算。同时利用溢出标志,还可以对带符号数进行运算。需要指出的是,除加1、减1指令外,这类指令大都会对PSW(程序状态字)有影响。这在使用中应特别注意。 加法指令(4条) 这4条指令的作用是把立即数,直接地址、R0-R7及间接地址内容与累加器A的内容相加,运算结果存在A中。 ADD A,#data ;(A)+ #data(A) ADD A,data ;(A)+(data)(A) ADD A,Rn ;(A)+(Rn)(A) ADD A,Ri ;(A)+(Ri)(A) 带进位加法指令(4条) 这4条指令在进行加法运算时考虑了进位。 ADDC A,data ;(A)+(data)+(C)(A) ADDC A,#data ;(A)+#data +(C)(A) ADDC A,Rn ;(A)+Rn+(C)(A) ADDC A,Ri ;(A)+(Ri)+(C)(A) 带借位减法指令(4条) 这组指令包含立即数、直接地址、间接地址及R0-R7与累加器A连同进位位C相减,结果送回累加器A中。减法运算中,CY=1表示有借位,CY=0则无借位。OV=1声明带符号数相减时,从一个正数减去一个负数结果为负数,或者从一个负数中减去一个正数结果为正数的错误情况。在进行减法运算前,如果不知道进位标志位C的状态,则应先对C进行清零。 SUBB A,data ;(A)-(data) - (C)(A) SUBB A,#data ;(A)- #data -(C)(A) SUBB A,Rn ;(A)-(Rn) -(C)(A) SUBB A,Ri ;(A)-(Ri) -(C)(A) 乘法指令(1条) 这个指令把累加器A和寄存器B中的8位

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论