2.MCS-51单片机的组成及结构分析2.1MCS-51单片机的内部结构及结构特点1)在RAM区有一个寄存器工作区(4×8个工作寄存器),专门功能寄存器SFR(完成定时器、串行口、中断逻辑等控制)。2)程序存储器与数据存储器在空间上分开。有不同的地址指针PC、DPTR。3)有32个I/O引脚,部分I/O引脚具有第二功能。4)内部有一个全双工的串行接口,可同时发送和接收,以实现双机和多机通讯。5)具有多个中断源,具有两级优先权控制。6)内部有专门的位处理机。7)可对内部程序加密。图2-1MCS-51系列产品的引脚及封装2.2MCS-51单片机的引脚及封装MCS-51单片机的总线工作方式P0P2WRALERD锁存器(74HC373)D[0..7]A[0..7]A[8..15]RDWR8051单片机有四个双向8位I/O口:P0—P3口,每一个口部由口锁存器(特殊功能寄存器)、输入三态缓冲器/输出驱动器所组成。1)P0口P0口为三态双向I/O口,可以驱动8个LSTTL电路。P0口作为地址/数据总线口使用,分时输出外部存贮器的低8位地址A0—A7和传送数据D0—D7。如果不作为系统扩展的地址/数据总线口,它也可以作为输入/输出口使用。2.3I/O端口及其锁存器DQP0锁存器CLQVCC&地址/数据控制读锁存器读引脚内部总线写锁存器引脚3)P2口P2口为准三态双向I/O口,可以驱动3个LSTTL电路。CPU访问外部的程序存贮器时,P2口输出程序存贮器的高8位地址A8—A15,该地址来源于内部的程序计数器PC的高8位;当CPU以16位地址指针DPTR访问外部RAM/IO的时候,P2口输出的地址来源于DPH,其它情况下,P2口作为一般的I/O口使用。DQP0锁存器CLKQVCC地址控制读锁存器读引脚内部总线写锁存器引脚2)P1口:为准双向口,它的每一位可以分别定义为输线或输出线。它可以驱动3个LSTTL电路。DQP0锁存器CLQVCC读锁存器读引脚内部总线写锁存器引脚4)P3口:多功能口,它的第一功能为准三态双向I/O口,第二功能为特殊输入/输出线。DQP0锁存器CLKQVCC读锁存器读引脚内部总线写锁存器引脚&选择输出功能2.4MCS-51的存储空间及存储器若选择外部程序存储器(EA=0),则P0、P2自动设置为数据、地址工作方式。目前,由于大容量内部程序存储器芯片的生产,采用外部程序存储器的设计越来越少了。通过开关,也可混合使用,如设计PLC时,在PLC处于编程方式时使用片内程序,将外部程序存储器设计成数据存储器,将用户所编写的程序写入外部程序存储器,在PLC处于运行方式时则执行外部程序存储器中的用户程序3.4.1程序存储器通过EA引脚来选择内部或外部程序存储器P0P2WRALERD锁存器(74HC373)D[0..7]A[0..7]A[8..15]RDWRPSENEA&VCC+++单片机存储器3.4.2数据存储器MCS-51系列弹片机除了具有片内数据存储器以外,还可以通过外部端口来扩展64KB的外部数据存储器(或I/O)。但这些数据必须用外部操作指令MOVX将其读入内部RAM或寄存器中才能进行数据运算和处理P0P2WRALERD锁存器(74HC373)D[0..7]A[0..7]A[8..15]RDWR单片机存储器3.4.2数据存储器0000h7Fh80hFFhSFR128B直接寻址通用RAM128B可直接或间接寻址通用RAM128B间接寻址FFFFh00h外部扩展I/O空间64KB用MOVX指令间接寻址操作52(32)以上型号单片机片内低128BRAM:堆栈或数据缓冲器位寻址区工作寄存器区0工作寄存器区1工作寄存器区2工作寄存器区300h08h10h18h20h30h7Fh16Byte(128bit00h~7Fh)工作寄存器区R0~R7地址由PSW中的RS1和RS2决定不用的区域可用作堆栈或数据缓冲器特殊功能寄存器MCS-51系列单片机具有数十个特殊功能寄存器,使用内部高128B的地址空间,只能用直接寻址的方式,才能操作这些寄存器.在这些特殊功能寄存器中,位于x0H和x8H的寄存器,还支持位操作.每个特殊功能寄存器和可位操作的每一位,都有自己的名字(助记符),在汇编语言程序设计时,可直接使用其名称,不用去记其具体的地址.PSW:CYACF0RS1RS0OVF1P外部数据存储器(I/O)的扩展锁存器和触发器DQLEOEDQCLKOE高阻高阻DLEQOEDCLKQOE触发器锁存器利用CPLD/FPGA扩展I/OP0P2ALE74373A[0..7]A[8..15]WRRD单片机CPLD/FPGA译码电路743747437474244OE选通控制Swr0Swr1Q0PAPBPCQAQB译码电路完全译码和不完全译码完全译码:利用所有地址线。用于端口多的复杂系统不完全译码:利用部分地址线。一个引脚占用多个地址例:上图中,若:Swr0=WR+!(A7&!A0)占用地址:~xx1xxxxxx0Swr1=WR+!(A7&A0)占用地址:~xx1xxxxxx1写0080h0090h…00F0h…FF80h…FFF0h,则输出到同一端口OE=RD+!A7;Q0=A7&!A1&!A0&PA+A8&!A1&A0&PB+A7&A1&!A0&PC;则:读0080h…00F0h……FFF0h都是读PA端口CPU取出一条指令至该指令执行完所需的时间称为指令周期,指令周期是以机器周期为单位的。8051的一个机器周期由六个状态(S1,S2,…,S6)组成,每一个状态为2个时钟周期(时相P1,P2)。一个机器周期有12个时钟周期(S1P1,S1P2,S2P1,S2P2,…,S6P1,S6P2),若晶振为12MHz,则一个机器周期为1s。2.5MCS-51单片机工作时序MCS-51的工作时序图