第2章80C51单片机内部结构和工作原理本章要点80C51系列单片机内部结构(关注面向用户的部分)外部引脚功能(重点是4个控制引脚和4个I/O端口)存储空间配置和功能(64KBROM、64KB外RAM和256B片内RAM)片内RAM结构和功能(分成3个物理空间:工作寄存器区、位寻址区和数据缓冲区)特殊功能寄存器的用途和功能(21个)程序计数器PC的作用和基本工作方式I/O端口结构、工作原理及功能时钟和时序(时钟频率和机器周期)复位电路、复位条件和复位后状态低功耗工作方式的作用和进入退出的方法ATMEL89系列单片机性能介绍2.1内部结构和引脚功能2.1.1内部结构(见下图)80C51单片机内部包含的功能部件一个8位CPU一个片内振荡器和时钟电路4KBROM128B内RAM可寻址64KB的外ROM和外RAM控制电路两个16位定时/计数器21个特殊功能寄存器4个8位并行I/O口,共32条可编程I/O端线一个可编程全双工串行口5个中断源,可设置成2个优先级2.1.2引脚功能40个引脚大致可分为4类:电源、时钟、控制和I/O引脚。电源1)Vcc:电源(+5V)2)Vss:接地时钟XTAL1、XTAL2:晶体振荡电路反相输入端和输出端。控制线ALE/PROG:地址锁存允许/片内EPROM编程脉冲1)ALE:用来锁存P0口送出的低8位地址(并行扩展)有效:P0口传送低8位地址信号无效:P0口传送8位数据信号2)PROG:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。PSEN:外ROM读选通信号RST/VPD:复位/备用电源1)RST:该引脚上连续保持两个机器周期以上高电平。2)VPD:在Vcc掉电情况下,接备用电源。EA/VPP:内外ROM选择/片内EPROM编程电源1)EA:EA=“1”,先访问内ROM,当超过4KB时,自动转向外ROM。EA=“0”,只访问外ROM。8031片内无ROM,EA必须接地。2)VPP:片内有EPROM的芯片,在EPROM编程期间,施加编程电源。I/O引脚(4个8位并行口,共32个引脚)P0口:8位双向I/O口并行扩展时,分时传送低8位地址和8位数据信号。P1口:8位准双向I/O口准双向:内部有固定的上拉电阻。P2口:8位准双向I/O口传送高8位地址P3口:8位准双向I/O口P3口第二功能P3.0(RXD):串行口输入端P3.1(TXD):串行口输出端P3.2(INT0):外部中断0请求输入端P3.3(INT1):外部中断1请求输入端P3.4(T0):定时/计数器0外部信号输入端P3.5(T1):定时/计数器1外部信号输入端P3.6(WR):外RAM写选通信号输出端P3.7(RD):外RAM读选通信号输出端2.2存储空间配置和功能64KB程序存储器(ROM),包括片内和片外。64KB外部数据存储器(外RAM)256B(包括特殊功能寄存器)内部数据存储器(内RAM)。存储空间配置图ROM—MOVC指令控制信号是PSEN和EA外RAM—MOVX指令控制信号是P3口中的RD和WR。内RAM—MOV指令2.2.1程序存储器(ROM)片外60KB:地址范围1000H-FFFFH片内4KB:地址范围0000H-0FFFH无论片内还是片外,地址空间是统一的,不重叠。读ROM是以程序计数器PC作为16位地址指针,依次读相应地址ROM中的指令和数据,每读一个字节,PC+1→PC,这是CPU自动形成的。但是有些指令有修改PC的功能,例如转移类指令和MOVC指令,CPU将按修改后PC的16位地址读ROM。读外ROM的过程CPU从PC中取出当前ROM的16位地址,分别由P0口(低8位)和P2口(高8位)同时输出,ALE信号有效时由地址锁存器锁存低8位地址信号,地址锁存器输出的低8位地址信号和P2口输出的高8位地址信号同时加到外ROM16位地址输入端,当PSEN信号有效时,外ROM将相应地址存储单元中的数据送至数据总线(P0口),CPU读入后存入指定单元。2.2.2外部数据存储器(外RAM)读外RAM的过程外RAM16位地址分别由P0口(低8位)和P2口(高8位)同时输出,ALE信号有效时由地址锁存器锁存低8位地址信号,地址锁存器输出的低8位地址信号和P2口输出的高8位地址信号同时加到外RAM16位地址输入端,当RD信号有效时,外RAM将相应地址存储单元中的数据送至数据总线,CPU读入后存入指定单元。写外RAM的过程写外RAM的过程与读外RAM的过程相同。只是控制信号不同,信号换成WR信号。当WR信号有效时,外RAM将数据总线(P0口分时传送)上的数据写入相应地址存储单元中。2.2.3内部数据存储器(内RAM)从广义上讲,80C51内RAM(128B)和特殊功能寄存器(128B)均属于片内RAM空间,读写指令均用MOV指令。但为加以区别,内RAM通常指00H~7FH的低128B空间。80C51内RAM又可分成3个物理空间:工作寄存器区、位寻址区和数据缓冲区。80C51内部RAM结构地址区域功能名称00H~1FH00H~07H工作寄存器0区08H~0FH工作寄存器1区10H~17H工作寄存器2区18H~1FH工作寄存器3区20H~2FH位寻址区30H~7FH数据缓冲区工作寄存器区(00H-1FH,32字节)作用:有专用于工作寄存器操作的指令,读写速度比一般内RAM要快,指令字节比一般直接寻址指令要短,还具有间址功能,能给编程和应用带来方便。工作寄存器区分为4个区:0区、1区、2区、3区。每区有8个寄存器:R0~R7,寄存器名称相同。但是,当前工作的寄存器区只能有一个,由PSW中的D4、D3位决定。位寻址区(20H-2FH)地址:16B(字节),共128b(位)。不仅有字节地址,每一位有位地址。可位寻址、位操作。即按位地址对该位进行置1、清0、求反或判转。用途:存放各种标志位信息和位数据。注意事项:位地址与字节地址编址相同,容易混淆。区分方法:位操作指令中的地址是位地址;字节操作指令中的地址是字节地址。位寻址区的位地址映象表字节地址位地址D7D6D5D4D3D2D1D02FH7FH7EH7DH7CH7BH7AH79H78H2EH77H76H75H74H73H72H71H70H2DH6FH6EH6DH6CH6BH6AH69H68H2CH67H66H65H64H63H62H61H60H2BH5FH5EH5DH5CH5BH5AH59H58H2AH57H56H55H54H53H52H51H50H29H4FH4EH4DH4CH4BH4AH49H48H28H47H46H45H44H43H42H41H40H27H3FH3EH3DH3CH3BH3AH39H38H26H37H36H35H34H33H32H31H30H25H2FH2EH2DH2CH2BH2AH29H28H24H27H26H25H24H23H22H21H20H23H1FH1EH1DH1CH1BH1AH19H18H22H17H16H15H14H13H12H11H10H21H0FH0EH0DH0CH0BH0AH09H08H20H07H06H05H04H03H02H01H00H数据缓冲区(30H-7FH)用于存放各种数据和中间结果,起到数据缓冲的作用。2.2.4特殊功能寄存器(SFR)高128B内80H-FFH其中字节地址能被8整除(字节地址末位为0或8)可位寻址位操作。地址映像表(P36)特殊功能寄存器地址映象表(一)特殊功能寄存器地址映象表(二)特殊功能寄存器地址映象表(三)部分特殊功能寄存器累加器Acc最常用的寄存器,助记符“A”。寄存器B乘除法指令,也可作为一般寄存器用。程序状态字寄存器(PSW)PSW也称为标志寄存器,存放各有关标志。其结构和定义如下:Cy:进位标志最高位有进位或借位,置“1”。位处理时,作为位累加器,软件置“1”或清“0”。AC:辅助进位标志低四位向高四位有进位或借位,置“1”。OV:溢出标志带符号数加/减,运算结果超出A的范围(-128~+127),置“1”;无符号数乘法,相乘超过255,置“1”;除法中除数为0时,置“1”。P:奇偶标志Acc中“1”的个数为奇数,置“1”。RS1、RS0:工作寄存器区选择控制位RS1、RS0=00—0区(00H-07H)RS1、RS0=01—1区(08H-0FH)RS1、RS0=10—2区(10H-17H)RS1、RS0=11—3区(18H-1FH)F0、F1:用户标志数据指针DPTR16位,由两个8位寄存器DPH、DPL组成。主要用于存放一个16位地址,作为访问外部存储器(外RAM和ROM)的地址指针。堆栈指针SP指向栈顶数据的地址2.2.5程序计数器PCPC不属于特殊功能寄存器,不可访问,在物理结构上是独立的。PC是一个16位的地址寄存器,用于存放将要从ROM中读出的下一字节指令码的地址,因此也称为地址指针。PC的基本工作方式:自动加1。CPU从ROM中每读一个字节,自动执行PC+1→PC;执行转移指令时,PC会根据该指令要求修改下一次读ROM新的地址;执行调用子程序或发生中断时,CPU会自动将当前PC值压入堆栈,将子程序入口地址或中断入口地址装入PC;子程序返回或中断返回时,恢复原有被压入堆栈的PC值,继续执行原顺序程序指令。2.3I/O端口结构及工作原理4个8位并行I/O口,共32条端线:P0、P1、P2和P3口。每一个I/O口都能用作输入或输出。P0口的负载能力为8个LSTTL门电路;P1~P3口的负载能力为4个LSTTL门电路。1个LSTTL门电路的驱动电流,低电平时为0.36mA,高电平时为20uA。2.3.1P0口用作通用I/O口CPU令“控制”端信号为低电平,其作用有两个:一是使多路开关MUX接通B端,即锁存器输出端Q;二是令与门输出低电平,V1截止,致使输出级为开漏输出电路。作为输出口当P0口用作输出口时,因输出级处于开漏状态,必须外接上拉电阻。当“写锁存器”信号加在锁存器的时钟端CLK上,此时D触发器将“内部总线”上的信号反相后输出到Q端,若D端信号为0,Q=1,V2导通,P0.X引脚输出“0”;若D端信号为1,Q=0,V2截止,虽然V1截止,因P0.X引脚已外接上拉电阻,P0.X引脚输出“1”。作为输入口当P0口用作输入口时,必须保证V2截止。因为若V2导通,则从P0口引脚上输入的信号被V2短路。为使V2截止,必须先向该端口锁存器写入“1”,Q=0,V2截止。输入信号从P0.X引脚输入后,先进入输入缓冲器U2。CPU执行端口输入指令后,“读引脚”信号使输入缓冲器U2开通,输入信号进入内部数据总线。用作地址/数据总线地址/数据总线输出作总线输出时,这时“控制”端信号为高电平,其作用有两个:一是使多路开关MUX接通A端,与锁存器断开;二是令与门开通,输出取决于“地址/数据”端。从“地址/数据”端输入的地址或数据信号同时作用于与门和反相器,并分别驱动V1、V2,结果在引脚上得到地址或数据输出信号。若“地址/数据”端信号为“1”,则与门输出“1”,V1导通;反相器输出“0”,V2截止,引脚输出“1”。若“地址/数据”端信号为“0”,则与门输出“0”,V1截止;反相器输出“1”,V2导通,引脚输出“0”。数据总线输入此时与P0口作一般输入口时情况相同,CPU使V1、V2均截止,从引脚上输入的外部数据经缓冲器U2进入内部数据总线。P1口一位结构P2口一位结构P3口一位结构总结:P0~P3口都能用作I/O口,用作输入时,均须先写入“1”;用作输出时,P0口应外接上拉电阻。在并行扩展外存储器或I/O口情况下,P0口用于低8位地址总线和数据总线(分时传送);P2口用于高8位地址总线;P3口常用于第二功能,用户能使用的I/O口只有P1口和未用作第二功能的部分P3口端线。2.4时钟和时序时钟:统一指挥即按一定