学海荡舟手机网
导航

主页 > 电子设备技术 > 电器电路基础 > > 详细内容

51系列单片机的内部结构

 AT89S51兼容标准8051的指令系统及引脚。下面以AT89S51单片机为例,简要介绍51系列单片机的内部结构。

 通常,单片机片内含CPU、ROM、RAM、并行I/O口、定时器/计数器、中断控制系统、时钟、系统总线等。

 1.中央处理器(CPU)
  
  中央处理器是AT89S51单片机的核心,完成运算和控制功能。其CPU能处理8位数或代码。
  
  2.程序
  
  程序存储器用于存放用户编写的程序、原始数据或表格,分为片内程序存储器和片外程序存储器。  

 AT89S51采用片内、片外统一编址的64kB(OOOOH~FFFFH)程序存储器地址空间。片内有4kB Flash Memery,地址范围为OOOOH~OFFFH,既可在线编程(ISP),也可以用传统方法进行编程。

 采用汇编语言或C语言编写的源程序,必须通过编译软件(如Keil C51)把编译生成二进制代码,即机器码。用户编写的程序、原始数据、表格等,都是以二进制的形式存放在程序存储器中的。计算机的工作,就是按照事先编好的程序从OOOOH地址单元一条条地循序执行的。

 当AT89S51(31)脚EA接高时,从片内ROM中的OOOOH地址单元开始执行程序。当AT89S51(31)脚EA接低电平时,片内ROM不起作用,CPU只能从片外ROM中取指令。

 内部ROM OOOOH~002AH共43个单元,被分为六段,作为程序运行的入口地址使用。其中:

 0000H~0002H为复位后或初始化引导程序地址区;0003H~000AH外部中断0中断入口地址区;000BH~0012H定时器/计数器O中断入口地址区;0013H~001AH外部中断1中断入口地址区;001BH~0022H定时器/计数器1中断入口地址区;0023H~002AH串行中断入口地址区。

 通常,我们编写程序时不得占用上述中断程序入口地址单元,即0003H~002AH单元。也就是说,主程序一般不放在该地址空间。编程时,可以采用起始伪指令ORG,跳过0003H~002AH单元。

 伪指令,是告诉汇编程序如何进行汇编的一类指令,不会被汇编成机器代码,只能为汇编软件(如KeilC51)所识别。

 单片机复位后,是从0000H单元开始取指令执行程序的。因此,应在0000H~0002H三个单元存放一条无条件转移指令,转到主程序,程序结构如下:

 ORG000H;用伪指令ORG指示随后的指令代码从0000H地址单元开始存放。

 LJMPSTART;在0000H~0002H存放一条长跳转指令,执行该指令,程序转到以START为语句标号的地址执行。

 ORG0030H;伪指令ORG指示随后的指令代码从0030H地址单元开始存放。

 START:;START是主程序入口地址标号,主程序开始。

 END;结束伪指令,标志程序代码到此结束。

 通过该程序,保留了各中断入口地址。对各个中断入口地址的使用,我们在学习中断系统时再进行介绍。

 3.数据存储器(RAM)
  
  单片机的数据存储器有片内和片外之分.AT89S51片内有256字节RAM,其中高128单元被专用寄存器占用,低128字节供用户使用,用于存放可读写的数据。片外数据存储器可扩展6kB存储空间,地址范围为0000H~FFFFH。片内和片外RAM的地址空间各自独立,指令MOV用于片内数据存储器之间的传送,指令MOVX用于片外数据存储器和累加器A之间的数据传送。

 AT89S51内部RAM共有256字节,通常分为低128字节(地址00H~7FH)和高128字节(地址80H~FFH)两部分。低128字节,按其用途分为三个区域,如下表所示。

  (1)工作寄存器区
  
  工作寄存器区有四组工作寄存器,每组8个寄存器,用于存放操作数及中间结果等。其地址为内部RAM的00H~1FH单元地址。在任一时刻,CPU只能使用其中一组寄存器,并把正在使用的那组寄存器称为当前寄存器组,用R0~R7表示。当前使用的到底是哪一组工作寄存器,则由程序状态字寄存器PSW得RS1、RSO位的状态组合决定,下表为工作寄存器选择。

  RS1和RSO的状态可以通过指令修改,如指令:

  SETBRS1;置RS1为1
  
  CLRRS0;置RS0为0
  
  置当前工作寄存器为第2组,R0~R7的物理地址为10H~17H。

  (2)位寻址区
  
  内部RAM的20H~2FH单元,既可作为一般RAM单元使用,进行字节操作,也可以对各RAM单元的每一位进行位操作,因此,把该区又称为位寻址区。位寻址区有16字节RAM单元,共128位,位地址为00H~7FH。可以用位操作类指令对其进行位操作。如指令:

  CLR00H;00H为位地址,而不是字节地址,将位地址00H清零SETB07H;07H为位地址,不是字节地址,将位地址07H置1当位地址为80H~FFH时,所代表的是特殊功能寄存器的位地址。

  如指令:CLRP1.0CLR90H
  
  执行的结果是一样的,因为P1.0的位地址就是90H。

  (3)用户RAM区及堆栈
  
  用户RAM区,包括堆栈区和用户标志区等用户自己设定的数据区。其地址在内部RAM低128单元中。如果用户的程序要使用四组工作寄存器,其单元地址为30H~7FH,共80个单元,如果用户程序不需要四组工作寄存器,则其中一部分工作寄存器区也可作用户RAM使用。用户RAM区中的堆栈,用来暂存数据和地址,它是按“先进后出”

  的原则存取数据的。

  堆栈有进栈和出栈两种操作,由栈指针SP管理,分别采用压栈和出栈指令PUSH和POP进行数据的存和取。

  系统复位后,SP的值为07H,此时堆栈是从08H单元开始的。由于08H~1FH单元属于工作寄存器1~3区,如果程序中要用到这些区,最好把SP值改为2FH或更大。堆栈最好在内部RAM的30H~7FH单元中开辟。SP值一经确定,堆栈的位置也就确定下来了。由于SP可通过指令初始化为不同值,因此堆栈的位置是浮动的。如:

  MOVSP,#30H;SP赋初值30H,即置栈底位置CLRA;累加器A清零,(A)=00HPUSHA;SP自动加1,(SP)=31H,再把A的内容压入31H中POPA;把31H中的内容弹出到A中,然后SP自动减1,(SP)=30H说明:():表示某寄存器、存储单元或表达式的内容。(()):表示某寄存器、存储单元或表达式的内容为地址单元的内容。

  4.特殊功能寄存器(SFR)
  
  内部RAM的高128单元是特殊功能寄存器区,其单元地址为80H~FFH。本文只讲解累加器A。

  累加器A是最常用的特殊功能寄存器。它既可存放操作数,也可存放运算的中间结果。51系列单片机(AT89S51)中大部分单操作数指令的操作数取自累加器,许多双操作数指令中的一个操作数也取自累加器。

  如:指令MOVA,Rn;把当前工作寄存器的内容送累加器A。指令MOVA,#data;把立即数data送累加器A。

  5.定时器/计数器
  
  51系列单片机(AT89S51)共有2个16位定时器/计数器,用以实现定时或计数功能,并以其定时或计数结果对计算机进行控制。

  6.并行I/O口
  
  AT89S51共有四个8位I/O口PO、P1、P2、P3,以实现数据的并行输入输出。在下面的实例中,我们便是用P1口连接8只,并通过程序对其进行控制。

  7.串行口
  
  AT89S51有一个全双工的串行口,以实现单片机和其他设备之间的串行数据传送。该串行口既可作为全双工异步通信收发器使用,也可作为同步移位器使用。

  8.中断控制系统
  
  AT89S51共有5个中断源,即外中断2个、定时/计数中断2个、串行中断1个。

  综上所述,51系列单片机(AT89S51)虽然只是一个芯片,但具有计算机应该具有的基本部件,是一个简单的微型计算机系统。


相关文章