第二章目录2-180C51单片微机的内部结构2-280C51单片机的引脚及其功能2-380C51CPU的结构和特点2-4存储器结构和地址空间2-5并行输入/输出端口2-6布尔(位)处理器2-780C51单片微机的工作方式数据存储器(datamemory)由随机存取存储器RAM构成,用来存放随机数据。在80C51中,数据存储器又分片内数据存储器(internaldatamemory)和片外数据存储器(externaldatamemory)两部分。片内数据存储器(IRAM)地址只有8位,因而最大寻址范围为256个字节。在80C51中,设置有一个专门的数据存储器的地址指示器——数据指针DPTR,用于访问片外数据存储器(ERAM)。数据指针DPTR也是16位的寄存器,这样,就使80C51具有64KB的数据存储器扩展能力。2-4-2内部数据存储器片内数据存储器是最灵活的地址空间。它在物理上又分成两个独立的功能不同的区。片内数据RAM区:对80C51,为地址空间的低128B;对80C52,为地址空间的0~256B。特殊功能寄存器SFR区:地址空间的高128B。对于80C52,高128B的RAM区和SFR区的地址空间是重叠的。究竟访问哪一个区是通过不同的寻址方式来加以区别,即访问高128BRAM区时,选用间接寻址方式;访问SFR区,则应选用直接寻址方式。图2-10为片内数据存储器的地址空间分布图。工作寄存器区:这是一个用寄存器直接寻址的区域,指令的数量最多,均为单周期指令,执行的速度最快。从图2–10中可知,其中片内数据RAM区的0~31(00H~1FH),共32个单元,是4个通用工作寄存器组(表2–l),每个组包含8个8位寄存器,编号为R0~R7。在某一时刻,只能选用一个寄存器组使用。其选择是通过软件对程序状态字(PSW)中的RS0、RS1二位的设置来实现的。设置RS0、RS1时,可以对PSW字节寻址,也可以位寻址方式,间接或直接修改RS0、RS1的内容。通常采用后者较方便。⒈片内数据RAM区例如,若RS0、RS1均为0,则选用工作寄存器0组为当前工作寄存器。现需选用工作寄存器组1则只需将RS0改成l,可用位寻址方式(SETBPSW.3,PSW.3为RS0位的符号地址)来实现。累加器ACC、B、DPTR及CY(布尔处理器的累加器)一般也作为寄存器对待。寄存器R0、R1通常用做间接寻址时的地址指针。位寻址区:从片内数据RAM区的32-47(20H-2FH)的16个字节单元,共包含128位,是可位寻址的RAM区。这16个字节单元,既可进行字节寻址,又可位寻址。字节地址与位地址之间的关系见表2–2。这16个位寻址单元,再加上可位寻址的特殊功能寄存器一起构成了布尔(位)处理器的数据存储器空间。在这一存储器空间所有位都是可直接寻址的,即它们都具有位地址。字节寻址区:从片内数据RAM区的48~127(30H~7FH),共80个字节单元,可以采用直接字节寻址的方法访问。对于80C52,还有高128B的数据RAM区。这一区域只能采用间接字节寻址的方法访问。堆栈区及堆栈指示器SP:堆栈是在片内数据RAM区中,数据先进后出或后进先出的区域。堆栈指示器(stackpointer)在80C51中存放当前的堆栈栈顶所指存储单元地址的一个8位寄存器。堆栈有二种形式,一是向上生成,二是向下生成。80C51单片微机的堆栈是向上生成的:即进栈时SP的内容是增加的;出栈时SP的内容是减少的。80C51的堆栈区域可用软件设置堆栈指示器(SP)的值,在片内数据RAM区中予以定义。系统复位后SP内容为07H。如不重新定义,则以07H为栈底,压栈的内容从08H单元开始存放。通过软件对SP的内容重新定义,使堆栈区设定在片内数据RAM区中的某一区域内,堆栈深度不能超过片内RAM空间。堆栈是为子程序调用和中断操作而设立的。其具体功能有两个:保护断点和保护现场。在80C51单片微机中,堆栈在子程序调用和中断时会把断点地址自动进栈和出栈,还有对堆栈的进栈和出栈的指令(PUSH、POP)操作,用于保护现场和恢复现场。⒉特殊功能寄存器SFR区特殊功能寄存器SFR(SpecialFunctionRegister)是80C51中各功能部件所对应的寄存器,用以存放相应功能部件的控制命令、状态或数据的区域。80C51设有128B片内数据RAM结构的特殊功能寄存器空间区。除程序计数器PC和4个通用工作寄存器组外,其余所有的寄存器都在这个地址空间之内。对于80C51共定义了21个特殊功能寄存器,其名称和字节地址列于表2-3中。在80C52中,除上述80C51的21个之外,还增加了5个特殊功能寄存器,共计26个。访问其它地址无效。在80C51的21个(80C52的26个)特殊功能寄存器中,字节地址中低位地址为0H或8H的特殊功能寄存器,除有字节寻址能力外,还有位寻址能力。这些特殊功能寄存器与位地址的对应关系见表2-4。2-4-3片外数据存储区片外数据存储器是在外部存放数据的区域,这一区域只能用寄存器间接寻址的方法访问,所用的寄存器为DPTR、R1或R0。指令助记符为MOVX。当用R0、R1寻址时,由于R0、R1为8位寄存器,因此最大寻址范围为256B;当用DPTR寻址时,由于DPTR为16位寄存器,因此最大寻址范围为64KB。2-5并行输入/输出端口80C51共有四个8位的并行双向口,计有32根输入/输出(I/O)口线。各口的每一位均由锁存器、输出驱动器和输入缓冲器所组成。由于它们在结构上的一些差异,故各口的性质和功能也就有了差异。它们之间的异同列于表2-5。2-5-1P0口•P0口是一个多功能的8位口,可以字节访问也可位访问,其字节访问地址为80H,位访问地址为80H~87H。⒈位结构P0口位结构原理图见图2-11。P0口中一个多路开关:多路开关的输入有两个,地址/数据输出;输出锁存器的输出/Q。多路开关的输出用于控制输出FETQ0的导通和截止。多路开关的切换由内部控制信号控制。P0口的输出上拉电路:I/O口的上拉电路导通和截止受内部控制信号和地址/数据信号共同(相“与”)来控制。当内部信号置1时,多路开关接通地址/数据输出端。当地址/数据输出线置1时,控制上拉电路的“与”门输出为1,上拉FET导通,同时地址/数据输出通过反相器输出0,控制下拉FET截止,这样A点电位上拉,地址/数据输出线为“1”。当地址/数据输出线置0时,“与”门输出为0,上拉FET截止,同时地址/数据输出通过反相器输出1,控制下拉FET导通,这样A点电位下拉,地址/数据输出线为“0”。通过上述分析可以看出,此时的输出状态随地址/数据线而变。因此,P1口可以作为地址/数据复用总线使用。这时上下两个FET处于反相,构成了推拉式的输出电路,其负载能力大大增加。此时的P0口相当一个双向口。由于内部控制信号为0,与门关闭,上拉FET截止,形成P0口的输出电路为漏极开路输出;P0口作为普通I/O口使用:输出锁存器的Q端引至下拉FET栅极,因此P0口的输出状态由下拉电路决定。在P0口作输出口用时,若P0.i输出1,输出锁存器的Q端为0,下拉FET截止,这时P0.i为漏极开路输出;若P0.i输出0,输出锁存器的Q端为0,下拉FET导通,P0.i输出低电平。在P0口作输入口用时,为了使P0.i能正确读入数据,必须先使P0.i置1。这样,下拉FET也截止,P0.i处于悬浮状态。A点的电平由外设的电平而定,通过输入缓冲器读入CPU。这时P0口相当于一个高阻抗的输入口。⒉P0口的功能⑴作I/O口使用。相当于一个真正的双向口:输出锁存、输入缓冲,但输入时需先将口置1;每根口线可以独立定义为输入或输出。它具有双向口的一切特点。与其它口的区别是,输出时为漏极开路输出,与NMOS的电路接口时必须要用电阻上拉,才能有高电平输出;输入时为悬浮状态,为一个高阻抗的输入口。⑵作地址/数据复用总线用。此时P0口为一个准双向口。但是有上拉电阻,作数据输入时,口也不是悬浮状态。作地址/数据复用总线用。作数据总线用时,输入/输出8位数据D0~D7;作地址总线用时,输出低8位地址A0~A7。当P0口作地址/数据复用总线用之后,就再也不能作I/O口使用了。P1口是一个8位口,可以字节访问也可按位访问,其字节访问地址为90H,位访问地址为90H~97H。⒈位结构和工作原理P1口的位结构如图2-12所示。包含输出锁存器、输入缓冲器BUF1(读引脚)、BUF2(读锁存器)以及由FET晶体管Q0与上拉电阻组成的输出/输入驱动器。P1口的工作过程分析如下:P1.i位作输出口用时:CPU输出0时,D=0,Q=0,Q=l,晶体管Q0导通,A点被下拉为低电平,即输出0;CPU输出1时,D=l,Q=1,Q=0,晶体管Q0截止,A点被上拉为高电平,即输出l。2-5-2P1口⒉、P1口的特点输出锁存器,输出时没有条件;输入缓冲,输入时有条件,即需要先将该口设为输入状态,先输出1;P1.i位作输入口用时:先向P1.i位输出高电平,使A点提升为高电平,此操作称为设置P1.i为输入线。若外设输入为1时A点为高电平,由BUFI读入总线后B点也为高电平;若外设输入为0时A点为低电平,由BUF1读入总线后B点也为低电平。工作过程中无高阻悬浮状态,也就是该口不是输入态就是输出态。具有这种特性的口不属于“真正”的双向口,而被称为“准”双向口。⒊P1口的操作⑴字节操作和位操作CPU对于P1口不仅可以作为一个8位口(字节)来操作,也可以按位来操作。有关字节操作的指令有:输出:MOVP1,A;P1←AMOVP1,#data;P1←#dataMOVP1,direct;P1←direct输入:MOVA,P1;A←P1MOVdirect,Pl;direct←Pl有关位操作的指令有:置位、清除:SETBP1.i;P1.i←1CLRPl.i;P1.i←0输入、输出:MOVP1.i,C;P1.i←CYMOVC,P1.i;CY←P1.i判跳:JBP1.i,rel;P1.I=1,跳转JBCP1.i,rel;P1.i=0,跳转且;P1.i=0逻辑运算:ANLC,P1.i;CY←(P1.i·CY)ORLC,P1.i;CY←(P1.i+CY)P1.i中的i=0,…7。P1口不仅可以以8位一组进行输入、输出操作,还可以逐位分别定义各口线为输入线或输出线。例如:ORLP1,#00000010B可以使P1.l位口线输出l,而使其余各位不变。ANLP1,#11111101B可以使P1.1位线输出0,而使其余各位不变。⑵读引脚操作和读锁存器操作从P1口的位结构图中可以看出,有两种读口的操作:一种是读引脚操作,一种是读锁存器操作。在响应CPU输出的读引脚信号时,端口本身引脚的电平值通过缓冲器BUF1进入内部总线。这种类型的指令,执行之前必须先将端口锁存器置1,使A点处于高电平,否则会损坏引脚,而且也使信号无法读出。这种类型的指令有:MOVA,P1;A←P1MOVdirect,P1;direct←P1在执行读锁存器的指令时,CPU首先完成将锁存器的值通过缓冲器BUF2读入内部,进行修改,然后重新写到锁存器中去,这就是“读一修改一写”指令。这种类型的指令包含所有的口的逻辑操作(ANL、ORL、XRL)和位操作(JBC、CPL、MOV、SETB、CLR等)指令。⑶P1口的多功能线在80C52中,P1.0和P1.1口线是多功能的,即除作一般双向I/O口线之外,这两根口线还具有下列功能:P1.0—定时器/计数器2的外部输入端T2;P1.1—定时器/计数器2的外部控制端T2EX。P2口是一个多功能的8位口,可以字节访问也可位访问,其字节访问地址为A0H,位访问地址为A0H~A7H。⒈P2口位结构和工作原理P2口位结构原理图示于图2-13。多路开关的输入有两个:一个是口输出锁存器的输出端Q;一个是地址寄存器(PC或DPTR)的高位输出端。多路开关的输出经反相器反相后去控制输出FET的Q0。多路开关的切换由内部控制信号控制。输