单片机原理
- 一、单片机概述
-
- [1.1 各种单片机系列](#1.1 各种单片机系列)
- 1.2嵌入式处理器
-
- [1.2.1 嵌入式DSP](#1.2.1 嵌入式DSP)
- [1.2.2 嵌入式微处理器](#1.2.2 嵌入式微处理器)
- 二、AT89S52
-
- [2.1 硬件组成](#2.1 硬件组成)
- [2.2 引脚功能](#2.2 引脚功能)
-
- [2.2.1 电源、时钟引脚](#2.2.1 电源、时钟引脚)
- [2.2.2 控制引脚](#2.2.2 控制引脚)
- [2.2.3 并行I/O口引脚](#2.2.3 并行I/O口引脚)
- [2.3 AT89S52单片机的CPU](#2.3 AT89S52单片机的CPU)
-
- [2.3.1 运算器](#2.3.1 运算器)
- [2.3.2 控制器](#2.3.2 控制器)
- [2.4 AT89S52单片机的存储器结构](#2.4 AT89S52单片机的存储器结构)
-
- [2.4.1 程序存储器空间 ROM](#2.4.1 程序存储器空间 ROM)
- [2.4.2 数据存储器空间 RAM](#2.4.2 数据存储器空间 RAM)
- [2.4.3 特殊功能寄存器 SFR](#2.4.3 特殊功能寄存器 SFR)
- [2.4.4 位地址空间](#2.4.4 位地址空间)
- [2.5 AT89S52单片机的并行I/O口](#2.5 AT89S52单片机的并行I/O口)
-
- [2.5.1 P0口](#2.5.1 P0口)
- [2.5.2 P1口](#2.5.2 P1口)
- [2.5.3 P2口](#2.5.3 P2口)
- [2.5.4 P3口](#2.5.4 P3口)
- [2.6 AT89S52单片机的时钟电路与时序](#2.6 AT89S52单片机的时钟电路与时序)
一、单片机概述
单片机就是在一片半导体硅片上,集成了中央处理单元(CPU )、存储器 (RAM、ROM)、并行I/O、串行I/O 、中断系统、定时器/计数器、时钟电路、系统总线,用于 测控 领域的单片微型计算机
单片机又称为 嵌入式微控制器 或者 微控制器
RAM:随机存取存储器(random access memory)也称为主存
ROM:只读内存(read-only memory)
bash
受器件的物理性能限制 单片机内部数据用 二进制 形式表示
专用单片机已使系统结构最简化、软硬件资源利用最优化,从而大大降低 成本 和提高 可靠性
1.1 各种单片机系列
-
MCS-51系列
-
AT89S5x系列
AT89S52单片机的工作频率上限为24 MHZ
-
STC系列
STC系列单片机是8051内核的单片机
-
C8051Fxxx系列
-
ADμC812单片机
-
华邦W77系列、W78系列
-
PIC系列
-
AVR系列
1.2嵌入式处理器
复杂的数字信号处理运算及高速的测控功能
1.2.1 嵌入式DSP
1.2.2 嵌入式微处理器
二、AT89S52
2.1 硬件组成
AT89S52单片机片内硬件结构
- CPU(8位)
包括了 运算器 和 控制器 ,还有 面向控制 的 位处理 和 位控功能 - 数据存储器RAM(256B)片外可加64KB数据存储器
程序存储器ROM(8KB Flash)片外最多可扩至64KB程序存储器 - 串行口(1个全双工 、通用 、异步收发 )
并行口(4个8位)
中断系统(6个中断源,有优先级)
定时器/计数器(3个16位)
看门狗定时器WDT(1个):当单片机 由于干扰而使程序陷入死循环或者跑飞状态 时,可引起单片机复位 ,程序恢复正常运行
特殊功能寄存器SFR(32个):用于CPU对 片内 各个 外设部件进行管理、控制和监视。这些特殊功能寄存器映射在片内RAM区的80H~FFH的地址区间内
2.2 引脚功能
- 电源及时钟引脚 Vcc、Vss、XTAL1、XTAL2
- 控制引脚 PSEN、ALE/PROG、EA / Vpp、RST
- I/O口引脚 P0、P1、P2、P3,4个8位并行I/O口
2.2.1 电源、时钟引脚
电源引脚
- Vcc:接 +5V 电源
- Vss:接地
时钟引脚
- XTAL1:
- XTAL2:
2.2.2 控制引脚
控制引脚提供控制信号,有的引脚还具有复用功能。
-
1.RST (RESET,9脚)
复位 信号输入端,高电平有效。在此引脚加上持续时间大于2个机器周期的高电平,就可使单片机复位。在单片机正常工作时,此引脚应为≤0.5V的低电平。当看门狗定时器溢出时,在引脚内部,看门狗定时器向该引脚输出长达96个时钟振荡周期的高电平,从而使单片机复位。
-
2.EA/Vpp ( Enable Address/Voltage Pulse of Programing,31脚)
-
EA(Extermal Access Enable)为该引脚的第一功能 :外部程序存储器访问允许控制端
-
EA=1时
在AT89S52单片机 片内 的PC值 不超出1FFFH (即不超出片内8KB程序存储器的最大地址)时,AT89S52单片机 读 片内 程序存储器(8KB)中的程序代码
PC值 超出1FFFH (即超出片内8KB Flash存储器的最大地址)时,将自动转向读取 片外 60KB (2000H~FFFFH)程序存储器空间中的程序代码。
-
EA=0时
单片机只读取片外程序存储器中的内容 ,读取的地址范围为0000H~FFFFH,此时 片内的8KB Flash程序存储器不起作用。
-
-
Vpp为该引脚的第二功能 ,在对片内Flash进行编程时,该引脚接入编程电压
-
-
3.ALE/PROG (Address Latch Enable/PROGramming,30脚)
-
ALE 为引脚的第一功能 ,为 地址锁存控制信号端
-
PROG为该引脚的第二功能 ,在对 片内 Flash程序存储器编程时,此引脚作为 编程脉冲输入端
-
-
4.PSEN(Program Strobe ENable,29脚)
访问 片外 程序存储器的读选通信号,低电平有效。- 当访问片外 程序存储器读取指令码时,每个机器周期引脚产生两次有效信号,即 输出两个PSEN有效脉冲。
- 在执行读取片内 程序存储器指令码时,该引脚不产生此脉冲。
2.2.3 并行I/O口引脚
- P0口:P0.7~P0.0引脚 为漏极开路的8位 并行双向I/O口 ,作为 输出口 时,每个引脚可驱动8个LS型TTL负载 。
当AT89S52扩展外部存储器及I/0接口芯片时,PO口为分时复用的低8位地址/数据总线。在向PO口写入1后就成为高阻态的输入口。
当PO口作为通用I/0口使用时,需外加上拉电阻,这时为准双向口。
- P1口:P1.7~P1.0引脚 准双向I/O口,具有内部上拉电阻,可驱动4个LS型TTL负载
在对片内Flash编程和校验时定义为低8位地址线。P1口某些引脚的第二功能如下:
- P1.0/T2:T2脚为定时器/计数器T2的外部计数信号输入端T2。
- P1.1/T2EX:T2EX为定时器/计数器T2的捕捉/重新装载触发及方向控制T2EX。
- P1.5/MOSI:MOSI用于对片内Flash存储器的串行编程和校验。
- P1.6/MISO:MISO用于对片内Flash存储器的串行编程和校验。
- P1.7/SCK:SCK用于对片内Flash存储器的串行编程和校验的移位脉冲输入引脚
-
P2口:P2.7~P2.0引脚 准双向I/O口,引脚内部接有上拉电阻,可驱动4个LS型TTL负载
当AT89S52单片机访问外部存储器及I/O口时,P2口作为
高8位地址总线
使用,输出高8 位地址。当P2口不作为高8位地址总线时,可作为
通用的I/O口
使用。 -
P3口:P3.7~P3.0引脚 准双向I/0口,引脚内部接有上拉电阻
P3口的第一功能 是作为通用的I/O口使用,可驱动4个LS型TTL负载。
P3口还具有第二功能
2.3 AT89S52单片机的CPU
AT89S52单片机的CPU是由运算器和控制器构成。
2.3.1 运算器
运算器主要用来对操作数进行算术 、逻辑 和位操作 运算。
主要包括算术逻辑运算单元ALU、累加器A、位处理器、程序状态字寄存器PSW及两个暂存器等。
- 算术逻辑运算单元 ALU
ALU的功能强,不仅可对8位变量进行逻辑与、或、异或以及循环、求补和清0等操作,还可以进行加、减、乘、除等基本算术运算。ALU还具有位操作功能,可对位(bit)变量进行位处理,如置1、清0、求补、测试转移及逻辑与、或等操作。 - 累加器A(Acc)
累加器A是CPU中使用最频繁的一个8位寄存器,是AT89S52单片机的特殊功能寄存器之一,位于片内的特殊功能寄存器区
(1) 是ALU单元的输入数据源之一,同时又是ALU运算结果的存放单元。
(2) CPU中的数据传送大多通过累加器A,故累加器A又相当于数据的中转站。为解决累加器结构所带来的"瓶颈堵塞"问题,AT89S52单片机增加了一部分可以不经过累加器A的数据传送指令。 - 程序状态字寄存器 PSW
AT89S52单片机的程序状态字寄存器PSW(Program Status Word)位于片内的特殊功能寄存器区,字节地址为DOH。PSW的各个位包含程序运行状态的不同信息,其中4位保存当前指令执行后的状态,以供程序查询和判断。
(1)Cy(PSW.7) 进位标志位
也可写为C。在执行算术运算和逻辑运算指令时,若最高位有进位或借位,则Cy=1;否则,Cy=0。在位处理器中,它又是位累加器。
(2)Ac(PSW.6) 辅助进位标志位
Ac标志位用于在BCD码运算时进行十进位调整。即在运算时,当D3位向D4位产生进位或借位时,Ac=1;否则,Ac=0。
(3)FO(PSW.5) 用户使用的标志位
,可用指令来使它置1或清0,也可用指令来测试该标志位,根据测试结果控制程序的流向。编程时用户应充分利用该标志位。
(4)RSI、RSO(PSW.4、PSW.3) 4组工作寄存器区选择控制位1和位0这两位用来选择片内RAM区中的4组工作寄存器区中的某一组作为当前工作寄存区,RS1、RSO与所选择的4组工作寄存器区的对应关系如表2-2所示。
(5)OV(PsW.2) 溢出标志位
当执行算术指令时,OV用来指示运算结果是否产生溢出。如果结果产生溢出,OV=1;否则,OV=0。 (6)PSW.1位 保留位 ,未用。
(7)P(PSW.O) 奇偶标志位
该标志位表示指令执行后,累加器A中1的个数是奇数还是偶数。
- P=1,表示累加器A中1的个数为奇数。
- P=0,表示累加器A中1的个数为偶数。
RS1、RSO与4组工作寄存器区的对应关系
2.3.2 控制器
控制器的主要任务是 识别指令,并根据指令的性质控制单片机片内各部件,从而保证单片机各部分能自动协调地工作。
程序计数器PC 是控制器中最基本的寄存器,是程序存储器的地址指针。PC是一个 独立的16位计数器 ,用户不能直接使用指令对PC进行访问(读/写)。当单片机复位时,PC的内容变为0000H,即CPU从程序存储器0000H单元读取指令,开始执行程序。
PC的基本工作过程是:CPU读取指令时,PC内容作为欲读取指令的地址发送给程序存储器,然后CPU读取程序存储器该地址单元内的指令字节,同时PC自动加1
这也是为什么PC被称为程序计数器的原因。由于PC实质上是作为程序寄存器的地址指针,所以也称其为 程序指针
- PC内容的变化轨迹决定了程序的流程。
- 程序计数器的计数宽度决定了访问程序存储器的地址范围。
2.4 AT89S52单片机的存储器结构
AT89S52单片机存储器结构为 哈佛结构 ,即片外程序存储器空间和数据存储器空间是 各自独立 的。
AT89S52单片机的存储器结构包括了:
- 程序存储器空间
- 数据存储器空间
- 特殊功能寄存器
- 位地址空间
2.4.1 程序存储器空间 ROM
作用:存放程序和表格之类的固定常数
AT89S52单片机的 片内 程序存储器为8KB的Flash存储器,地址范围为0000H~1FFFH,51:4KB
AT89S52单片机有 16位地址总线 ,可外扩的程序存储器空间最大为64KB,地址范围为0000H~FFFFH。
整个程序存储器空间可分为 片内 和 片外 两部分,CPU究竟是访问片内的还是片外的程序存储器,可 由EA引脚上所接的电平 来确定。
- 当EA=1
- 且PC值没有超出片内8KB Flash存储器的最大地址1FFFH时,CPU只读取 片内 的Flash程序存储器中的程序代码
- 当PC值>1FFFH,CPU会自动转向读取 片外 程序存储器空间2000H~FFFFH内的程序代码。
- 当EA=0
单片机的CPU 只读取片外 程序存储器地址范围为0000H~FFFFH中的程序代码,此时CPU不理会片内0000H~1FFFH的Flash存储器中的程序代码。
程序存储器的某些单元被固定用于各中断源的中断服务程序的入口地址。
64KB程序存储器空间中有6个固定单元分别对应于各中断源的中断服务子程序的中断入口(中断向量)
AT89S52单片机复位后,程序计数器PC的内容为0000H,从程序存储器地址0000H处开始执行程序
2.4.2 数据存储器空间 RAM
片内 数据存储器
AT89S52单片机的片内数据存储器(RAM)共有256个单元,字节地址为00H~FFH。
- 片内RAM字节地址为00H --- 1FH的32个单元是4组通用工作寄存器区,每组工作寄存器区包含8B的工作寄存器,编号为R0 --- R7。用户可以通过指令改变特殊功能寄存器PSW中的RS1、RSO这两位来切换选择当前的工作寄存器区
- 片内RAM地址为20H --- 2FH的16个单元的128位(8位×16)可进行位寻址 ,也可以字节寻址。
- 地址为30H~FFH的单元为用户RAM区,只能进行字节寻址 ,用作存放数据 以及作为堆栈区使用。
片外 数据存储器
当AT89S52片内256B的RAM不够用时,需要外扩数据存储器,片外最多可扩展64KB的RAM,C51:128B
注意
虽然片内RAM与片外扩展的RAM的低256B的地址是相同的,但这是 两个不同的数据存储区 。
2.4.3 特殊功能寄存器 SFR
AT89S52单片机中的特殊功能寄存器的单元地址 映射在片内RAM区的80H~FFH区域 中,共计32个,离散地分布在该区域中
- 堆栈指针 SP
AT89S52 单片机的堆栈只能设在 片内 的 RAM 区,属于 向上生长型 的(即每向堆栈压入 1 字节数据时 ,SP的内容自动增 1 ),且遵循 "先进后出"的原则。 单片机复位后 ,SP 中的内容为07H
堆栈主要是为 子程序调用 和 中断操作 而设立的 ,有两个功能 :保护断点和现场保护
- 保护断点
- 因为无论是子程序调用操作还是中断服务子程序调用操作 ,主程序都 会被"打断",但最 终都要返回到主程序断点地址处继续执行程序,因此,应预先把主程序的断点地址在堆栈中保护起来 ,为程序的正确返回做准备 。
- 现场保护
- 在单片机执行子程 序或中断服务子程序时,很可能要用到单片机中的一些寄存器单元,这就会破坏主程序运行时这些寄存器单元的原有 内容。所以在执行子程序或中断服务程序之前,要把单片机中有关寄存器单元的内容保存起来,送入堆栈,这就是所谓的"现场保护 " 。
堆栈的操作有两种: 一种是数据压入(PUSH)堆栈,另一种是数据从堆栈中弹出(POP)。当执行 1 字节数据压入堆栈的指令时,SP先自动加 1,再把 1 字 节数据压入堆栈;当执行 1 字节数据弹出堆栈指令时,先将堆栈栈顶内容弹出,然后SP再自动减 1
-
寄存器 B
AT89S52 单片机在进行 乘法和除法 操作时要使用寄存器 B。
- 在不执行乘 、除法操作的情况下,可把寄存器 B 当做一个普通寄存器来使用。
- 乘法运算时 ,两个乘数分别在A、B 中,执行乘法指令后,乘积存放在 BA 寄存器 对中。 B 中放乘积的高 8 位 ,A 中放乘积 的低 8 位 。
- 除法运算时,被除数取自 A,除数取自B,商存放在 A 中,余数存放于B 中
-
AUXR 寄存器
AUXR 是 辅助寄存器
-
DISALE: ALE 的禁止/允许位
- 0:ALE有效,允许ALE引脚发出ALE脉冲;
- 1:ALE脉冲仅在CPU访问外部存储器时有效,在不访问外部存储器时,ALE引脚不输出脉冲信号,这可减少ALE脉冲对外部电路的干扰。
-
DISRTO:禁止/允许看门狗定时器WDT溢出时的复位输出
- 0:WDT溢出时,允许向RST引脚输出一个高电平脉冲,使单片机复位
- 1:禁止WDT溢出时的复位输出
-
WDIDLE:WDT在空闲模式下的禁止/允许控制位
- 0:允许WDT在空闲模式下计数
- 1:禁止WDT在空闲模式下计数
-
-
数据指针 DPTR0 和 DPTR1
DPTR0和DPTR1为 双数据指针寄存器
-
AUXR1 寄存器
AUXR1是辅助寄存器
- DPS是数据指针寄存器DPTR0或DPTR1的选择位
- 0:选择数据指针寄存器DPTR0
- 1:选择数据指针寄存器DPTR1
- DPS是数据指针寄存器DPTR0或DPTR1的选择位
-
看门狗定时器 WDT
看门狗定时器WDT包含1个14位计数器和看门狗复位寄存器(WDTRST)。
当CPU由于干扰,程序陷入"死循环"或"跑飞"状态时,看门狗定时器WDT提供了一种使程序恢复正常运行的有效手段。
2.4.4 位地址空间
AT89S52单片机的位地址空间共有两部分,分别位于 片内RAM 和 SFR区域 中,共有219个可寻址位,位地址范围为00H~FFH。其中位地址为00H~7FH的这128个位,位于片内RAM 字节地址20H~2FH单元中