打印
[疑难问答]

8051单片机原理学习

[复制链接]
1828|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
primojones|  楼主 | 2024-5-30 23:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机结构框图

51单片机的结构框图如下所示

51单片机主要组成部件有:

  • 8bit微处理器(CPU): 主要进行算术运行和逻辑控制
  • 片内4KB程序存储器(4KB ROM): 用以可执行程序,只读数据和表格
  • 片内256B数据存储器(256B RAM): 用于存放可读写数据,如算术运行的中间值和最终值等
  • 4个8位并行I/O口(输入/输出口) P0 ~ P3: 每个并口可以用作输入,也可以用作输出
  • 2个定时/计数器:每个定时/计数器可以设置为计数方式,也可以设置为定时方式,计数方式用于对外部事件进行技术。定时方式根据计数或者定时的结果进行相应的周期性处理。
  • 1个全双工串口通信I/O口:用于实现单片机与其他外围设备进行串口通信
  • 片内振荡器和时钟产生电路:需外借晶振和电容给单片机提供原始时钟
  • 5个中断源的中断控制系统:
单片机内部结构图

单片机内部的详细组件图如下所示

看上图似乎非常的复杂,不过主要分为四大部分,如下图不同颜色框出来的所示

  • 运算单元(红色框图):主要进行算术运算(加减乘除)和逻辑运行(与,或,非)
  • 控制单元(蓝色框图):控制单片机的各种操作
  • 存储单元(粉色框图):主要有ROM和RAM,其中ROM用于存储程序,RAM用于存储定义的变量等。
    注: 可以通过code这个指令来将定义的变量放在ROM,而不是RAM中,节省RAM资源
  • 外部接口(绿色框图):主要是对外部设备的I/O控制接口
51单片机存储单元结构

单片机中执行的程序先保存在存储单元中,然后才能被执行,因此先对单片机中的存储单元结构进行介绍。
51单片机的存储单元结构如下:

  • 内置4KB大小的ROM
  • 内置256B大小的RAM
  • 可以外接64K的ROM和64K的RAM
    因此,从物理结构角度看,51单片机的存储系统分为4个存储空间:
  • 片内ROM
  • 片内RAM
  • 片外ROM
  • 片外RAM

从单片机执行程序角度看,51单片机的存储系统实际上分为3个存储空间

  • 片内RAM
  • 片外RAM
  • 片内ROM或者片外ROM(由引脚EA电平来确定,EA = 1选择片内ROM, EA = 0选择片外ROM)

ROM中存储的是程序,常量或者表格等,当执行程序时,由EA引脚的电平来决定是从片内ROM中取指令执行还是从片外ROM中取指令执行。
EA = 1时,CPU执行片内ROM中的程序
EA = 0时,CPU执行片外ROM中的程序

无论从片内ROM还是片外ROM中的程序,都是从ROM的地址0000H处开始执行。

虽然系统可能同时具备片内ROM和外部ROM,但是在一般正常使用时,通过/EA引脚的电平来选择其一(或者使用内部ROM,或者使用外部ROM)。

由于片内ROM的大小是4KB,那么当程序大小超过4KB时,有如下两种使用ROM的方式

  • 方式1:设置EA = 0,直接使用片外ROM,从地址0000H开始
  • 方式2:设置EA = 1,使用片内4KB ROM(从0000H地址开始)和片外64KB ROM(片外ROM从1000H地址开始

如下图所示

需要特别注意的地方时, ROM中有6个地址空间位置具有特定的功能

  • 0000H地址:上电或者复位时,程序计数器PC所指向的单元,用来存放程序的第一条指令
  • 0003H地址:外部中断/INT0的向量入口地址
  • 000BH地址:定时器T0溢出中断的向量入口地址
  • 0013H地址:外部中断/INT1的向量入口地址
  • 001BH地址:定时器T1的溢出中断向量入口地址
  • 0023H地址:串行口接收、发送的中断向量入口地址

向量入口地址,指的是当中断产生时,调用的入口函数所在的存储位置。

因此,程序在ROM中布局结构如下图
从上图可知,单片机在上电开机或者复位后的第一条指令存储在0000H地址处,该地址处的指令是一条跳转指令,直接跳转到0100H地址处, 而0100H地址处才是真正的主程序入口地址。

外围接口介绍串行口

51单片机有一个全双工的串行口,简称串口,串口内部结构如下图所示

串行口对外有两个引脚:

  • 串行口P3.1(TxD): 串行数据发送引脚
  • 串行口P3.0(RxD): 串行数据接收引脚

结构图中模块介绍:

波特率发生器:
串口数据的发送和接收都是在时钟控制下进行的,每秒发送的比特数称为波特率(baud rate),单位为bps。常见的波特率有2400bps, 4800bps, 9600bps,115200bps。波特率越高,数据传输速率越快。
注意: 串口是异步通信,收发双方独自使用自己的时钟,因此要求双方波特率必须设置一致,一般情况下,波特率相差不能超过2%,否则无法正确发送/收到数据,导致出现乱码。

串行口控制寄存器(SCON):

用于控制串行口的工作方式等。

发送缓存SBUF:

用于缓存待发送的字节

接收缓存SBUF:

用于缓存已接收到的字节

移位控制器:

在波特率的时钟控制下,把RxD引脚上的电平信号(0/1)通过移位寄存器保存到SBUF中

TI标志位:
用于指示一帧数据是否发送完成,1表示发送完成。

RI标志位:
用于指示是否接收到数据,1表示接收到一帧数据,当接收到数据后,必须由软件及时清零RI,否则无法接收下一帧数据,会导致数据丢弃的情况。

注意: TI和RI均需要软件进行清零。

串口发送流程如下:

  • 待发送的数据按字节通过内部总线先写到发送SBUF中
  • 根据波特率发生器来控制发送控制器的发送速率
  • 通过控制发送控制门,把待发送的字节从发送SBUF逐比特发送到P3.1(TxD)输出管脚。
  • SBUF中的数据发送完成后,置发送完成中断标志位TI为1。
  • 若串口中断允许,则触发串口中断处理函数。

串口接收流程如下:

  • 当串口接收到一帧数据后,将8bit的数据在接收控制器的控制下,通过移位寄存器逐比特接收存储到接收SBUF中。
  • 当8bit数据接收完成后,置接收完成中断标志位RI为1。
  • 若串口中断允许,则触发串口中断处理函数。

使用特权

评论回复
沙发
caigang13| | 2024-6-2 15:40 | 只看该作者
8位机其实是一个很经典的架构

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

41

主题

1284

帖子

0

粉丝