第二章:MCS-51系列单片机的基本硬件结构1.1MCS-51单片机的主要性能和特点1.2MCS-51单片机内部方框图1.3MCS-51单片机的引脚定义1.4MCS-51单片机的存储器的配置1.6输入输出端口1.5震荡器、时钟电路和CPU的时序1.7MCS-51单片机的定时/计数器1.8MCS-51单片机的串行接口1.9MCS-51的中断系统1.1MCS-51单片机的主要性能和特点内部程序存储器ROM(以89C51为例):4K的存储容量;内部数据存储器RAM:256B(128B的RAM+21B的SFR);寄存器区:设有4个寄存器区,每一个区有R0-R7八个工作寄存器;8位并行输入输出端口:P0、P1、P2和P3;定时/计数器:2个16位的定时/计数器;串型口:全双工的端口(RXD:接收端,TXD发送端);中断系统:设有5个中断源;系统扩展能力:可外接64K的ROM和64K的RAM;堆栈:设在RAM单元中,可以浮动既通过堆栈指针SP来确定堆栈的位置布尔处理机:配合布尔运算的指令进行各种逻辑运算;指令系统:111条指令。按功能可分为数据传送、算术运算、逻辑运算、控制转移和布尔操作5大类。返回1.2:MCS-51单片机内部方框图时钟电路4KROM程序存储器256BRAM数据存储器2X16位定时/计数器CPU处理器64KB总线扩展控制器可编程I/O端口P0-3可编程串行口2.2MCS-51单片机的存储器的配置2.2.0MCS-51单片机的存储器的配置特点MCS-51单片机片内、外程序存储器的使用示意图2.2.1程序存储器(片内与片外)2.2.2内部数据存储器RAMMCS-51片内、片外数据存储器示意图MCS-51单片机片内存储器低128B字节功能分配图片内RAM(20H-2FH)中的位寻址区结构图特殊功能寄存器SFR2.2.3外部数据存储器第一章第四节内容小结程序存储器六个特殊的单元2.2.0MCS-51单片机的存储器的配置特点(89C51)在MCS-51单片机的内部集成了4K的程序存储器和256B的数据存储器,同时还可以使用片外的程序存储器和数据存储器,其扩展能力都是64K。从物理结构的角度讲,51单片机的存储系统可以分为四个存储空间:既片内ROM,RAM和片外ROM、RAM。从逻辑上讲(既用户编程的角度讲)51单片机的存储系统又可分为三个存储空间。既片内RAM,片外RAM和片内、外的程序存储器ROM。从物理结构上单片机系统的存储器结构图(四个部分)MCS-51单片机片内ROM4K片内RAM256B片外RAM64K片外ROM64K返回返回上一次2.2.1程序存储器(片内与片外)1.程序存储器是用来存放编好的程序、常数和表格的。2.在MCS-51单片机中,当引脚EA=1时,系统使用片内的4KROM来存储程序。EA=0时,系统使用片外的ROM。3.无论是使用片内还是使用片外的ROM(既EA=1或EA=0),其起始地址都是从0000H单元开始。4.如果EA=1(使用片内的程序存储器时):程序从0000H开始执行。注意:在这种情况下,如果程序计数器的指针PC值超过0FFFH(4K)时,单片机就要自动的转向片外的ROM存储器(尽管EA=1),且从片外ROM的1000H单元开始执行程序。但单片机是无法使用片外ROM的0000H-0FFFH这4K单元。返回MCS-51单片机片内、外程序存储器的使用示意图0FFFH0000H0FFFH0000HFFFFH1000HEA=1时,ROM的使用EA=0时ROM的使用片外程序存储器(最大64K)单片机内部程序存储器(4K)返回程序存储器六个特殊的单元在程序存储器中,有六个单元是具有特定功能。编程者是不能随便使用的。0000H单元:上电时,程序计数器PC所指向的单元0003H单元:外部中断/INT0的入口地址;000BH单元:定时器T0的溢出中断入口地址;0013H单元:外部中断/INT1的入口地址;001BH单元:定时器T1的溢出中断入口地址;0023H单元:串行口接收、发送的中断入口地址。返回2.2.2内部数据存储器RAM数据存储器无论在物理上还是逻辑上都分为两个地址空间,既一个内部和一个外部的数据存储空间。访问内部数据存储单元时,使用MOV指令;而访问外部数据存储器时,使用MOVX指令。内部数据存储器从功能上又将256B空间分为二个不同的块:1,低128B的RAM块;2,高128B的SFR(SpecialFunctionRegister)块。在低128B的RAM存储单元中又可划分为:工作寄存器区、可位寻址区、通用存储数据的便笺区。高128B的专用寄存器区中仅仅使用了21寄存器(51系列),其它单元未定义不能使用。存储结构图MCS-51片内、片外数据存储器示意图特殊功能寄存器SFR通用数据存储器80H7FH00HFFH片内数据存储器片外数据存储器256个字节64K个字节片外数据存储器64KB0000HFFFFH注意:1,访问片内RAM20H存储单元;MOVA,20H2,访问片外RAM存储单元;MOVR0,#20hMOVXA,@R03,尽管片内与片外的RAM单元的00H-FFH地址相重叠但由于指令的不同不会发生地址混乱。片内RAM低128B字节功能分配图位寻址区3区2区1区0区便笺区08H07H00H7FH30H2FH20H1FH18H17H10H0FH四个工作寄存器区每个区中有R0-R7八个工作寄存器位寻址区16个单元20H-2FH,共有128可寻址位个位。位地址:00H-7FH注意:位地址与字节地址的区别通用的RAM区地址:30H-7FH继续返回上一次片内RAM(20H-2FH)中的位寻址区结构图7F7E7D7C7B7A797877767574737271706F6E6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A393837262524232221202F2E2D2C2B2A292827262524232221201F1E1D1C1B1A191817161514131211100F0E0D0C0B0A090807060504030201002FH20H字节地址位寻址区内的地址是位地址。共有00-7FH(共128个位);要区分字节地址和位地址这两个不同的地址概念:从物理的角度,每一个字节地址内包含了8个位,既:D7,D6,D5,D4,D3,D2,D1,D0在一般情况,我们提到的RAM地址都是字节地址。从逻辑的角度讲,字节地址和位地址是靠不同类型的指令来区分的。如:MOVA,20h;将RAM的20单元内容送累加器A;MOVC,20h;将RAM位寻址区中20H位送CY中。在这二个例子中,第一条指令为字节传送指令,所以20H为字节地址;第二个例子中的指令为位操作指令,所以20H为位地址。有关详细内容将在第二章中描述。返回0区工作寄存器区结构图R7R6R5R4R3R2R1R0RAM地址07H06H05H04H03H02H01H00H返回上一次特殊功能寄存器SFR特殊功能寄存器SFR(SpecialFunctionRegister)特殊用途寄存器的集合。用来设定单片机内部各个部件的工作方式,存放相关部件的状态,定时器初值寄存器,并行端口的锁存器等等。尽管特殊功能寄存器与RAM在同一个单元中,但不能作为普通的RAM存储单元来使用。只有在编程中根据需要,进行一些特定功能的设定,或者是从中查寻相关部件的状态时,才能进行读、写操作。如中断方式的设定、定时器工作模式的设定,查询串行口发送或接收是否结束等等。标识符名称地址ACCBPSWSPDPTRP0P1P2P3IPIETMODTCON累加器B寄存器程序状态字堆栈指针数据指针(包括DPH,DPL)口0口1口2口3中断优先级控制寄存器中断允许控制寄存器定时/计数器方式控制寄存器定时/计数器控制寄存器0E0H0F0H0D0H81H83H,82H80H90H0A0H0B0H0B8H0A8H89H88H特殊功能寄存器SFR(表一)SFR(表二)标识符名称地址TH0TL0TH1TL1SCONSBUFPCON定时/计数器0初值寄存器高8位定时/计数器0初值寄存器低8位定时/计数器1初值寄存器高8位定时/计数器1初值寄存器低8位串行口控制寄存器串行口数据缓冲器(接收,发送)电源控制寄存器8CH8AH8DH8BH98H99H97HSFR高128B低128B0FFH80H7FH00H特殊功能寄存器SFR在片内RAM中的位置注:表中黄色的单元为可按位寻址的字节特殊功能寄存器SFR说明程序计数器PC:用来存放下一条要执行的指令地址,长度为16位,所以寻址范围为0-65535(64K).在物理上是独立于SFR.累加器A:最常用的专用寄存器,大多数的指令操作数都来自累加器A.所有的算术运算指令的运算结果都存放在A中.B寄存器:乘除法指令使用的寄存器.数据指针DPTR:一个16位的寄存器.由高八位DPH和低八位DPL构成.DPTR主要用来存放片内ROM的地址和片外RAM,ROM的地址.这样单片机可以通过间址的方式来访问片内ROM或片外的RAM,ROM。例如:片外RAM的2000H单元中有一个数x,试将其送到累加器A中.MOVDPTR,#2000h;DPTR←2000HMOVXA,@DPTR;A←x程序状态字PSW:8位寄存器.表征程序执行的状态信息。CY(PSW.7)进位标志:在加减法运算中,累加器A的最高位A7有进位,则CY=1,否则CY=0.同理,在减法运算中,如果A7有借位,则CY=1.因此CY往往作为无符号数运算是否有溢出的标志。AC(PSW.6):辅助进位位:用来判断加减法运算时,低四位是否向高四位进位或借位(既A3的进位或借位).往往用来判断压缩的BCD码的运算处理.F0(PSW.5)用户标志位:完全由用户来定义和使用。RS1,RS0工作寄存器区选择位:确定工作寄存器R0-R7在哪个区中.单片机在上电或复位后RS1、RS0=00。需要人为的修改RS1,RS0的值来改变工作寄存器区的位置。CYACF0RS1RS0OV-PRAM分配图OV(PSW.2)溢出标志位:判断符号数加减法运算时是否有溢出.OV的结果可以用一个算法来表示:OV=CP异或CS其中:CP为A7的进位,CS为A6的进位OV=1表明有溢出。P(PSW.0)奇偶标志位:用来标志累加器A中运算后1的个数。当P=1时,表明A中1的个数为奇数个,反之为偶数个。【举例】:有两个数0FH和F8H,试将两数相加MOVA,#0FH;将立即数0fh送累加器AADDA,#0F8H;A的内容与立即数0f8h相加,结果送A00001111运算结果:A=07H,CY=1(既CP=1),+11111000CS=1,OV=0(因为CP=1,CS=1)Cy→100000111AC=1,P=1如何根据PSW来分析运算结果是否正确?是否有溢出?1,若数据为无符号数。既15+248=263=107H既CY=1,A=07H。2,若数据为有符号数。既+15加-8=+7=07H,OV=0表明无溢出。SP堆栈指针:8位寄存器,用来指示堆栈的位置,可由软件修改。在MCS-51单片机的设计中,片内RAM区为堆栈的可用空间。上电或复位时,SP被初始化为07H,既堆栈底部被确定在RAM的07H单元。堆栈操作过程:进栈:PUSHACC指令(设SP=07H),1,SP+1送SP,此时SP=08H;2,ACC送RAM的08H单元;出栈:POPACC(设SP=08H);1,将RAM中08H单元内容送A;2,SP-1送SP,此时SP=07H。07HSP08H07HRAMx累加器A堆栈操作示意图并行端口P0-P3:SFR中的P0-P3实际上就是I/O端口的数据锁存器。与RAM中的任意一个单元一样,P0-P3都有自己的RAM地址:80H、90H、A0H、B0H。