STC8A8K64D4教程文档(一)--单片机基础知识
本文介绍了单片机的基础知识,以STC8A8K64D4为例,重点讲解了单片机的寄存器、总线架构、位宽、内存和时钟系统。
单片机概述
- 单片机是将内存、外存、CPU、I/O口,各种片上外设集成在一起的微型计算机。
- 用途广泛,包括各种家电,仪表,电机等工业控制,数字控制系统,电源管理等。
- 优点明显,体积小,功能多,可靠性高,实时性能好。
单片机基础
本教程使用的单片机为宏晶科技的8位微控制器(MCU)-- STC8A8K64D4,是一款基于8051内核的8位单片机,但文章内容大部分是学习单片机所通用的。下面介绍关于单片机的基本内容。
电平
- 单片机系统主要处理的是数字信号,也就是逻辑“0”和逻辑“1”。在电路中,它们分别对应一定范围的低电平和高电平信号。
- 在单片机电路中,输入引脚的电压一般接近 VCC 被认为是高电平,接近 GND 被认为是低电平。但由于输入端内部通常经过施密特触发器,并不会严格以 VCC 和 GND 作为判断标准,而是通过设定上、下两个电压阈值来识别高低电平。
这样做的好处是:即使电源质量较差或信号中存在噪声,也能防止电平在临界点附近频繁跳变,从而提高系统的抗干扰能力和稳定性。 - 这里简单介绍一下施密特触发器的基本原理:
施密特触发器是一种带有滞回特性的比较电路,主要用于将变化缓慢的模拟信号变成稳定的数字信号。其设置了两个电平标准,高于上限认为是高电平,低于下限认为是低电平。电平信号在这个范围中不会跳变,只有高于上限和低于下限会改变电平标准。
寄存器
- 寄存器是CPU与外设之间的桥梁,数据与控制信息传递的通道,主要用于存临时存放数据、地址,控制信息。
- 单片机的操作主要就是对寄存器的操作,访问外设时,寄存器相当于受CPU控制的"存储器和控制单元",当CPU访问外设时,会通过访问寄存器对应的地址来读写数据;向寄存器写入数据,相当于给外设发送控制命令;从寄存器读出数据,则是获取外设的状态或输入信号。通过这种方式,CPU利用寄存器实现了对外设的管理与控制。
- 在该单片机中,寄存器为8位宽的,即一个功能寄存器有8个bit,每个bit或多个bit可以控制一个功能。
- 特殊功能寄存器(SFR)的逻辑地址范围是80H-FFH(对应RAM的高128字节),其地址在单片机头文件中使用sfr语句对应,以下是头文件的部分源码:
sfr P0 = 0x80;
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr S4CON = 0x84;
sfr S4BUF = 0x85;
sfr PCON = 0x87;
- sfr关键字用于定义寄存器端口,sbit用于定义位号,可以通过sbit将寄存器的特定位重命名。
- 由于外设较多,单片机最开始的128字节的SFR已经不够了定义众多的功能寄存器了,于是制造商选择扩展SFR的大小,将这部分的逻辑地址对应到XData区,被称为XFR(拓展特殊功能寄存器)。访问时需要操作P_SW2寄存器的XFR使能位:EAXFR(是该寄存器的B7)。向其写0是禁止访问,1是使能。
内部总线架构
-
控制总线和数据总线分离开来,属于计算机原理的哈佛结构。
-
STC8A8K64D4的内部结构

-
该单片机包括三大总线,地址、数据、控制总线,地址总线,地址总线用于确定CPU访问的目标,所有外设的访问都由总线上分配的逻辑地址确定。数据总线用于协调数据,包括数据从CPU流出和CPU流入。控制总线传递诸如读写控制信号、中断请求信号、总线允许信号、复位信号等,用于协调CPU与外设之间的操作。另外CPU执行计算的时候可能会访问MDU(乘除法运算处理单元)以加速计算,实现高速运算。
单片机的位宽
- 单片机的位宽指CPU可以一次"并行"处理的数据位数,所谓"并行",就是可以同时处理的意思。8位指的就是CPU一次可以同时处理8bit位宽的数据,就是1字节数据。本质上指的是单片机的寄存器,运算器,数据总线的位宽。但不同厂家的工艺和经济考量等,有的多位宽的MCU的寄存器宽度和运算器宽度并不是所有的都是单片机位数所对应的位宽,需要考量。
- 单片机的位宽决定了CPU处理数据量的能力,位宽越大,CPU一次能并行处理的数据位数就越多,运算速度越快,处理精度和效率也越高。这一点是作为用户和开发者都需要注意到的。
- 单片机的位宽同样决定了CPU与外界"交换通道"的宽度,也就是总线宽度,同样对信号完整性和传输速率考量,不是所有的数据总线位宽都是其对应位数。
单片机的内存
- 单片机的内存是其重要的组成单元,这里实际是统称,单片机的内存和计算机一样,分成了运行内存和存储内存。
运行内存
-
运行内存,又叫RAM(),属于易失性存储器,掉电会丢失。在单片机中,这种RAM一般是静态的,又被称为SRAM。这种RAM是使用触发器的方式存储数据,存储数据较稳定,缺点就是容量较小,比不过DRAM。其在单片机内部结构如下:

-
运行内存在51单片机被分为了Data段,IData段,和XData段(主要在STC高性能单片机系列中),这三个部分的实际存储分别是直接访问的内存(128Byte),间接访问的内存(128Byte),和外部拓展的内存(上图中未体现)。
-
Data段主要用于存放经常使用的变量,数据,寄存器组,标志位等。这部分的代码可以直接被访问,对应RAM的低128字节。
-
低 128 字节 RAM 也称通用RAM区。RAM主要用于变量操作和寻址,通用 RAM区又可分为工作寄存器组区,可位寻址区,用户RAM区和堆栈区。工作寄存器组区地址从 00H ~ 1FH 共 32 字节单元,分为 4 组,每一组称为一个寄存器组,每组包含8个8位的工作寄存器,编号均为RO~R7,但属于不同的物理空间。通过使用工作寄存器组,可以提高运算速度。R0~R7 是常用的寄存器,提供 4 组是因为1 组往往不够用。程序状态字 PSW 寄存器中的 RS1 和RSO 组合决定当前使用的工作寄存器组。
-
可位寻址区的地址从 20H~2FH共16个字节单元.20H ~ 2FH单元既可像普通RAM单元一样按字节存取,也可以对单元中的任何一位单独存取,共 128 位,所对应的逻辑位地址范围是 00H~ 7FH。位地址范围是 00H ~ 7FH,内部RAM 低 128 字节的地址也是 00H~7FH,从外表看,二者地址是一样的,实际上二者具有本质的区别;位地址指向的是一个位,而字节地址指向的是一个字节单元,在程序中使用不同的指令区分。可位寻址的寄存器,其地址必需能被8整除才可以。
-
内部 RAM 中的 30H~FFH 单元是用户 RAM 和堆栈区。一个 8 位的堆栈指针(SP),用于指向堆栈区。单片机复位后,堆栈指针 SP 为O7H,指向了工作寄存器组0 中的 R7,因此,用户初始化程序都应对 SP 设置初值,一般设置在 80H 以后的单元为宜。
-
堆栈指针是一个8 位专用寄存器。它指示出堆栈顶部在内部 RAM 块中的位置。系统复位后,SP 初始化为 07H,使得堆栈事实上由 08H 单元开始,考虑 08H~1FH 单元分别属于工作寄存器组 1 ~3,若在程序设计中用到这些区,则最好把 SP 值改变为 80H或更大的值为宜。STC8 系列单片机的堆栈是向上生长的,即将数据压入堆栈后,SP 内容增大。
-
IData段,在 8052 及其兼容系列单片机 中,内部 RAM 扩展为 256 字节,其中高 128 字节(地址范围 80H~FFH)属于 IData 段。这一高区 RAM 在物理上与特殊功能寄存器(SFR)区独立存在,但逻辑地址相同,因此需要通过不同的寻址方式加以区分:使用直接寻址时访问的是 SFR 区,即直接操作寄存器;使用间接寻址时访问的是高128字节RAM。由于这一机制,高128字节RAM只能通过间接寻址方式访问。在未扩展高128字节RAM的单片机(如标准8051)中,IData 段与 Data 段共享相同的地址范围(00H~7FH),但二者访问方式不同(直接/间接),在逻辑上区分,物理存储空间仍为同一块内部RAM。
-
XData 段(External Data Memory Segment) 是 51 单片机中用于存放外部数据存储器(或片上扩展RAM)的一块逻辑空间。它的全称是 External Data Memory,简称 XRAM 或 XData。简单来说,XData 就是单片机用于访问外部或片上扩展数据存储区的数据段。在标准 8051 架构中,XData 空间可达 64KB(0000H~FFFFH),这一部分Ram的特点就是内存大,但速度较慢。主要用于存储较大的数组,或者作为数据缓冲区。对其访问本质上是通过端口寄存器缓存来搬运数据,但是在该单片机上,对XData做操作不会影响P0、P2的端口,以及RD,WR,ALE上的信号状态。特殊功能寄存器的拓展部分
-
这三个Ram段的C语言访问方式如下:
unsigned char data a;//直接访问,如果超过128B会报错
unsigned char idata b;//间接访问,访问的是高128B
unsigned char xdata buf[200];//访问外部XData
存储内存
- 存储内存在单片机内部是以Flash的方式存储的,属于非易失性存储(ROM),掉电不丢失。
- 由于其非易失特性,主要用于存储程序代码,还有常量的存储。
- 复位后会从低地址开始执行。
- Flash的地址如图:

- 单片机复位后,程序计数器(PC)的内容为0000H,从0000H单元开始执行程序。另外中断服务程序的入口地址(中断向量)也位于程序存储器单元。在程序存储器中,每个中断都有一个固定的入口地址,当中断发生并得到响应后,单片机就会自动跳转到相应的中断入口地址去执行程序。由于相邻中断入口地址的间隔区间仅仅有8个字节,一般情况下无法保存完整的中断服务程序,因此在中断响应的地址区域存放一条无条件转移指令,指向真正存放中断服务程序的空间去执行。
时钟系统
- 时钟系统是单片机的“心脏”,为CPU和各外设提供统一的时间基准信号,使整个系统能按节拍、有序地运行,保证CPU的实时性能。
时钟源与系统时钟
-
在STC8A8K64D4单片机上,时钟源有三种,一种是内部低速时钟,一种是内部高速时钟,一种是外部时钟。推荐使用外部时钟,外部晶振的精度普遍为ppm,该时钟相较内部时钟精度相差4个数量等级(百万分之一(ppm)和百分之一(%)),当然时钟源的选择并不是一成不变的,需要根据项目需求决定。
-
该单片机的系统时钟框图如下:

-
时钟源输入之后经过CLKDIV分频之后得到的时钟信号就是系统的时钟,CPU与外设使用的都是这一时钟。
-
本单片机使用外部时钟的寄存器配置方式:
void XOSC_Init()
{
P_SW2 = 0X80; //让P_SW2寄存器的EAXFR使能,用于访问XData中的配置
XOSCCR = 0XF0; //使能外部时钟
while (!(XOSCCR & 0X01));//等待时钟稳定
CLKDIV = 0X00; //时钟不分频
CLKSEL |= 0X01; //选择外部时钟作为系统时钟
P_SW2 = 0X00; //关闭访问XFR
}
周期
包括三种周期,具体介绍如下:
- 时钟周期:
单片机时序的最小单位。
以最终流向单片机系统时钟的时钟信号为准,这个信号的频率的倒数就额是时钟周期。 - 机器周期:
单片机(主要指CPU)完成一次功能的最短时间。
要按厂商标准来,有的高性能51单片机是单时钟周期作为机器周期的(吞吐量:1Mips/MHz,),有的是4个时钟周期计为1机器周期,传统51为12个时钟周期计为1机器周期
STC8A8K64D4为单时钟/机器周期单片机,默认为1T模式,支持12T模式。 - 指令周期:
完成一整个指令所需要的时间。
有的指令需要一个机器周期即可完成,有的需要2个机器周期,甚至更多机器周期,整个指令完成的时间就是指令周期。
更多推荐



所有评论(0)