程序存储器 当EA引脚接高电平时,CPU将使用内部程序存储器,若程序超过内部程序存储器空间时,则CPU会自动从外部程序存储器重读取超过部分的程序代码。 数据存储器 51的程序存储器和数据存储器是独立分开的,所以访问数据存储器时,所使用的地址不会与程序存储器冲突。 51里的数据存储器除内部数据存储器外,还可以扩展外部数据存储器,且可以并存,只不过访问他们的指令不一样。 内部数据存储器的结构: 0000H~007FH之间的128B为可直接寻址或间接寻址的存储器,它分为3部分: 1. 寄存器组区 0000H~001FH的32个地址位寄存器组区 10000H~0007H为寄存器组0(即RB0);0008H~000FH为寄存器组1(即RB1);0010H~0017H为寄存器组2(即RB2);0018H~001FH为寄存器组3(即RB3) 2每个寄存器组都包括R0、R1、R2、R3、R4、R5、R6、R7等8个寄存器,任何一个时间,都只能使用其中一个寄存器组。 3寄存器组的切换,可由程序状态字(PSW)中的RS1、RS0来决定 RS0 RS1 寄存器组 位址 0 0 RB0 0000H~0007H 0 1 RB1 0008H~000FH 1 0 RB2 0010H~0017H 1 1 RB3 0018H~001FH 4当CPU复位时,系统的堆栈指针(SP)指向地址07H,所以将数据存入堆栈时,将从08H开始,即RB1里的R0地址。为了避免冲突和不必要的错误,通常会把堆栈指针移到30H以后的地址。 2. 可位寻址区 0020H~002FH共16字节的存储器区为可位寻址区。 例如吧20H存储器地址的bit 5设定为1,这可使用下指令: SETB 20H.5 要把该位清除为0,可使用下指令:CLR 20H.5 3. 一般数据与堆栈区 0030H~007FH的80字节为一般数据访问及堆栈区。 0080H~00FFH之间的128B为特殊功能寄存器(SFR)。 特殊功能寄存器 P0、P1、P2、P3 它们是51的4个输入/输出端口,其地址分别为80H、90H、A0H及B0H。 P0口:该8位都为漏级开路输出,每个引脚可以驱动8个LS型TTL负载;且内部没有上拉电阻,执行输出功能时,外部必须接上拉电阻(10千欧即可);若要执行输入功能,必须先输出高电平,方能读取该端口所连接的外部数据;若系统连接外部存储器,则P0可作为地址总线(A0~A7)及数据总线(D0~D7)的多功能引脚。 P1口:内部有30千欧上拉电阻,执行输出功能时,不必连接外部上拉电阻;该8位都为漏级开路输出,每个引脚可以驱动4个LS型TTL负载;若要执行输入功能,必须先输出高电平,方能读取该端口所连接的外部数据; P2口:内部有30千欧上拉电阻,执行输出功能时,不必连接外部上拉电阻;该8位都为漏级开路输出,每个引脚可以驱动4个LS型TTL负载;若要执行输入功能,必须先输出高电平,方能读取该端口所连接的外部数据;若系统连接外部存储器,而外部存储器的地址线超过8条时,则P0口可作为地址总线(A8~A15)引脚。 P3口:内部有30千欧上拉电阻,执行输出功能时,不必连接外部上拉电阻;该8位都为漏级开路输出,每个引脚可以驱动4个LS型TTL负载;若要执行输入功能,必须先输出高电平,方能读取该端口所连接的外部数据; P3口其它功能: P3 其它功能 说明 P3.0 RXD 串行口的接收引脚 P3.1 RTD 串行口的传送引脚 P3.2 INT0 INT0中断输入 P3.3 INT1 INT1中断输入 P3.4 T0 timer 0输入 P3.5 T1 Timer 1输入 P3.6 WR 写入外部存储器控制引脚 P3.7 RD 读取外部存储器控制引脚 SP SP为堆栈指针寄存器,其地址为81H。 DPL、DPH DPL与DPH均为8位的数据指针寄存器,其地址分别为82H、83H。若以DPL为低8位、DPH为高8位,即可组成一个16位的数据指针寄存器,简称DPTR,如此将可寻址到64KB的数据地址。 PCON PCON作为电源控制寄存器,其地址位87H,其功能是设定CPU的电源方式。 它是一个不可位寻址的寄存器。如图所示: SMOD ― ― ― GF1 GF0 PD IDL Bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 其中各位说明如下: SMOD位为比特率倍增位。当串行端口工作于模式1、模式2、模式3,且使用定时器1为其比特率产生器时,若其为1,这比特率加倍,若为0,这比特率正常。 GF1、GF0位为一般用途标志位,用户可自行设定或清除这两个标志。通常使用这个两个标志作为有中断唤醒闲置模式中的8051系统。 PD位为功率下降模式位。为1时,进入功率下降模式;为0时,结束功率下降模式。 IDL位为闲置模式位。为1时,进入闲置模式;为0时,结束闲置模式。 TCON TCON为定时器/计数器控制寄存器,其地址为88H,详细以后再讲咯。 TMOD TMOD为计数器/计数方式控制寄存器,其地址为89H,其功能是设置它的方式,详细以后再讲咯。 TL0、TL1、TH0、TH1 TL0、TH0为第一组定时器、计数器的计量寄存器,其地址为8AH、8CH,将TL0与TH0组合即可进行16位的定时/计数。TL1、TH1为第二组定时器、计数器的计量寄存器,其地址为8BH、8DH,将TL1与TH1组合即可进行16位的定时/计数。详细以后再讲咯。 SCON SCON为串行端口控制寄存器,其地址为98H,其功能是设定串行端口工作方式与标志。 SBUF SBUF为串行端口缓冲器,其地址为99H, 这是由使用同一个地址的两个寄存器所构成,其中一个寄存器作为传送数据用的缓冲器,另一个寄存器作为接收数据用的缓冲器。至于如何分辨同一个地址的两个寄 存器,则视指令而定,若是数据传送指令,则自动定位到传送数据用的缓冲器;若是接受数据指令,则自动定位到接收数据用的缓冲器。详细以后再讲咯。IE IE为中断使能寄存器,其地址为A8H。详细以后再讲咯。 IP IP为中断优先级寄存器。详细以后再讲咯。 T2CON T2CON为Timer 2的定时器/计数器控制寄存器,其地址为C8H,其功能死设定Timer 2的启动、记录定时/计数溢出,以及外部中断触发方式等。详细以后再讲咯。 RCAP、RCAP2H RCAP、RCAP2H为捕捉寄存器,其地址为CAH、CBH。当Timer 2在捕捉方式时,若T2EX(P1.1)引脚上的输入信号有高电平转为低电平时,TL2与TH2的内容将被载入RCAP与RCAP2H,就像是把Timer 2的内容捉进RCAP寄存器一样。详细以后再讲咯。 TL2、TH2 TL2、TH2为第三组定时器、计数器的计量寄存器,其地址为CCH、CDH,将TL2与TH2组合即可进行16位的定时/计数。详细以后再讲咯。 PSW PSW为CPU的程序状态字寄存器,其地址为D0H,其内容如下: 7 6 5 4 3 2 1 0 PSW CY AC F0 RS1 RS0 OV P PSW.7:本位为进位位(CY),加减法时产生进位或错位,将自行设定为1,否则为0。 PSW.6:本位为辅助进位位(AC),进行加减法运算产生进位或错位,将自行设定为1,否则为0。 PSW.5:本位为用户标志位,用户自行设定。 PSW.4与PSW.3:这两个位为寄存器组选择位(RS1、RS0),其功能如下表所示。 RS1 RS0 寄存器组 0 0 RB0 0 1 RB1 1 0 RB2 1 1 RB3 PSW.2:本位为溢出标志位(OV),运行时,若发生溢出,为1,否则为0。 PSW.1:本位为保留位,没有提供服务。 PSW.0:本位位奇偶位(P),8051采用偶同位,若ACC中奇数个1,则为1,偶数个1,则为0。 ACC ACC累加器又称为A寄存器,其地址为E0H。 B B寄存器的地址为F0H,主要功能是配合A寄存器进行乘法或除法运算。进行乘法运算时,乘数放在B寄存器,而运算结果,高8位放在B寄存器;进行除法运算时,除数放在B寄存器,而运算的结果,余数放在B寄存器。若不进行乘/除法运算,B寄存器也可当成一般寄存器使用。 |
更多回帖