这里是 单片微型计算机原理及接口技术 的第二章知识点
单片机硬件结构(STC15)
STC15单片机硬件组成
复习·单片机基本组成
单片微型计算机主要由微处理器CPU、存储器、I/O接口和总线组成,各部件通过总线相连,外部设备必须通过I/O接口电路才能连到CPU。
CPU是单片机的核心,它根据指令提供的控制命令,控制CPU与存储器或I/O设备之间交换数据、进行算术和逻辑运算、控制程序流向等。
存储器是用来存放数据和指令的单元。存储单元中存放的信息称为存储单元的内容。每个单元可存8位(1字节)的二进制信息。每个单元有1个存储器地址。例如:
$16$根地址线$A_{15} \tilde~ A_0$,可表示的地址范围为$ 2^{16} = 65536 $个单元,地址编号为$0000 \tilde~ FFFFH$
计量单位在上一篇博客中有写
I/O接口电路是主机和外设间的桥梁,提供数据缓冲驱动、信号电平转换、信息转换、地址译码、定时控制等各种功能。
单片机的存储器中有一组称为I/O端口的特殊功能寄存器,CPU可通过这些寄存器实现对I/O口的控制。
CPU和各I/O接口芯片的连接,单片机内部各部件间的数据传送和通信,及单片机与外部设备间的连接,都要通过总线(Bus)来实现。
地址总线用于传送地址信息,单向,从CPU指向存储器或I/O。地址总线数目决定了CPU能直接寻址的范围。
数据总线用于传送数据信号,双向,可读可写。8位机一次可并行传送8位数据,16位机则可传送16位数据。
控制总线用于CPU对存储器、外围芯片和I/O接口的控制以及它们对CPU的应答、请求等。
STC
STC系列单片机是深圳宏晶科技公司研发的具有独立自主知识产权的增强型8051内核单片机。
采用了基于Flash的在系统编程(ISP)技术,不需要仿真器或专用编程器就可进行单片机应用系统的开发。
单片机应用选型时,应选择单片机内部资源尽可能满足控制系统的要求,
减少外部接口电路,同时遵循片内资源“够用”原则,保证高可靠性和高性价比。
STC15系列单片机是增强型高速8051CPU核单片机。
每个机器周期只有1个系统时钟,速度比普通的8051快8~12倍。
具有2.4~5.5V的宽工作电压和超低功耗。
可工作在掉电,空闲和低速的低功耗模式。
具备超强抗干扰能力,且采用第八代加密技术。
STC单片机可直接替换世界各公司的8051/52的兼容机型产品。
是一款高性能、高可靠性且价格低廉的机型。
(1)8位微处理器(CPU)。
(2)58KB片内Flash程序存储器。
(3) 4KB片内的RAM数据存储器,包括256字节常规RAM和3840字节内部扩展的XRAM。
(4)可直接采用USB可在线编程(ISP)/在应用可编程(IAP)。
(5)8通道的高速10位ADC。
(6)6通道15位高精度PWM波形发生器。
(7)7个16位硬件定时器:5个可编程计数/定时器,2路CCP可实现2个定时器。
(8)硬件看门狗(WDT),避免CPU由于干扰而陷入死循环或跑飞状态。
(9)高速SPI串行通信接口,可用作主模式/从模式。
(10)4个全双工异步串行口(UART)。
(11)P0~P7,最多62个I/O口,可设置4种工作模式。
(12)比较器可作为1路ADC使用。
(13)内部高可靠复位。
(14)内部5~35MHz高精度R/C时钟。
(15)低功耗掉电唤醒专用定时器。
CPU
CPU即中央处理器的简称,是单片机的核心部件。由运算器和控制器构成。CPU读取并译码分析每条指令,根据指令的功能控制单片机各功能部件执行指定的运算或操作。
运算器
运算器对操作数进行算术与逻辑运算、位变量处理与传送等操作。
运算器的组成部分主要包括算术逻辑运算单元ALU、累加器A、寄存器B、位处理器、程序状态字寄存器PSW及两个暂存器TMP1、TMP2等。
算术逻辑运算单元ALU
ALU功能极强。
与、或、异或、循环、求补和清零等逻辑运算;
加、减、乘、除算术运算;
位操作功能,如置“1”、清“0”、求补、测试转移及“与”、“或”等;
累加器A
位于片内的特殊功能寄存器区,用于向ALU提供操作数和存放运算结果。
数据传送大多都通过累加器A,A相当于数据的中转站,是CPU中使用最频繁的寄存器。
在对累加器的直接寻址和位寻址中,累加器需写为Acc。
寄存器B
专门为乘法和除法运算设置,用于存放乘法和除法运算的操作数和运算结果。
乘法: A*B → B,A
除法: A ÷ B → A … B
对于其他指令,可作为普通寄存器使用。
程序状态字寄存器PSW
位于片内特殊功能寄存器区。
用于保存ALU运算结果的特征和处理状态。
有些位状态是根据指令执行结果由硬件自动完成设置的。
有些状态位必须通过软件方法设定。
这些特征和状态可作为控制程序转移的条件,供程序查询和判断。
$PSW$字节地址为$ D_0 \; _H $,可位寻址,位地址为$ D_0 \; _H \tilde~ D_7 \; _H $。
D7H | D6H | D5H | D4H | D3H | D2H | D1H | D0H |
---|---|---|---|---|---|---|---|
CY | AC | F0 | RS1 | RS0 | OV | F1 | P |
Cy:
进位标志位,可写为C。
在算术和逻辑运算时,若有进位/借位,Cy=1;否则,Cy=0。
在位处理器中,它是位累加器。
Ac:
辅助进位标志位。在BCD码运算时,Ac用作十进位调整。
当D3位向D4位产生进位或借位时,Ac=1;否则,Ac=0。
F0、F1:
用户设定标志位。
可用指令来使它置1或清0,控制程序的流向。
RS1、RS0:
4组工作寄存器区选择。
RS1、RS0选择片内RAM区中的4组工作寄存器区中的某一组为当前工作寄存区。
每组由8个通用寄存器(R0~R7)组成。
RS1 | RS0 | 所选区 | 地址 |
---|---|---|---|
0 | 0 | 0区 | 内部RAM地址 $ 00 \; _H ~07 \; _H $ |
0 | 1 | 1区 | 内部RAM地址 $ 08 \; _H ~0F \; _H $ |
1 | 0 | 2区 | 内部RAM地址 $ 10 \; _H ~17 \; _H $ |
1 | 1 | 3区 | 内部RAM地址 $ 18 \; _H ~1F \; _H $ |
OV:
溢出标志位。
有溢出,OV=1;否则,OV=0。
在带符号的加减运算中,表示运算结果超出了累加器A能表示的有效范围(-128~+127),即运算结果是错误的。
无符号数乘法若乘积超过了255也会溢出。
除法运算中,当除数为0,OV=1。
P:奇偶标志位。
如果累加器A中“1”的个数是奇数,P=1;是偶数,P=0。
在具有奇偶检验的串行通信中,常用P来检验数据传输的可靠性。
控制器
控制指令的读取、译码和执行。
根据指令的性质对各部件进行定时和逻辑控制,使各部件自动协调工作。
由程序计数器PC、指令寄存器、指令译码器、定时及控制逻辑电路组成。
指令寄存器保存当前正在执行的指令。
指令内容包含操作码和操作数两部分,操作码送指令译码器,形成相应指令的微操作信号。
定时与控制电路控制取指令、执行指令、存取操作数或运算结果等操作。
向其他部件发出微操作信号,协调各部分完成指令指定的工作任务。
程序计数器PC
是一个不可访问的$16$位计数器。
单片机复位时,PC=$0000_H$
存放的是下一条待取指令的地址 每取一个指令字节,PC自动加$1$。
PC的内容变化轨迹决定程序流程。
顺序执行程序时PC自动加$1$。
执行转移、调用、中断时,硬件自动将PC的内容改成转移目的地址。
PC的计数宽度决定了程序存储器的地址范围。
PC为$16$位,故可对$64KB(2^{16}B)$寻址。
存储结构
存储器是单片机的重要组成部分,用来存放程序及待处理的数据和处理后的结果。
单片机的存储器容量越大,其性能就越好。
存储器可分为RAM和ROM。
RAM(Random Access Memory)
即随机存取存储器,可随机地写入和读出,访问速度快,但断电后内容会全部丢失,即具有易失性。
SRAM(Static RAM)用2管或6管构成基本存储单元,电路结构复杂,集成度较低,功耗也大,但存取速度很快,访问时间可小于10ns。SRAM主要用作高速缓存(Cache),并用于网络服务器、路由器和交换机等高速网络设施上。
DRAM(Dynamic RAM)利用电容的充放电来存储信息,电路简单,但存取速度慢,电容上存储的信息会丢失,需要定期刷新。DRAM容量大,价格便宜,通常做成内存条,便于扩充内存容量。
ROM(Read-Only Memory)
即只读存储器,改写要用专门的编程器。不会因断电而丢失内容,属于非易失性存储器。用于存放监控程序和仪器配置参数等。
掩膜ROM在制造时就把程序和数据直接制作进去,不可改写。
PROM采用熔断技术制作,不能二次编程。
EPROM采用紫外光照射擦除芯片内容,可用编程器多次写入。
EEPROM可用TTL电平写入和擦除,不需编程器和擦除器。
Flash Memory称为闪存,抗干扰能力强,能在线进行快速电擦除,编程速度比EPROM和EEPROM快,价格已低于DRAM,容量则接近于DRAM。
IAP15W4K58单片机的存储结构
IAP15W4K58单片机将程序存储器和数据存储器分开编址。有各自的访问指令。
存储器空间在物理上可分为3个相互独立的部分:程序存储器(程序Flash)、片内基本RAM、片内扩展RAM。
在使用上可分为4个部分:程序存储器(程序Flash)、片内基本RAM、片内扩展RAM和EEPROM(数据Flash)。
数据Flash与程序Flash共用一个存储空间。
IAP15W4K58单片机的程序存储器(程序Flash)
用于存放程序和表格之类的固定信息。
在程序运行过程中,只能读取,不能修改。
片内集成了$58KB$的程序Flash存储器,地址为$0000_H~E7FF_H$。单片机的地址线为$16$位,可片外扩展至$64KB$程序存储器。
程序存储器中有些固定单元用于复位及中断服务程序入口地址。
(1)0000H单元。
单片机复位后,PC=0000H,程序从地址0000H处开始执行。
一般在0000H单元存放一条跳转指令,转向主程序的入口地址。
(2)0003H~00BFH单元。
用做存放24个中断源的中断服务程序,每个中断源固定分配8个单元。
8个单元的首地址,即中断服务程序的入口地址,称作中断向量。
通常在中断向量处放一条跳转指令,使中断时跳向实际中断服务子程序。
中断服务程序很短时,才直接存放在分配的中断向量处。
IAP15W4K58单片机的片内基本RAM
数据存储器由RAM组成,分片内与片外。
片内RAM为4KB,分为256B基本RAM和3840B扩展XRAM。
基本RAM字节地址为$00_H~FF_H$。分为低128B、高128B和SFR。
SFR地址为$80_H~FF_H$,与片内高128B单元统一编址,但在物理上完全独立。
低128字节
分为工作寄存器区、位寻址区和通用RAM区。
工作寄存器区($00_H~1F_H$)
前32个单元$00_H~1F_H$是4组通用工作寄存器区,每组由$8$个通用寄存器($R0~R7$)组成。
可通过设置PSW中RS1、RS0的值选择当前的工作寄存器组。
上电复位时,默认选中第$0$组寄存器。
从某一工作寄存器组切换到另一工作寄存器组时,原寄存器组中各寄存器的内容相当于被屏蔽,可以方便地完成快速现场保护任务。
位寻址区
$20_H~2F_H$的$16$个单元,可按位寻址操作。
位寻址区共计$128$位,位地址为$00_H~7F_H$
位地址也可用字节地址加位号表示。
如位地址$03_H$,也可表示为$20H.3$。
通用RAM区
$30_H~7F_H$的$80$个数据单元为用户RAM区,
只能字节寻址,通常在应用中也把堆栈开辟在这段区域。
高128字节
$80_H~FF_H$为通用存储区域。
只能采用间接寻址。
地址$00_H~7F_H$的低$128B$ RAM区,即可直接寻址也可间接寻址。
特殊功能寄存器
SFR存放控制命令、状态或数据,反映单片机内部的工作状态及工作方式。
除PC外,还有86个特殊功能寄存器,地址为$80_H~FF_H$。
SFR与片内高$128B$的字节地址重合,但它们是两个不同的物理区域。
对SFR访问只能采用直接寻址。
有$14$个SFR可位寻址,其字节地址能被$8$整除。
位地址为字节地址加位号,常用位功能符号表示。如PSW中的CY、AC等。
IAP15W4K58单片机的扩展RAM(XRAM)
片内扩展RAM有3840B,地址范围为0000H~0EFFH。
采用访问片外RAM访问指令MOVX。
与片外RAM不能并存,可通过AUXR的EXTRAM位进行选择。
EXTRAM=0,允许访问XRAM,超过XRAM地址时,指向片外扩展RAM;
EXTRAM=1,禁止访问XRAM,指向片外扩展RAM地址。
片外扩展RAM访问速度慢,且要占用ALE、P0、P2、/RD及/WR,不推荐扩展片外RAM。
IAP15W4K58单片机的EEPROM(数据Flash)
程序Flash和数据Flash在物理上地址空间独立,使用上统一编址。
可直接对程序存储器操作,不用的程序Flash可用作数据Flash。
数据Flash理论上为58KB,地址为0000H~E7FFH。
数据Flash作为EEPROM,存放需要经常修改,掉电后又能保存的参数。
EEPROM的操作可通过IAP技术实现。
指针
(1)堆栈指针SP
在内存中开辟的一个特定数据区域。
遵循“先入后出,后入先出”的原则存取。
用作存放需暂时保存的数据,如调用子程序时的返回地址、中断处理时的断点及现场信息等。
只能设在片内RAM区, SP指示栈顶在RAM中的位置。
堆栈结构—般为向上生长型。
入栈时,SP先加1,数据再压入SP指向的存储单元。
出站时,先将SP指向单元的数据弹出到指定的寄存器或存储单元,SP再减1。
复位后,SP=07H,使堆栈从08H单元开始,由于08H单元是工作寄存器区,复位后应把SP值改置为60H或更大的值,避免冲突。
(2)数据指针DPTR
DPTR由高位DPH和低位DPL组成。
可作为一个16位寄存器来用。
也可作为两个独立的8位寄存器DPH和DPL来用。
在访问外部数据存储器时既可存放16位地址,也可作地址指针使用。
并行I/O
IAP15W4K58单片机各I/O口引脚功能
IAP15W4K58单片机各I/O口工作模式
所有I/O口可由软件设置成4种工作模式之一。
PnM1[7:0] | PnM0[7:0] | I/O口工作模式 |
---|---|---|
0 | 0 | 准双向口(传统8051的I/O模式):灌电流达20mA,拉电流为150~270uA |
0 | 1 | 推挽输出:强上拉输出可达20mA,要外接限流电阻 |
1 | 0 | 高阻输入 |
1 | 1 | 开漏:内部上拉电阻断开,要外接上拉电阻。既可读外部状态也可对外部输出 |
例如,P0M1和P0M0用于设定P0口的工作模式,其中P0M1.i和P0M0.i用于设置P0.i(i=0~7)的工作模式。
假设
则P0.7为开漏,P0.6为推挽输出,P0.5为高阻输入,P0.4~P0.0为准双向口。
I/O口的使用注意事项
一、I/O口驱动发光二极管
弱上拉驱动
采用准双向口模式,用灌电流驱动发光二极管,如图所示。
限流电阻尽量大于1K,不小于470Ω。
推挽输出驱动
采用推挽输出模式,用拉电流驱动发光二极管,如图所示。
二、使复位时I/O口输出为低电平
上电复位时,普通I/O口为弱上拉/高电平输出。
实际应用中有时要求某些I/O口输出为低电平,可在I/O输出端加驱动电路。
在I/O口加下拉电阻,上电复位时,由于内部上拉能力有限,而外部下拉电阻又小,无法拉为高电平,所以该I/O口输出为低。
如果要将此I/O口驱动为高,可设置为推挽输出。
实际应用时,常串一个大于470Ω的限流电阻。
三、专用PWM模块相关I/O口
上电后所有与PWM相关的IO(P0.6/P0.7/P1.6/P1.7/P2.1/P2.2/P2.3/P2.7/
P3.7/P4.2/P4.4/P4.5)均为高阻态,需设置为准双向口或强推挽模式。
四、P1.7/XTAL1与P1.6/XTAL2
当P1.7/XTAL1与P1.6/XTAL2用作XTAL1与XTAL2时,复位后的模式是高阻输入。
时钟和复位
单片机的时钟
时钟电路产生单片机工作时所必需的控制信号。
在时钟信号的控制下,单片机严格按时序执行指令。
执行指令:
CPU先到程序存储器中取出需要执行的指令码;
译码;
由时序电路产生一系列控制信号完成指令所规定的操作。
时钟频率直接影响单片机的速度。
常用的时钟电路有两种:一种是内部时钟方式,另一种是外部时钟方式。 STC15单片机的主时钟:
(1)内部高精度R/C时钟
时钟频率为5~35MHz。
ISP下载用户程序时,需在硬件选项中勾选“选择使用内部IRC时钟(不选为外部时钟)”,并在“输入用户程序运行时的IRC频率”下拉列表框中选择IRC频率值,或直接输入IRC频率值。
(2)外部时钟
常用于多片单片机同时工作,以便于单片机之间的同步。
XTAL1与XTAL2引脚外接晶体振荡器产生时钟。
时钟信号的频率取决于晶振的频率。
STC15单片机的时钟频率最大可达35MHz,通常选择石英晶振为24MHz。
或直接从XTAL1引脚接入外部时钟源,XTAL2端悬空。
时钟信号的输出
主时钟$f_{OSC}$要分频后,转为系统时钟$f_{SYS}$,再提供给CPU和内部接口。
时钟分频寄存器CLK_DIV,字节地址为97H,不可位寻址,复位初值为00H。
CLKS2、CLKS1、CLKS0决定分频系数
CLKS2 | CLKS1 | CLKS0 | 系统时钟 $ f_{SYS} $ |
---|---|---|---|
0 | 0 | 0 | 主时钟 $f_{OSC}$ |
0 | 0 | 1 | 主时钟 $\frac{f_{OSC}}{2}$ |
0 | 1 | 0 | 主时钟 $\frac{f_{OSC}}{4}$ |
0 | 1 | 1 | 主时钟 $\frac{f_{OSC}}{8}$ |
1 | 0 | 0 | 主时钟 $\frac{f_{OSC}}{16}$ |
1 | 0 | 1 | 主时钟 $\frac{f_{OSC}}{32}$ |
1 | 1 | 0 | 主时钟 $\frac{f_{OSC}}{64}$ |
1 | 1 | 1 | 主时钟 $\frac{f_{OSC}}{128}$ |
机器周期、指令周期与指令时序
(1)时钟周期
是时钟控制信号的基本时间单位。
若系统时钟频率为fSYS,则时钟周期TSYS=1/fSYS。如fSYS=12MHz,TSYS=83.3ns。
(2)机器周期
CPU完成一个基本操作所需的时间。
机器周期包括12个时钟周期:S1P1、S1P2、S2P1、S2P2、…、S6P2。
STC15单片机为1T型,每个机器周期只有1个系统时钟,速度比普通的8051快8~12倍。
(3)指令周期
是执行一条指令所需的时间。
单字节和双字节指令一般为单机器周期和双机器周期;
三字节指令都是双机器周期;
乘、除指令占用4个机器周期。
单片机的复位
复位是单片机的初始化操作。
当程序出错(如程序跑飞)或操作错误使系统处于死锁状态时,要通过复位使单片机摆脱“跑飞”或“死锁”状态而重新启动程序。
单片机复位时,PC=0000H,SP=07H,P0~P7=FFH。
除专用电路复位外,STC单片机还有6种复位模式。
掉电/上电复位
当电源低于掉电/上电复位门槛电压时,所有的逻辑电路都会复位。
当电源电压上升至门槛电压后,延迟32768个时钟,掉电/上电复位结束。
5V单片机,复位门槛电压为3.2V;3.3V单片机,门槛电压为1.8V。
软件复位
IAP_CONTR寄存器可实现软复位,字节地址为C7H,不可位寻址。
SWBS:复位程序启动区控制。
SWBS=0,从用户区启动;SWBS=1,从ISP监控区启动。
SWRST:软件复位控制。
SWRST=0,不操作;SWRST=1,产生软件复位。
例:
MOV IAP_CONTR,#00100000B;软复位,从用户程序区0000H开始执行。
MOV IAP_CONTR,#01100000B;软复位,从ISP监控程序区开始执行。
看门狗复位
采用“看门狗”技术,可使系统摆脱失控状态,重新从0000H处执行。
看门狗技术使用看门狗定时器WDT对系统时钟不断计数,监视程序运行。
一旦WDT计数溢出,看门狗会强迫CPU复位,使系统重新从0000H处执行。
看门狗启动运行后,为防止不必要溢出而引起非正常复位,必须周期性地复位WDT以保证不溢出,表示程序还在正常运行。
程序地址非法复位
PC指向的地址超出有效程序空间的大小,会引起程序地址非法复位。
内部低压检测复位
当电源电压低于内部检测门槛电压LVD时,若在ISP编程时选择了“允许低压复位(禁止低压中断)”,可产生复位。
STC15单片机内置了8级可选内部低压检测门槛电压。
外部RST引脚复位
从外部向RST引脚施加一定宽度的复位脉冲,从而实现复位。
P5.4可在ISP编程时配置为复位管脚RST,将RST拉高并维持至少24个时
钟加20us后,单片机进入复位状态。
复位电路常采用上电复位和按钮复位两种。
单片机的复位速度比外部I/O接口快。
为保证系统可靠复位,在初始化程序段应安排复位延迟时间。