跳至内容

嵌入式系统/8051 微控制器

来自维基教科书,开放的书籍,开放的世界

英特尔 8051 微控制器是当今最流行的通用微控制器之一。英特尔 8051 的成功催生了许多克隆产品,它们被统称为 MCS-51 系列微控制器,其中包括来自 Atmel、飞利浦、英飞凌和德州仪器等供应商的芯片。

关于 8051

[编辑 | 编辑源代码]

英特尔 8051 是一款 8 位微控制器,这意味着大多数可用操作都限于 8 位。8051 有 3 种基本“尺寸”:短型、标准型和扩展型。短型和标准型芯片通常以 DIP(双列直插式封装)形式提供,但扩展型 8051 模型通常具有不同的外形尺寸,并且不“插拔兼容”。所有这些都称为 8051,因为它们都可以使用 8051 汇编语言进行编程,并且它们都共享某些特性(尽管不同的模型都有自己的特殊特性)。

使 8051 广受欢迎的一些特性包括

  • 4 KB 片上程序存储器。
  • 128 字节片上数据存储器 (RAM)
    • 32 字节专用于寄存器组
    • 16 字节位可寻址内存
    • 80 字节通用内存
  • 4 个寄存器组。
  • 128 个用户定义软件标志。
  • 8 位数据总线
  • 16 位地址总线
  • 16 位定时器(通常为 2 个,但可能更多或更少)。
  • 3 个内部和 2 个外部中断。
  • 16 字节的位和字节可寻址 RAM 区域。
  • 四个 8 位端口(短型模型有两个 8 位端口)。
  • 16 位程序计数器和数据指针。
  • 使用 12 MHz 晶体时,指令周期为 1 微秒。

8051 的变体可能还具有一些特殊、特定于模型的特性,例如 UART、ADC、运算放大器等,使其成为功能更强大的微控制器。

典型应用

[编辑 | 编辑源代码]

8051 芯片被广泛应用于各种控制系统、电信应用、机器人以及汽车行业。据估计,8051 系列芯片占嵌入式芯片市场的 50% 以上。

8051 DIP 的引脚图

基本引脚

[编辑 | 编辑源代码]

引脚 9:引脚 9 是复位引脚,用于在启动时复位微控制器的内部寄存器和端口。(引脚应保持高电平 2 个机器周期。)

引脚 18 和 19:8051 具有内置的振荡器放大器,因此我们只需要在这些引脚上连接一个晶体即可为电路提供时钟脉冲。

引脚 40 和 20:引脚 40 和 20 分别是 VCC 和地。8051 芯片需要 +5V 500mA 才能正常工作,不过也有一些低功耗版本,例如 Atmel 2051,它是 8051 的缩减版本,工作电压为 +3V。

引脚 29、30 和 31:如 8051 特性所述,该芯片包含一个内置的闪存。为了对其进行编程,我们需要在引脚 31 上提供 +12V 电压。如果连接了外部存储器,则引脚 31 也称为 EA/VPP,应连接到地,以指示存在外部存储器。引脚 30 称为 ALE(地址锁存使能),当多个存储器芯片连接到控制器时,并且只需要选择其中一个时,就会使用该引脚。我们将在后面的章节中详细介绍这一点。引脚 29 称为 PSEN。这是“程序存储器使能”。为了使用外部存储器,需要在 PSEN 和 EA 引脚上提供低电压(0)。

引脚 29:如果我们使用外部 ROM,那么它应该有一个逻辑 0,指示微控制器从存储器读取数据。

引脚 30:此引脚用于 ALE,即地址锁存使能。如果我们使用多个存储器芯片,则此引脚用于区分它们。它以 1/6 的振荡器频率的恒定速率周期性地激活。该引脚还在 EPROM 编程期间提供程序脉冲输入。

引脚 31:如果我们必须使用多个存储器,那么通过将逻辑 1 应用于此引脚,指示微控制器首先从内部存储器读取数据,然后从外部存储器读取数据。

有 4 个 8 位端口:P0、P1、P2 和 P3。

端口 P1(引脚 1 到 8):端口 P1 是一个通用输入/输出端口,可用于各种接口任务。其他端口 P0、P2 和 P3 根据使用上下文具有双重作用或附加功能。端口 1 输出缓冲器可以吸收/提供四个 TTL 输入。当向 portn1 写入 1 时,引脚会通过内部上拉电阻拉高,并且可以用作输入。

端口 P3(引脚 10 到 17):端口 P3 充当正常的 I/O 端口,但端口 P3 还具有附加功能,例如,串行发送和接收引脚、2 个外部中断引脚、2 个外部计数器输入、用于内存访问的读写引脚。

端口 P2(引脚 21 到 28):端口 P2 也可以用作通用 8 位端口,此时没有外部存储器,但是如果需要外部存储器访问,那么端口 P2 将与端口 P0 一起充当地址总线,以访问外部存储器。端口 P2 充当 A8-A15,如图 1.1 所示。

端口 P0(引脚 32 到 39)端口 P0 也可以用作通用 8 位端口,此时没有外部存储器,但是如果需要外部存储器访问,那么端口 P0 将充当复用地址和数据总线,可与端口 P2 一起用于访问外部存储器。P0 充当 AD0-AD7,如 图 1.1 所示。

端口 P10:异步通信输入或串行同步通信输出。

引脚 11:串行异步通信输出或串行同步通信时钟输出。

振荡器电路

[编辑 | 编辑源代码]

8051 需要一个外部振荡器电路。振荡器电路通常运行在 12 MHz 左右,尽管 8051(具体取决于具体型号)能够以高达 40 MHz 的速度运行。8051 中的每个机器周期都是 12 个时钟周期,这使得有效周期速率在 1 MHz(对于 12 MHz 时钟)到 3.33 MHz(对于最大 40 MHz 时钟)之间。振荡器电路产生时钟脉冲,以便所有内部操作同步。

一个机器周期包含 6 个状态。一个状态为 2 个 T 状态。因此一个机器周期为 12 个 T 状态。执行指令所需的时间是通过将 C 乘以 12 并将乘积除以晶体频率来计算的。

T=(C*12d)/晶体频率

8051 内部架构

[编辑 | 编辑源代码]
8051 的内部示意图。

数据和程序存储器

[编辑 | 编辑源代码]

8051 微控制器可以用 PL/M、8051 汇编、C 和许多其他高级语言进行编程。有些编译器甚至支持为 8051 编译 C++。

8051 的程序存储器是只读的,而数据存储器被认为是读写可访问的。当存储在 EEPROM 或 Flash 中时,程序存储器可以在微控制器处于特殊编程电路中时被重写,或者,如果不使用 8031,则可以通过预装的引导加载程序进行重写。

程序起始地址

[编辑 | 编辑源代码]

8051 从程序存储器中的地址 0000 开始执行程序指令。

特殊功能寄存器

[编辑 | 编辑源代码]

特殊功能寄存器 (SFR) 是可寻址内存的上部区域,从地址 0x80 到 0xFF。A、B、PSW、DPTR 被称为 SFR。该内存区域不能用于数据或程序存储,而是作为一系列内存映射端口和寄存器。因此,所有端口输入和输出都可以通过对 SFR 中指定地址执行内存mov操作来完成。此外,不同的状态寄存器被映射到 SFR 中,用于检查 8051 的状态,并更改 8051 的一些操作参数。

通用寄存器

[编辑 | 编辑源代码]

8051 有 4 个可选的 8 位可寻址寄存器组,从 R0 到 R7。这意味着实际上有 32 个可用的通用寄存器,尽管一次只能直接访问 8 个(一个组)。要访问其他组,我们需要在标志寄存器中更改当前组号。

A 和 B 寄存器

[编辑 | 编辑源代码]

A 寄存器位于 SFR 内存位置 0xE0。A 寄存器的工作方式类似于 x86 处理器的 AX 寄存器。A 寄存器被称为累加器,默认情况下,它接收所有算术运算的结果。B 寄存器以类似的方式使用,只是它可以接收乘法和除法运算的扩展结果。当不用于乘法和除法时,B 寄存器可用作额外的通用寄存器。A 和 B 寄存器可以分别存储高达 8 位的数据。

华夏公益教科书