单片机原理(1):基本结构

单片微型计算机(Single Chip Microcomputer)简称单片机,是把组成微型计算机的主要功能部件(CPU、RAM、ROM、I/O口、定时/计数器、串行口等)集成在一块芯片中,构成一个完整的微型计算机。

单片机主要面对测控对象,突出的是控制功能,所以它的芯片内集成了很多面向测控对象的接口电路,如ADC(Analog to Digital Converter,模数转换器)、DAC(Digital to Analog Converter,数模转换器)、高速I/O口、PWM(Pulse Width Modulator,脉冲宽度调制器)、WDT(Watch Dog Timer,监视定时器,俗称“看门狗”)等。这些接口电路已经突破了传统的微型计算机体系结构,所以单片机也称MCU(Micro-Controller Unit,微控制器)

单片机的种类十分广泛,现在市场上主流的有PIC系列、STM32系列、AVR等等。51系列单片机是对所有兼容Intel 8031指令系统的单片机的统称,它们都是Intel公司1981年制造8位MCU Intel 8051衍生兼容品,其指令集称为MCS-51。这里以此为例介绍单片机工作原理。

引脚及功能

51单片机引脚图

51单片机的通常采用的是40引脚的双列直插式封装(Dual In-line Package,DIP),引脚功能的定义如上图所示。
除去基本的电源引脚,其中:

  • VSS:电源引脚,需要接地(GND)。
  • XTAL1、XTAL2(External Crystal):时间引脚,在片内XTAL1是振荡器反相放大器和时钟发生器的输入端,XTAL2是振荡器反相放大器的输出。分别外接由两个电容与晶振的并联谐振时钟电路时,XTAL1接外部晶振和微调电容的一端,XTAL2接外部晶振和微调电容的另一端;使用外部时钟时,XTAL1接地或悬空,XTAL2引脚接外部时钟的输入。
  • RST(Reset):复位引脚,出现持续两个机器周期的高电平将导致单片机复位。
  • ALE/PROG(Address Latch Enable/):作ALE,为地址锁存允许控制,用于在访问外部存储器时锁存P0口输出的低8位地址,脉冲的频率大约为振荡器频率的1/6。作PROG,当内部程序存储器(EPROM)编程时,由此输入编程脉冲信号。
  • PSEN(Programme Store Enable):外部程序存储器选通信号。
  • EA/Vpp(External Enable):作EA功能,为外部程序存储器使能信号,低电平时,只能访问外部程序存储器。作Vpp,对EPROM编程时,用以施加编程电压。
  • P0、P1、P2、P3:四个并行I/O口,每并行口8个引脚。

I/O口结构及功能

51单片机的32个I/O引脚,组成P0~P3四个8位的并行双向I/O口,内部的特殊功能寄存器(Special Function Register,SFR)P0~P3分别是它们的端口锁存器,此外每个口还分别包含一个输出驱动器和输入缓冲器。四个并行口可以按字节操作,也可以按位操作。

P0

可作一般I/O口使用,应用系统采用外部总线结构时,也可以分时复用作为双向数据总线(Data Bus)和低8位地址总线(Address Bus)

P0口

上图为P0口某一位的结构原理图。

当P0作I/O口时,CPU发出控制信号C=0,封锁与门,使场效应管V2截至,同时将下面的数据选择器(Multiplexer,MUX)拨到下方,将锁存器的$\overline Q$端与场效应管(Field Effect Transistor)V1的栅极接通。

输出数据时,内部总线数据经锁存器、MUX、V1输出到引脚;输入数据后,上下两个三态输入缓冲器用以内部的读操作,分别实现读引脚和读锁存器。

要注意的是,P0口作为I/O口输出时,由于输出级为漏极开路电路,需要外接上拉电阻,才能输出高电平;输入后读取数据时,V1导通将输入的高电平拉为低电平造成误读,所以在进行输入操作前,要先向端口输出锁存器写“1”

当P0口作地址/数据总线时,CPU发出控制信号C=1。由P0输出地址/数据信息时,与门打开,MUX将CPU内部地址/数据总线反向后与V1的栅极接通,V1和V2两个FET管构成推拉式输出电路,负载能力大大加强;输入数据时,是由下面的三态输入缓冲器进入内部数据的。

P1

四个I/O口中功能最简单,可做一般I/O口使用。其某一位的结构原理图如下。

P1口

其内部已有上拉电阻,可直接输出高电平,驱动拉电流负载。和P0一样,端口输入后读取数据时,要先向端口输出锁存器写“1”。

P2

可作一般I/O口使用,在应用系统采用外部总线结构时,仅用作高8位地址总线。其某一位的结构原理如下图:

P2口

MUX打向左边时,作一般I/O口使用,此时于前面介绍的I/O口工作原理基本一致。Q输出为0时V1导通,外部引脚输出低电平;输出1时V1截止,由于存在内部上拉电阻,外部引脚输出高电平。输入后也可分为读引脚状态和读锁存器状态。而且端口输入后读取数据时,要先向端口输出锁存器写“1”。

P3

可作一般I/O口使用外,每个引脚都具有第二功能。其某一位的结构原理如下图:

P3口

作一般I/O口用,原理同P2。使用引脚的第二功能时,对应的锁存器里必须为“1”,否则图中的与非门输出始终为1,V1导通,引脚始终在低电平,不能正常工作。

每个引脚的第二功能如下表:

引脚 第二功能 说明
P3.0 RXD(Receive External Data) 串行输入端
P3.1 TXD(Transmit External Data) 串行输出端
P3.2 INT0(Interrupt) 外部中断0
P3.3 INT1 外部中断1
P3.4 T0(Timer) 计数器0外部输入
P3.5 T1 计数器1外部输入
P3.6 WR(Write Enable) 外部数据存储器写选通
P3.7 RD(Read Enable) 外部数据存储器读选通

四个I/O口中,P1、P2、P3口可驱动4个LS TTL(Low-power Schottky TTL,低功耗肖特基TTL)负载,即输出电流不小于400uA; P0口的输出缓冲器可驱动8个LS TTL负载,作一般I/O使用时为开漏输出,需要外加上拉电阻,做数据/地址总线使用时不需要外加上拉电阻。

内部微体系结构

内部结构图

51系列单片机内部包含:

  • 运算器(包括逻辑运算器ALU(Arithmetic and Logic Unit)、累加器ACC(Accumulator)、寄存器B、程序状态字寄存器PSW(Program Status Word))、程序计数器PC(Program Counter)、指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)、数据指针DPTR(Data Pointer)等组成的8位CPU。
  • 4KB ROM 程序存储器、128B RAM 数据存储器
  • 可寻址64KB外部数据存储、控制电路
  • 21个特殊功能寄存器SFR
  • 32条可编程I/O端口线
  • 2个16位定时/计数器
  • 1个可编程全双工串行口
  • 5个中断源、两个优先级嵌套中断结构
  • 1个片内振荡器及时钟电路

CPU

CPU用以产生各种控制信号,是单片机的核心。

ALU完成数据的算数运算、逻辑运算,并将运算结果的状态送往PSW。

PC是一个16位具有自动加一功能的寄存器,用来存放即将取出的指令地址,可对64KB程序存储器直接寻址。

IR是用来暂存待执行指令的8位寄存器。ID对其中的指令进行译码,将指令转变为执行此指令所需要的电信号。

DPTR是一个16位专用地址指针寄存器,用来存放16位地址,作间址寄存器使用。

存储器

51单片机的存储器按功能可分为数据存储器(RAM)和程序存储器(ROM),按位置分又可以分为片外存储器和片内存储器 。

ROM

51单片机通常包含只4KB的程序存储器,而以PC作为地址指针,通过16位地址总线,最大可寻址$2^{16}$B即64KB的地址空间,所以一般进行外部存储器进行拓展。

引脚EA}决定了程序存储器的0000~0FFFH 4KB地址范围在单片机内部还是外部。当EA=1时,程序存储器的地址分为片内的0000~0FFFH 4KB地址范围和片外程序存储器的1000~FFFFH 60KB地址范围;否则,当EA=0时,只能寻址外部程序存储器,0000~FFFFH全部64KB地址空间都在片外。

系统复位后PC的内容为0000H,也就是说单片机上电后都是从程序存储器的0000H单元开始取指令执行程序,一般在此地址单元设置转移指令,使之转向用户主程序处。此外,0003~0023H单元被保留用作5个中断服务程序的入口地址:

入口地址 所属中断
0003H 外部中断0入口地址
000BH 定时器0中断入口地址
0013H 外部中断1入口地址
001BH 定时器1中断入口地址
0023H 串口中断入口地址

故中断服务程序个主程序一般都被放置在0030H单元以后。

RAM

128B的内部数据存储器是用得最多的地址空间,所有的操作指令的操作数据只能在此地址空间或SFR中。

RAM

RAM区结构如上图。其中,00H~1FH共32个单元为工作寄存器区,分为4组,每组8个单元组成通用寄存器,都用R0~R7表示。可以通过改变PSW的RS1和RS0、RS1两位的状态来选择CPU当前使用的工作寄存器组,如下表所示。这样可以提高CPU的操作效率和响应中断的速度,利于现场的保护及恢复。

工作寄存器选取

20H~2FH共16个字节128位组成位寻址区,可用位寻址方式访问,位地址为00H~7FH。位寻址区的位地址如下表:

位寻址区地址

最顶层的30H~7FH共80个单元为用户RAM区,作为堆栈或者数据缓存器。

普通51子系列单片机中,地址为00H~7FH的低128B区域为RAM区,而地址为80H~FFH的高128B区域即为SFR。增强型52子系列中,有地址为00H~FFH的256B的RAM,而SFR的地址和RAM的高128字节地址80H~FFH是重合的,需要通过不同的寻址方式来区分它们。

SFR

SFR是专门用于控制、选择、管理、存放单片机内部各部分的工作方式、条件、状态、结果的寄存器,不同的SFR用于管理不同的硬件模块。

51单片机内的21个SFR中,有5个是16位寄存器 ,11个可以进行位寻址。它们的地址分布及功能如下表:

SFR

其中PSW用于存放程序运行是的各种状态信息,其各位定义如下:

位地址 D7H D6H D5H D4H D3H D2H D1H D0H
定义 CY AC F0 RS1 RS0 OV F1 P
  • CY(Carry):进位标志位,运算过程最高为产生进位或借位,则CY=1。
  • AC(Assistant Carry):辅助进位标志位,运算过程中低四位向高位有进位或借位,则AC=1。
  • F0/F1:软件标志位,可作为用户自定义的标志位,由用户置位或复位。
  • RS0和RS1(Register Select):RAM中的4组工作寄存器选择位。
  • OV(Overflow):溢出标志位,运算过程中产生溢出,OV=1。
  • P(Parity):奇偶标志位,执行指令是会根据ACC中1的个数的奇偶自动令P置位或清零,奇为1,偶为0;串行通信时,可以由此位验证传输的可靠性。

时钟和复位

单片机内部的时钟信号用来提供单片机内部各种操作的时间基准,复位操作使单片机内的电路初始化。

时钟电路、单位

51单片机的时钟信号通常由内部振荡外部振荡方式来获得。接法如图所示:

时钟信号

在XTAL1和XTAL2引脚外接晶体振荡器或者陶瓷谐振器,即构成内部振荡方式。晶振通常选用6、12或24MHz,单片机内部有一个高增益反向放大器,外接晶振将构成自激振荡,产生振荡时钟脉冲,电容C1、C2可以稳定振荡频率,电容值一般为5~30pF。

外部振荡就是把已有的时钟信号引入单片机内。

单片机以晶振的振荡周期(或外部输入的时钟周期)为最小的时序单位,片内的各种微操作都以此周期为时序基准;振荡频率经单片机内的二分频器分频后形成状态周期,所以,1个状态周期包含2个振荡周期;而6个状态周期组成1个机器周期,所以,1个机器周期包含12个振荡周期;执行一条指令需要1~4个机器周期,这个时间便称为指令周期

例如,单片机外接12MHz的晶振时:$$ 振荡周期 = \frac{1}{f_{osc}} = \frac{1}{12Mhz} = 0.0833 us $$ $$ 状态周期 = \frac{2}{f_{osc}} = \frac{2}{12Mhz} = 0.167 us $$ $$ 机器周期 = \frac{12}{f_{osc}} = \frac{12}{12Mhz} = 1 us $$ $$ 指令周期 = 1–4个机器周期 = 1–4 us $$

时序图

51单片机的指令执行及存储器读取时序图如下:

取指时序:

指令时序图

外部ROM读时序:

外部ROM读时序

外部RAM读取时序:

外部RAM读取时序

复位电路

当51单片机的复位引脚RST出现两个机器周期以上高电平时,单片机即完成复位操作。复位操作通常有上电复位和开关复位两种形式,接法如图所示:

复位电路

单片机复位后,PC=0000H,P0~P3=FFH,SP=07H,其他寄存器都回到初始的0状态。


更新历史:

  • 2017.11.22 完成初稿
文章作者: Hugsy
文章链接: http://binweber.top/2017/11/19/msc51_1/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Weber
支付宝打赏~
微信打赏~