第2章MCS-51单片机的结构和工作原理本章学习任务:掌握单片机内部结构。掌握单片机引脚功能。掌握单片机的存储器空间分配。掌握单片机的复位电路、时钟电路及指令时序。2.1单片机的内部结构8051单片机内部结构如图2-1所示,包含中央处理器CPU、存储器、定时器/计数、I/O接口器、中断控制系统等。1.存储器(1)ROM(ReadOnlyMemory)ROM一般为1~32K字节,用于存放应用程序,故又称为程序存储器。根据片内ROM的结构,单片机又可分为无ROM型、ROM型和可擦除可编程只读存储器EPROM(ElectricallyProgrammableRead-OnlyMemory)型三类。(2)RAM(RandomAccessMemory)RAM主要用来存放实时数据或作为通用寄存器、数据堆栈和数据缓冲器之用。正常工作时,既能读又不能写,停电后再加电期间信息会丢失。2.中央处理器(CPU)8051内部CPU由运算器(ALU),控制器(定时控制部件等)和专用寄存器三部分构成。(1)算术逻辑部件ALU(ArithmeticLogicUnit)8051的ALU是一个运算器,进行加、减、乘、除四则运算,进行与、或、非、异或等逻辑运算,还具有数据传送、移位、判断和程序转移等功能。(2)定时控制部件定时控制部件起着控制器作用,由定时控制逻辑、指令寄存器IR和振荡器OSC等电路组成。指令寄存器IR用于存放从程序存储器中取出的指令码,定时控制逻辑用于对IR中指令码译码,并在OSC配合下产生指令的时序脉冲,以执行相应的指令。OSC(Oscillator)是控制器的心脏,能为控制器提供时钟脉冲。定时与控制逻辑:时序部件(时钟系统和脉冲分配器构成)和微操作控制部件组成;发送控制信号,协调各部件工作。(3)专用寄存器组累加器A(Accumulator)它既可用于存放操作数,也可用于存放运算的中间结果。在进行算术或逻辑运算时,通常两个操作数中的一个放在A中,运算完成后,运算结果也存放在A中。指令系统中A表示累加器,ACC表示累加器的符号地址。通用寄存器B(GeneralPurposeRegister):是一个8位的特殊功能寄存器,主要用于乘法和除法运算。乘法运算时,A中存放被乘数,B中存放乘数,完成乘法操作后,乘积的高8位存于B中,低8位存于A中;除法运算时,A中存放被除数,B中存放除数,完成除法操作后,商存于A中,余数存于B中。在其它指令中,B可作为一般的寄存器使用,用于暂存数据。程序状态字寄存器PSW(PromgramStatusWord)PSW是一个八位标志寄存器,用来存放指令执行后的有关状态。①进位标志位Cy(Carry)在加法运算时,若累加器最高位A7有进位,则Cy=1;否则Cy=0。在减法运算时,若A7有了借位,则Cy=1;否则Cy=0。②辅助进位标志位AC(AuxiliaryCarry)若AC=0,则表示加减过程中A3没有向A4进位或借位;若AC=1,则表示加减过程中A3向A4有进位或借位。③用户标志位F0(Flagzero)通常不是机器在执行指令过程中自动形成的,而是由用户根据程序执行的需要通过传送指令确定。④寄存器选择位RS1和RS0用户通过改变RS1和RS0的状态可以方便地决定R0—R7的实际物理地址,工作寄存器R0—R7的物理地址和RS1、RS0之间的关系如表2-1所示。⑤溢出标志位OV(Overflow)若机器在执行运算指令过程中,累加器A中运算结果超出了八位数能表示的范围,则OV标志自动置1;否则OV=0。⑥奇偶标志位P(Parity)若P=1,则累加器A中“1”的个数为奇数;若P=0,则累加器A中的“1”的个数为偶数。例2-1RS1RS0=00B,F0=0,A=85H,R0=20H,(20H)=AFH,执行如下指令,PSW中各位的状态是什么?ADDA,@R0最高位有进位,所以最高位进位CP=1,即Cy=1;次高位上无进位,所以次高位进位CS=0;在加法过程中,低4位向高4位有进位,所以AC=1;运算结果中1的个数为3,是奇数,所以P=1;OV状态有如下关系确定所以PSW=11000101B=C5H程序计数器PC(ProgramCounter)PC是一个二进制16位的程序地址寄存器。当CPU顺序执行指令时,首先根据PC所指地址,取出指令,然后PC的内容自动加1,指向下一条指令的地址。只有在执行转移、子程序调用指令及中断响应时例外,那时PC的内容不再加1,而是被自动置入新的地址。单片机上电复位或按键复位时,PC=0000H,CPU就从ROM区0000H处开始执行程序。堆栈指针SP(StackPointer):SP是一个八位寄存器,能自动加1或减1,专门用来存放堆栈的栈顶地址。栈顶地址始终在SP中,是可以改变的,它决定堆栈中是否存放有数据。因此,当堆栈中空无数据时,栈顶地址必定和栈底地址重合,数据指针DPTR(DataPointer):DPTR是一个16位的寄存器,由两个八位寄存器DPH和DPL拼装而成,其中,DPH为DPTR的高八位,DPL为DPTR的低八位。DPTR可以用来存放片内ROM的地址,也可以用来存放片外RAM和片外ROM的地址。3.I/O端口(1)并行I/O端口P0它的第一功能可以作为通用I/O口使用。它的第二功能和P2口引脚第二功能相配合,用于输出片外存储器的低8位地址,然后传送CPU对片外存储器的读写数据。P1口为通用I/O使用时,用于传递用户的输入/输出数据。P2口的第一功能是作为通用I/O口使用。它的第二功能和P0口引脚第二功能相配合,用于输出片外存储器的高8位地址。P3这组引脚的第一功能和其于三个端口的第一功能相同,第二功能起控制作用,如表2-2所示。(2)串行I/O端口一个全双工的可编程串行I/O端口。串行发送数据线TXD,串行数据接收线RXD。在发送时,CPU由一条写发送缓冲器的指令把数据写入串行口的发送缓冲器SBUF中,然后从TXD端一位位地向外发送。与此同时,接收端RXD也可一位位地接收数据,直到收到一个完整的字符数据后通知CPU,再用一条指令把接收缓冲器中内容读入累加器。4.定时器/计数器两个16位可编程序的定时器/计数器,命名为T0和T1,具有四种工作方式。定时器/计数器T0由TH0和TL0构成,T1由TH1和TH1构成。TMOD(定时器方式寄存器)用于控制和确定各定时器/计数器的功能和工作模式。TCON用于控制定时器/计数器T0、T1启动和停止计数,同时包含定时器/计数器的状态。2.2单片机的存储器结构8051单片机的存储器地址空间分配如图2-4所示。1.程序存储器地址空间程序存储器用于存放编好的程序和表格常数。程序存储器通过16位程序计数器寻址,寻址能力为64KB,这使得指令能在64KB地址空间内任意跳转。8031内部没有ROM,只有8051才有4KBROM,地址范围0000H~0FFFH。2.数据存储器地址空间(1)片内RAM①工作寄存器区:8051的前32个单元(地址00H~1FH)称为寄存器区。通过对特殊功能寄存器PSW中RS1、RS0两位的编程设置,可选择任一寄存器组为工作寄存器组,方法如表2-1所示。②位寻址区:字节地址20H到2FH称为位地址区,共有16个字节,计128位,每位都有相应的位地址,位地址范围为00H~7FH,见表2-3。位寻址区有两种访问方式:一是按字节访问;另一种是通过位寻址,对位寻址区128位进行位操作。③便笺区:30H~7FH,便笺区共有80个RAM单元,用于存放用户数据或作堆栈区使用。MCS-51对便栈区中每个RAM单元是按字节存取的。④特殊功能寄存器(21个):8051片内高128BRAM中,有21个特殊功能寄存器(SFR),它们离散地分布在80H~FFH的RAM空间中。访问特殊功能寄存器只允许使用直接寻址方式。特殊功能寄存器表2-4所示。(2)片外RAMMCS-51应用系统往往是一个扩展系统。当片内RAM不够用时,可在片外部扩充数据存储器。MCS-51给用户提供了可寻址64KB(0000H~FFFFH)的外部扩充RAM的能力,至于扩多少RAM,则根据用户实际需要来定。2.3单片机引脚功能1.电源引脚(1)VCC(40脚)——+5V电源线。(2)VSS(20脚)——接地线。2.时钟电路引脚(晶振引脚)(1)XTAL1(19脚):接外部晶体和微调电容的另一端;在片内它是振荡电路反相放大器的出入端。在采用外部时钟时,对HMOS型工艺单片机而言,此引脚接地;对CHMOS型而言,该引脚应接外部时钟输入端。(2)XTAL2(18脚):接外部晶体和微调电容的一端;在8051片内它是振荡电路放大器的输出端。若需采用外部时钟电路时,对HMOS型工艺单片机,此引脚应接外部时钟的输入端;对CHMOS型单片机而言,此引脚应悬空。要检查8051/8031的振荡电路是否正常工作,可用示波器查看XTAL2端是否有脉冲信号输出。3.控制信号引脚(1)ALE/(30脚):地址锁存允许信号输出/编程脉冲输入引脚。当CPU访问片外存储器时,ALE输出信号控制锁存P0口输出的低8位地址,从而实现P0口数据与低位地址的分时复用。当8051上电正常工作后,自动在ALE端输出频率为fosc/6的脉冲序列(fosc代表振荡器的频率)。该引脚的第二功能是对8751内部4KBEPROM编程写入时,作为编程脉冲的输入端。(2)/VPP(31脚):允许访问片外存储器/编程电源线。=0,允许使用片外ROM;=1,允许使用片内ROM。对于8031,由于片内无ROM,故必须接低电平。该引脚第二功能VPP是对8751片内EPROM编程写入时,作为21V编程电压的输入端。(4)RST/VPD(9脚):复位线/备用电源。该引脚的第一功能是复位信号输入端,高电平有效。当此输入端保持两个机器周期的高电平时,就可以完成复位操作。该引脚的第二功能是备用电源的输入端。当主电源VCC发生故障,降低到低电平规定值时,将+5V电源自动接入该引脚,为RAM提供备用电源,以保证存储在RAM中的信息不丢失,从而复位后能继续正常工作。4.输入/输出端口(1)P0口(P0.7~P0.0)P0.7为最高位,P0.0为最低位。这8条引脚共有两种不同的功能,分别使用于两种不同情况。第一种情况是8051不带片外存储器,P0可以作为通用I/O口使用,P0.7~P0.0用于传送CPU的输入/输出数据。这时,输出数据可以得到锁存,不需外接专用锁存器,输入数据可以得到缓冲,增加了数据输入的可靠性。第二种情况是8051带片外存储器,P0.7~P0.0在CPU访问片外存储器时先是用于传送片外存储器的低8位地址,然后传送CPU对片外存储器的读写数据。(2)P1口(P1.7~P1.0)这8条引脚和P0口的8条引脚类似,P1.7为最高位,P1.0为最低位。当P1口作为通用I/O使用时,P1.7~P1.0的功能和P0口的第一功能相同,也用于传送用户的输入/输出数据。(3)P2口(P2.7~P2.0)这组引脚的第一功能可以作为通用I/O使用。它的第二功能和P0口引脚的第二功能相配合,用于输出片外存储器的高8位地址,共同选中片外存储器单元,但并不能像P0口那样还可以传送存储器的读写数据。(4)P3口(P3.7~P3.0)这组引脚的第一功能和其余三个端口的第一功能相同。第二功能作控制用,如表2-2所示。2.4时钟电路与时序2.4.1时钟信号的产生1.内部振荡方式8051芯片内部有一个高增益反相放大器,用于构成振荡器。反相放大器的输入端为XTAL1,输出端为XTAL2,分别为8051的19引脚和18引脚,在XTAL1和XTAL2两端跨接石英晶体及两个电容就可以构成稳定的自激振荡器,见图2-11。通常OSC的输出时钟频率fOSC为0.5~16MHz,典型值为12MHz或11.0592MHz。电容C01和C02通常取30pF左右,对振荡频率有微调作用。2.外部时钟方式将外部已有的时钟信号引入单片机,常见的几种电路结构如图2