AT89S51 单片机系统的存贮器组织_hong_百度空间

单片机系统中,存放程序的存储器称为程序存储器,类似与通用计算机系统中的ROM,只能进行读操作,存放数据的存储器称为数据存储器,相当于通用计算机系统中的RAM。与通用计算机系统不同,单片机系统中的程序存储器和数据存储器都有各自的读信号(PSEN 、/RD ),换言之,单片机系统的存储器可以分成两个物理存储器,即程序存储器和数据存储器,它们的范围都是64KB 。

1 程序存储器

程序存储器主要用于存放单片机系统的执行程序和常数表格。AT89S51单片机内部有4KB 的flash,当程序小于4KB时,内部的Flash可用作程序存储器;当程序大于4KB时,就需要外扩程序存储器,{zd0}可达64KB。 AT89S51单片机有一个/EA引脚,当使用外扩的程序存储器时,要求/EA为低电平。程序存储器大致可分成三个区域如图2.2所示:{dy}块为开始的3个字节(0000~0002H),一般存放一条2字节(SJMP)或3字节(LJMP)的调转指令,单片机复位时,PC=0000H,即单片机总是从程序存储器中的0000H开始执行程序的;第二块是中断矢量区,地址为0003~002AH,每个中断矢量占8个字节,五个中断服务程序入口地址共占40字节。第三块是主程序区,地址从002BH开始直到0FFFFH,存放程序或常数表格。当单片机系统不使用中断时,主程序也可以从0000H开始存放,程序存储器通过MOVC指令访问。

2 数据存储器

     数据存储器在物理上可分为两种,即内部数据存储器和外部数据存储器。内部数据存储器位于单片机内部,AT89S51单片机内部共有128字节的存贮单元(RAM),用MOV指令访问;而外部数据存储器是单片机系统外部扩展的存储器,可以有多达64KB的存贮单元,访问外部数据存储器时,用MOVX指令。另外,AT89S51单片机内部还有一组专用功能寄存器(SFR,Special Function Registers)离散地分布在80H~0FFH之间。数据存储器分布如图2.3所示:

    ( 1 ) 内部128字节数据存储器
     内部数据存储器共128字节(00H~7FH),在物理上又可以分为3个不同的区域,如图2.4所示。
           1 )工作寄存器区。地址00H ~ 1FH为“工作寄存器区”分成四组,每组8个单元,从低地址到高地址分别被称作R0、R1、…、R7,工作寄存器的地址如表2.1所示:

     工作寄存器区一般是通过Ri进行存取,任何时候都是只能使用其中的一组工作寄存器,其余的组待用,可通过改变程序状态字(PSW)中的RS1、RS0位来切换工作寄存器组。如果不用Ri存取工作寄存器区,在任何时候都可以直接通过地址存取00H~1FH中的任何单元。
         2 )位寻址区。20H~2FH的16个单元称为“位寻址区”,一般的RAM单元,存取的单位为字节,即只能对字节进行读写,而位寻址区中,单片机可以直接对位进行操作。位寻址区既可作为普通的RAM区用,也可以作为位寻址空间。位寻址区的16个字节构成128个位空间,具体的位地址分配如表 2.2 所示:

   


      3 ) RAM区。30H ~7FH共80个字节称为RAM区,RAM区一般作为普通的数据缓冲区和堆栈区使用。
     ( 2 )专用功能寄存器区。专用功能寄存器(SFR)也称为特殊功能寄存器,主要用于控制、管理单片机内部各种部件如算术逻辑部件、I/O口、串行口(UART)、定时/计数器、中断系统等功能模块的工作,用户通过编程专用功能寄存器设定对应模块的工作方式。各专用功能寄存器名称、符号、地址以及复位值如表 2.3 所示:

     AT89S51单片机共有22个专用功能寄存器,各专用功能寄存器和RAM统一编址,离散地分布在80H ~0FFH之间,访问这些专用寄存器仅允许使用直接寻址方式,对 80H ~ FFH 之间未定义的单元进行读操作时,将得到一个随机数,写操作无任何意义。专用功能寄存器中,如果字节地址末位是0或8 ,则该寄存器还可进行位寻址。 AT89S51单片机共有256个可寻址的位,前128个(位地址00H ~7FH)位于字节地址20H~2FH中,如表2.2所示,后128个(位地址80H~8FH)位于SFR中,如表2.4 所示:

     1 )累加器ACC和B寄存器在2.2节已经介绍过,这里不再赘述。
     2 )程序状态字寄存器(PSW)。PSW是8位寄存器,用于反映操作或运算结果的状态,字节地址为0D0H,是一个可进行位寻址的寄存器,各位具体定义如表2.5所示:  
     • P :奇偶标志(Parity flag)。如果ACC中有奇数个1,则P为l,否则P为0 。
     • OV :溢出标志(Overflow flag)。有符号数运算时,如果发生溢出,则OV被置l,否则清0。对于有符号数,如果用{zg}位表示符号,则一个字节能表示的数的范围为-128 ~ +127 。如果运算结果超出了这个数值范围,就会发生溢出,此时,OV被置l;在乘法运算中,如果乘积超过255,则OV被置l;在除法运算中,除数为0时,OV被置l。
     • RS1 、RS0 :工作寄存器组选择位(Register bank Select control bits),当前工作寄存器组的选择如表2.6 所示。

用户可以用软件改变RS1和RS0的值以切换当前选用的工作寄存器组。单片机在复位时, RS1、RS0均为0,故复位启动后,当前工作寄存器的缺省选择为第0组。
     • F0 :用户标志。由用户置位或复位。PSW.1为保留位(Reserved)。
     • AC :辅助进位标志(Auxiliary Carry flag)。AC主要用于BCD码运算,当进行加法(或减法)运算时,如果低半字节(D3)向高半字节(D4)有进位(或借位),则AC置1,否则清0。
     • C :进位标志(Carry flag)。在进行加法(或减法)运算时,如果操作结果的{zg}位(D7)有进位,则C置1,否则清0。在进行位操作时,C作为操作位累加器。
     3 )堆栈指针寄存器(SP,Stack Pointer register)。堆栈指针寄存器是一个8位专用功能寄存器,主要用于指示堆栈顶部在RAM中的位置。堆栈是向上生成的,即当执行PUSH或ALL指令时,SP的值就会增加。系统复位后,SP被初始化为07H,堆栈实际上是从08H单元开始的,考虑到08H~1FH为工作寄存器区,20H ~ 2FH为位寻址区,程序可能会用到这些区域,所以,程序初始时{zh0}把SP初值设为2FH以后的位置如60H单元。在使用堆栈时要注意,堆栈一般设置在RAM的顶部,由于堆栈减少了内部RAM的可利用单元,不能设得太低,但也不能设得太高,如果在压栈过程中,SP超过07FH(对于AT89S51单片机),就会引起程序运行出错,这是单片机初学者常犯的错误之一。
     4 )数据指针(Data Pointer)。 AT89S51单片机有两个数据指针寄存器,即DPTR0、DPTR1,它们都是16位寄存器,主要用于访问外部64KB数据存储器时存放地址。它们也可以分别作为两个8位的寄存器DPLx和DPHx(x=0,1)使用。
     5 ) P0、P1、P2和P3。P0、P1、P2、P3分别为单片机P0 ~ P3口的锁存器。
     6 )串行数据缓冲寄存器(SBUF ,Serial Data Buffer register)。SBUF 实际上是两个独立的寄存器,即发送数据缓冲寄存器和接收数据缓冲寄存器,两个寄存器共用一个地址(SBUF),当发送数据时,数据被送往发送数据缓冲寄存器;当接收数据时,接收到的数据被送往接收数据缓冲寄存器。
     7 ) TH0 、TL0 、TH1 和 TL1。单片机有2个16位的定时/计数器,即T0和T1,TH0、TL0 和TH1、TL1分别为T0和T1计数寄存器的高8位和低8位。
     8 ) IP、IE、TMOD、TCON、SCON和PCON。这些SFR包含了单片机的中断系统、定时/计数器以及串行口等部件的工作方式和状态位,详解见第四章。
     9 )辅助寄存器AUXR(Auxiliary Register)。AUXR的地址为08EH,各位功能如表2.7 所示:  
     • DISALE :禁止或允许(Disable/Enable)ALE信号。为1时,仅当执行MOVX和MOXC 指令时,ALE才xx(出现);为0时,ALE信号始终以振荡器1/6的频率出现在单片机的ALE引脚上。
     • DISRTO :禁止或允许WDT溢出时的复位输出(Disable/Enable Reset-out)。为1时,单片机的复位引脚仅用于输入;为0时,在WDT溢出后,单片机的复位引脚输出一个高电平脉冲。
     • WDIDLE :在空闲模式下禁止或允许WDT的计数器计数。为1时,空闲模式时WDT的计数停止计数;为0时,空闲模式时WDT的计数器继续计数。
     • “—”保留位,用于扩展。
     系统复位后,AUXR的值为:xxx00xx0,即复位后,单片机系统缺省的状态是:ALE信号始终出现在单片机的ALE引脚;WDT溢出后,单片机的复位引脚输出一个宽度为98个机器周期的高电平脉冲;空闲模式时WDT的计数器继续计数。
     10 )辅助寄存器AUXR1(Auxiliary Register 1)。AUXR1的地址为0A2H ,各位功能如表2.8所示:

• DPS :数据指针寄存器选择(Data Pointer Register Select)。为 1 时,选择    DP1L和DP1H为当前DPTR;为 0 时,选择DP0L和DP0H为当前DPTR ;
• “—”保留位,用于扩展。
    系统复位后,DPS为0,即选择DP0L和DP0H为当前DPTR。
    11 ) WDTRST :看门狗定时器复位(Watchdog Timer Reset)专用功能寄存器。
单片机系统在正常工作时,CPU常会受到各种干扰,使程序陷入死循环或跑飞状态,看门狗定时器(WDT ,Watchdog Timer)是一种能使程序自动恢复到正常的运行状态的有效方法。 AT89S51 单片机内部包含了一个WDT,它包含了一个14位的计数器和一个看门狗定时器复位(WDTRST)SFR ,WDTRST的地址为0A6H 。当WDT使能后,只要振荡器在工作,每个机器周期都会使WDT计数器的值加1 。 WDT的工作原理如下:
正常情况下,程序周期性地在WDT计数器的值到达3FFFH之前对其进行清0,如果CPU受到干扰使程序进入非正常运行状态,这种清零操作将不再被执行,当WDT的计数器的值到达 3FFFH时,便产生溢出,引起单片机复位,在单片机的RST引脚上输出一宽度为98个振荡周期的正脉冲,同时,置PC的值为0000H ,程序从头开始重新执行,恢复到正常的运行状态。
单片机上电复位后,WDT的缺省状态是禁止,为了使能WDT ,用户必须按顺序依次向 WDTRST写入1EH 和 0E1H两字节数据。WDT 一旦使能,将无法通过软件禁止,用户必须在最长 16383个机器周期时间内对WDT的计数器清0 ,计数器清0操作同使能WDT一样,也是按顺序依次向WDTRST写入1EH 和 0E1H 两字节数据,换言之,每次按顺序依次向WDTRST写入1EH和0E1H 两字节数据后,WDT计数器都从0重新开始计数。WDTRST是一个只写寄存器,而WDT的计数器既不能读,也不能写。
当单片机工作在掉电模式(Power-down mode)时,振荡器停止,这时WDT的计数器也停止计数,用户程序可以不再对其进行清0操作。硬件复位和低电平触发的外部中断都可以使单片机退出掉电模式。如果是硬件复位退出掉电模式,以后对WDT操作和正常系统复位时的操作xx相同;如果是低电平中断引起退出掉电模式,则要求引起中断的低电平信号要有足够的宽度,以保证振荡器在低电平期间能进入稳定的工作状态。为了避免在中断信号为低电平期间,WDT引起复位,WDT计数器在中断信号变成高电平后才开始计数。一般情况下,进入中断服务程序时,要对WDT的计数器清0。为了避免在刚退出掉电模式的几个机器周期内产生复位,{zh0}在进入掉电模式前,先对WDT的计数器执行一次清0操作。
SFR AUXR中的WDIDLE位决定了空闲(IDLE mode)模式时WDT的计数器是否继续计数,若 WDIDLE为0(缺省值),则在空闲模式时,WDT的计数器会继续计数,为了避免在空闲模式时, WDT引起AT89S51单片机复位,用户程序总是设置一个定时器,周期性地退出空闲模式,对 WDT的计数器清0 ,然后,再进入空闲模式。当WDIDLE为1时,在空闲模式,WDT的计数器停止计数,退出空闲模式时,WDT的计数器恢复计数。
( 3 )外部数据存储器。当内部RAM不够用,就需要扩展外部数据存储器,原则{zd0}可扩展64KB。按照访问方式的不同,外部数据存储器也可分成二块,{zd1}的256字节(0000H~00FFH)既通过DPTR寻址,也可能通过R0和R1间接寻址,而0100H~0FFFFH只能通过DPTR 间接寻址。
实际使用中,可以通过分页技术使外部数据存储器的容量远远超过64KB;另一种方法是使用非并行接口的存储器芯片,如使用I2C接口的存储器芯片或SPI接口的存储器芯片,可使数据存储器的容量扩至数百兆。单片机的外部数据存储器和端口是统一编址的,也就是说,如果某一个单元作了端口,就不能再作为存储器单元,反之,如果某一个单元作为存储器单元,就不能再作为端口。



郑重声明:资讯 【AT89S51 单片机系统的存贮器组织_hong_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——