8051程序记忆体
在下图中画出了程序记忆体较低位址的部分,当MCS-51的CPU被重置(Reset)后,会从0000H开始执行程序.每一个中断,在程序记忆体中有一个指定的位址,当中断产生且被接受时,会使CPU跳至那个指定的位址开始执行中断副程序,例如:UART的中断位置是在0023H,如果UART被使用,则它的中断服务程序必须由0023H这个位址开始.如果这个中断未被使用,则它的服务程序之位址可作一般程序记忆体使用.
中断服务程序的位址空间都规划成8位元的长度,0003H为第0号外部中断(INT0);000BH为0号计时器(TIMER0);0013H为第1号外部中断(INT1);001BH为第1号计数器(TIMER1);0023H为串列阜(UART);002BH为第2号计数器(8052才有TIMER2).如果中断服务程序够短的话(例如用在控制的场合里就是如此),则此中断服务程序可完全放在这八个位元组里.较长的服务程序可使用跳跃指令(LJMP、AJMP),以跳过其它的中断位址空间.
程序记忆体的最低4K(在8052AH为8K)位元组,可以是芯片内部的ROM或是在外部的ROM(EPROM),其选择方式是由MCS-51的EA这支接脚加以选择;若EA=VCC为内部ROM、EA=GND则为外部ROM.在8051系列里,如果EA接在VCC上,位址0000H~0FFFH的程序是由内部ROM提供,1000H~FFFFH的程序则由外部的ROM提供.
在8052H系列里,若EA接在VCC时,则0000H~1FFFH的程序是由内部ROM提供;2000H~FFFFH由外部ROM提供.如果EA接至VSS,则所有程序都由外部ROM提供.因8031、 8032AH等内部没有ROM,因此必须将它的EA接至VSS,使他们可以直接执行外部程序.
PSEN为读取外部ROM之激发信号,它是用在所有外部程序的提取;PSEN在CPU提取内部程序时不动作.执行外部程序的硬体架构如所示.请注意共有16条I/O( P0和P2)被连接成汇流排之功能,以作为外部程序的程序记忆体的读取介面.P0被当作外部位址/资料汇流排多工;它首先当作位址汇流排,以输出程序计数器的低位元组(PCL),然后进入高阻抗状态,以等待程序记忆体输出指令码(OP Code),在程序计数器低位元组(PCL)有效的同时,ALE信号会将它锁入位址闩锁器(Address Latch)里,在这同时,位址的高位元组(PCH)也会从P2输出.最后PSEN会激发EPROM,然后指令码就被读入微处理机中.
程序记忆体的位址一定是16位元宽,就算你只使用了低于64K位元组也是如此,它是使用两个八位元的I/O埠(P0和P2)以定址外部程序记忆体.
8051资料记忆体
图中使用两个字节的地址(16bit),但此时地址的高字节由P2输出、低字节由P0输出.
内部数据存储器,如图所示,其空间被分为三块;即(1)较低地址128字节数据存储器;(2)较高128字节的数据存储器(8052才有,需使用间接寻址方式存取数据);(3)特殊功能缓存器(Special Function Register 简称SFR).内部数据存储器的地址只有一个位宽,也就是只能到256字节的空间.
7FH 30H | |||||||
20H 2FH | |||||||
18H R0 | 19H R1 | 1AH R2 | 1BH R3 | 1CH R4 | 1DH R5 | 1EH R6 | 1FH R7 |
10H R0 | 11H R1 | 12H R2 | 13H R3 | 14H R4 | 15H R5 | 16H R6 | 17H R7 |
08H R0 | 09H R1 | 0AH R2 | 0BH R3 | 0CH R4 | 0DH R5 | 0EH R6 | 0FH R7 |
00H R0 | 01H R1 | 02H R2 | 03H R3 | 04H R4 | 05H R6 | 06H R7 | 07H R7 |
如图所示,MCS-51的所有版本都有较低的128位元组.其中最低的32位元组(00H~1FH),被分成四组(每组八个位元组)暂存器库(Register Bank),程序指令称这些暂存器为,R0、R1、R2、R3、R4、R5、R6和R7.在程序状态字语暂存器(PSW)里.其中有两个位元(RS1 、RS0)可以选择那一个暂存器库被使用.这种安排方式可以使得程序记忆体的使用效率大增,因为暂存器指令较直接指定址法更短.
四个暂存器库的下面16位元组(20H~2FH)被规划成可用位元定址(bit-addressable,每一个位元有一位址)的记忆体.MCS-51的指令集里有很多可以处理单个位元的指令,而在这16位元组的128个位元可以直接被这些指令加以定址.在这一区的位元位址00H~7FH(例如20H.0的位元位址为00 、2FH.7这个位元的位址为7FH).
在较低的128个位元组都可以可使用直接定址或间接定址加以存取;但较高位址的128位元组(前图)只能使用间接定址法.但是8051内部没有较高128位元组,仅8052AH内部才有.
特殊功能暂存器(SFR)内包含有I/O阜的闩锁(Latch) 、计数器和周边控制暂存器等.而这些暂存器只能使用直接定址法加以存取.一般说来,所有8051系列微处理机的SFR都相同,且位址也相同.但是增强型的8051(如8052AH)里所增加的SFR,可能其他的8051没有.
在SFR里有16个位址可以使用位元组(byte)定址或位元(bit)定址,这些可以使用位元定址的地方是:位址以0H或8H结束的位址(如:80H、 88H、90H、98H…..等);这些位元组的位元位址是80H~FFH(例如:80H.0的位元位址为80H 、 88H.2的位元位址为8AH).
SFR中各暂存器位置图
F8-FFH | ||||||||
B | F0-F7H | |||||||
E8-EFH | ||||||||
ACC | E0-E7H | |||||||
D8-DFH | ||||||||
PSW | D0-D7H | |||||||
T2CON | RCAP2L | RCAP2H | TL2 | TH2 | C8-CFH | |||
C0-C7H | ||||||||
IP | B8-BFH | |||||||
P3 | B0-B7H | |||||||
IE | A8-AFH | |||||||
P2 | A0-A7H | |||||||
SCON | SBUF | 98-9FH | ||||||
P1 | 90-97H | |||||||
TCON | TMOD | TL0 | TL1 | TH0 | TH1 | 88-8FH | ||
P0 | SP | DPL | DPH | PCON | 80-87H |
特殊功能暂存器功能说明
请注意,并非SFR的所有位址都被使用,其中未使用的位址在芯片内不可使用,若去读这些位址时,通常会读到一些不定值,而写入资料时则不会有任何反应。
A暂存器(Accumulator,Acc)-在MCS-51中做算数逻辑运算时都必须透过此暂存器。
B暂存器-用于使用在乘法(MUL AB)和除法(DIV AB)指令.在其他的指令时,它可以被当成一般暂存器处理,不使用乘除运算则为通用暂存器。乘法运算时,存放乘数及相乘后乘积的高位元。除法运算时,存放除数及相除后的余数。
PSW暂存器(Program Status Word)-记录CPU执行的状态。
SP暂存器(Stack Pointer)-指出堆叠空间的起始位址,CPU reset时,SP的内含值是07h,表示堆叠从08h开始。堆叠指标暂存器只有八位元宽,它会在PUSH和CALL指令存入资料前先加1,因为SP的内容可由指令改变,因此堆叠区可以在内部RAM里的任一个位址。
DPTR暂存器(Data Pointer)-是一个16 bit的暂存器,由两个8 bit的DPH,DPL组成,用来指定外部资料记忆体存取时的位址。
P0,P1,P2,P3暂存器-输出/输入port的闩锁(Latch)暂存器,储存输出入的资料。
IE暂存器(Interrupt Enable)-中断致能暂存器,指定中断致能或禁能,8051有五个中断源, bit7为EA,若是0的话,则表示禁止所有的中断要求。
IP暂存器(Interrupt Priority)-设定中断源的优先权-对应的位元为1时,表示有较高的优先权。
TMOD暂存器(Timer/Counter Mode Control Register)-设定第0个和第1个计时/记数器的工作模式,较高和较低的4位元完全相同,高位元记录Timer1,低位元记录Timer0。
串列资料缓冲器(SBUF)-实际上是两个分开的暂存器,一个为传送缓冲器,另一个为接收缓冲器。当资料写入串列缓冲器时,它是被送到传送缓冲器,此资料将被转换成串列信号传送出去,若从SBUF读出资料,这个资料就是从接收缓冲器来。
计时器暂存器-暂存器对(TH0,TL0)、(TH1,TL1)和(TH2,TL2)是16位元计数暂存器,它们分别是计时/计数器0、1和2的计数产生器。
捕捉暂存器(Capture Register)-暂存器对(RCAP2H,RCAP2L)是第2计时器在捕捉模式时的捕捉暂存器,在这个模式下,在8052S和T2EX接脚上有信号转移时, TH2和TL2的内容会被拷贝到RCAP2H和RCAP2L中。第2计时器也有16位元自动重新载入(auto-reload)的功能,在此模式下RCAP2H和RCAP2L保持着这被重新载入的值。
控制暂存器-特殊功能暂存器里的IP、IE、TMOD、TCON、SCON和PCON内包含有中断系统、计时器/计数器、和串列埠的控制位元和旗号位元,在中断单元中会将它们做详细的分析。