单片机结构框图 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。
- 若串口中断允许,则触发串口中断处理函数。
|