![单片机原理及应用(第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/989/40680989/b_40680989.jpg)
2.2 STC8A8K64S4A12的增强型8051内核
2.2.1 STC8A8K64S4A12单片机的引脚及功能
STC8A8K64S4A12单片机是宏晶科技推出的新一代单时钟/机器周期(1T)8051单片机,一般不需要外部晶振和外部复位电路即可工作,具有高速、低功耗及超强抗干扰等特点,在相同的工作频率下,STC8系列单片机比传统的8051快约12倍。STC8A8K64S4A12单片机常见的封装形式有LQFP-64和DIP-40。STC8A8K64S4A12单片机的引脚图如图2-9所示。
与标准8051单片机有所不同或者改进的引脚描述如下。
1.复位引脚
STC8A8K64S4A12单片机内部集成MAX810专用复位电路,时钟频率在12 MHz以下时,复位脚可接1 kΩ电阻再接地,也可以使用普通8051的复位电路(参见图2-3)。
2.外接晶体引脚
STC8A8K64S4A12单片机是1时钟周期/机器周期(简称1T)的8051单片机,系统时钟兼容标准的8051单片机。系统时钟有3个时钟源可供选择:内部24 MHz高精度IRC、内部32 kHz的低速IRC、外部4~33 MHz晶振或外部时钟信号。用户可通过程序分别使能和关闭各个时钟源,内部提供时钟分频以达到降低功耗的目的。
利用ISP工具对STC8A8K64S4A12单片机下载用户程序时,可以在选项中设置选择使用外部晶体振荡器时钟或者使用内部R/C振荡器时钟。
3.输入/输出(I/O)及复用功能引脚
STC8A8K64S4A12单片机最多可以有59根I/O口线,这些I/O口线可设置成4种模式:准双向口/弱上拉(标准8051输出口模式)、推挽输出/强上拉、高阻输入(电流既不能流入也不能流出)、开漏输出。复位后,在用户程序的开始部分,应首先根据需要设置单片机I/O口线的工作模式。每根I/O口线驱动能力均可达到20mA,但整个芯片最大不得超过90mA。许多I/O口线具有复用功能,各个I/O口的详细介绍请参阅第3章内容。
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/31_01.jpg?sign=1738798290-PIoKfWMaZL7DzrfWYqM8ntVUGm8GBJFe-0-6d5b0b920bd378b1754d7359599b69f4)
图2-9 STC8A8K64S4A12单片机的引脚图
a)LQFP-64封装引脚图
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/32_01.jpg?sign=1738798290-KsFGfuMSjwEKtHrpzsw3UJooN6r2vt0A-0-6074ccd5b41934d9381b6134e2b2f17a)
图2-9 STC8A8K64S4A12单片机的引脚图(续)
b)LIP-40封装引脚图
2.2.2 STC8A8K64S4A12单片机的增强型8051内核
标准8051的一个机器周期是12个时钟周期,STC8A8K64S4A12单片机是1时钟周期/机器周期(简称1T)的8051单片机,在同样的外部时钟频率下执行同样的代码,其指令执行速度要比标准8051单片机快约12倍。执行指令时序图如图2-10所示。标准8051单片机把1个振荡周期(也就是时钟周期)定义为1拍,1个节拍用1P表示,1拍是单片机执行指令可识别的最小时间单位。2拍定义为一个状态周期,1个状态周期用1S表示,分别称为S1~S6。1个状态周期的时间等于振荡周期的2倍。6个状态周期定义为1个机器周期,机器周期是为单片机完成1条指令而划分的可数的时间单位,由12个振荡周期构成,分别为S1P1、S1P2、…、S6P1和S6P2。完成1条指令的时间总是等于1个或几个机器周期。
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/33_01.jpg?sign=1738798290-SSXWTFjnDNzidwoyEDVfAOZammaTZFtz-0-8b62bf88d92b25f480815bf213fce157)
图2-10 指令执行时序图
STC8A8K64S4A12单片机的机器周期由1个时钟周期构成,也就是说,一个时钟周期就是一个机器周期,这样当用户在较低的外部时钟频率下运行时,与标准8051内核相比,不仅降低了系统噪声和电源功耗,而且提高了处理能力。
STC8A8K64S4A12单片机的内部结构框图如图2-11所示。
除了执行指令速度提高以外,由图 2-11可以看出,与标准 8051单片机相比,STC8A8K64S4A12单片机在标准8051单片机的基础上增加了如下资源。
1.集成了程序Flash存储器
程序Flash存储器用于存放用户程序、数据和表格等信息。STC8A8K64S4A12单片机集成了64 KB的程序Flash存储器,地址为0000H~FFFFH,支持ISP/IAP,并且支持用户配置成EEPROM,大小可变,512字节单页擦除,擦写次数可达10万次以上,提高了使用的灵活性和方便性。由于STC8A8K64S4A12单片机已经集成了8051单片机可以寻址的最大程序空间,因此,该单片机没有提供访问外部程序存储器的总线,不能访问外部程序存储器。64 KB的程序空间对于一般的应用已经足够,不需要用户进行程序存储器扩展。STC8A8K64S4A12单片机集成的中断资源较多,因此,从0003H开始的中断向量也比标准8051单片机多。
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/34_01.jpg?sign=1738798290-FZNTgyHAKoMAewu0mNxYPM58yAwMpr45-0-5934d7ec6f6ed495b3fdd1c00991b345)
图2-11 STC8A8K64S4A12单片机的内部结构框图
2.数据存储器
数据存储器也称为随机存取数据存储器,可用于存放程序执行的中间结果和过程数据。STC8A8K64S4A12单片机的数据存储器在物理和逻辑上都分为两个地址空间:内部256字节RAM(这部分和8052单片机相同)和内部8192字节的扩展RAM。
其中,内部RAM的高128字节的数据存储器与特殊功能寄存器(SFRs)地址重叠,实际使用时通过不同的寻址方式加以区分。
STC8A8K64S4A12单片机集成的8192字节扩展RAM如图2-12所示。访问内部扩展RAM的方法和传统8051单片机访问外部扩展RAM的方法相同,但是不影响P 0口(数据总线和低8位地址总线)、P2口(高8位地址总线)以及RD、WR和ALE等端口上的信号。
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/34_02.jpg?sign=1738798290-Rw6aTNgmOXrIA7JN7zKFb1BEpxu1eOGQ-0-d2c536b677aba778b18df017276ac87e)
图2-12 STC8A8K64S4A12单片机集成的8192字节扩展RAM
在汇编语言中,内部扩展RAM可以通过以下MOVX指令访问:
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/35_01.jpg?sign=1738798290-HU9kn8vtlnIojNdpXgU41CbvP1rLEbOh-0-8c7ea1e13992ee84fd90dd21357b1183)
在C语言中,可使用xdata/pdata声明存储类型即可,如:
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/35_02.jpg?sign=1738798290-YqbCMLj7Txia4syxhIkmQK7moQXb1MY2-0-8663892084a36dd6e55027a4aa5f101e)
其中,pdata即为xdata的低256字节,在C语言中定义变量为pdata类型后,编译器会自动将变量分配在XDATA的0000H~00FFH区域,并使用MOVX@Ri,A和MOVX A@Ri进行访问。xdata关键字更加常用。
单片机内部扩展RAM是否可以访问,由辅助寄存器AUXR中的EXTRAM位控制。AUXR1的各位定义如下:
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/35_03.jpg?sign=1738798290-zDNxze8B46FqnE3CT30ikxl11FjN9QX2-0-0a449a6220f9e383af93a04d3240b60c)
其中,EXTRAM是扩展RAM访问控制位,EXTRAM=0时访问内部扩展RAM,当访问地址超出内部扩展RAM的地址时,系统会自动切换到外部扩展RAM。EXTRAM=1时访问外部扩展RAM,内部扩展RAM被禁用。
STC8A8K64S4A12单片机内部集成的8192字节扩展RAM对于一般应用都能满足要求,一般不再需要外部扩展RAM,这大大简化了应用系统的设计。如果确实需要外部扩展RAM,则可以使用总线进行扩展。STC8A8K64S4A12封装引脚数为40及其以上的单片机具有扩展64 KB外部数据存储器的能力。访问外部数据存储器期间,WR/RD/ALE信号要有效。STC8A8K64S4A12新增了一个控制外部64 KB字节数据总线速度的特殊功能寄存器BUS_SPEED。BUS_SPEED(总线速度控制寄存器)各位定义如下:
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/35_04.jpg?sign=1738798290-cUr5TWKrxx7FMHheaOFwNkM7zv6qdiB6-0-69aacd943441d73844f03c1d71385a5f)
1)RW_S[1:0]:RD/WR控制线选择位。为00时P4.4为RD,P4.3为WR;为01时P3.7为RD,P3.6为WR;为10时P4.2为RD,P4.0为WR;为11时表示保留。
2)SPEED[1:0]:总线读写速度控制(读写数据时控制信号和数据信号的准备时间和保持时间)。00表示1个时钟;01表示2个时钟;10表示4个时钟;11表示8个时钟。
3)增加了I/O口数量。STC8A8K64S4A12单片机除了包含标准8051单片机的P0~P3口外,还扩展集成了P4~P7口。许多I/O口具有复用功能。
4)增加了定时/计数器数量。STC8A8K64S4A12单片机除了包含标准8051单片机的定时/计数器T0和T1外,还扩展集成了定时/计数器T2、T3和T4。
5)增加了异步串行通信接口数量。STC8A8K64S4A12单片机除了包含标准8051单片机的异步串行接口(简称串口,在STC8A8K64S4A12单片机中称为串口1)外,还扩展集成了串口2、串口3和串口4。
6)增加了SPI和I2C接口。
7)增加了可编程计数器阵列(PCA)模块。
8)增加了A/D转换器(ADC)模块。
除了上述模块以外,还增加了看门狗、内部复位逻辑、内部RC振荡器、掉电唤醒专用定时器等模块。
和标准8051单片机相比,STC8A8K64S4A12单片机集成了更多的外设资源。因此,特殊功能寄存器也较多。STC8A8K64S4A12单片机的特殊功能寄存器及其在单片机复位时的值(简称复位值)见表2-3和表2-4,详细的使用方法在后面的章节中介绍。
表2-3 STC8A8K64S4A12单片机的特殊功能寄存器及其在单片机复位时的值
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/36_01.jpg?sign=1738798290-8cHhs1fwppx1Rm1Uj8B1G3rxHGGZO7Vv-0-375d5ebcd10e785c60811b2ca44548dc)
(续)
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/37_01.jpg?sign=1738798290-CYPP7rT8uMwXaUQBYPWt7o1joJkcobFy-0-ddd5f657003295d32ec0aba2a0a24b09)
(续)
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/38_01.jpg?sign=1738798290-2jsQn61q8bV74JtTlJcGlhtxLEOw6eG1-0-996104a7b43bc21e97b61d758b326fd3)
(续)
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/39_01.jpg?sign=1738798290-LKyYDVPYPCL2WdoewREsJR6DlxSrvvMw-0-4002c80a0acc5c93be89c8625fdba66d)
表2-4为扩展特殊寄存器(扩展SFR),逻辑地址位于XDATA区域,访问前需要将P_SW2寄存器的最高位(EAXFR)置“1”,然后使用MOVX A,@DPTR和MOVX @DPTR,A指令进行访问。
表2-4 STC8A8K64S4A12单片机的扩展特殊功能寄存器及其在单片机复位时的值
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/39_02.jpg?sign=1738798290-2ZUZpdCQl67ehP03PlBFUl7OPXlRxjgn-0-fe373baab020c4687667791ba9278f21)
(续)
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/40_01.jpg?sign=1738798290-vj1G2iLi9NXuhCjEdVy8xC0WHGQveaFW-0-636e85ab9c5f056b434c0ec17f2d5dfe)
(续)
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/41_01.jpg?sign=1738798290-i35mt5l0t4aCdOOLEsfiBnoJec61TbBb-0-6506e291e5463e7052b6c2e417a91a19)
(续)
![](https://epubservercos.yuewen.com/3CCCBD/21122066408961206/epubprivate/OEBPS/Images/42_01.jpg?sign=1738798290-WtAIIk6zoOf0w4JpqjhMfEVbzxtvH65d-0-5092e002d943e86c1bc41387c608fe43)
注:“x”表示该位的值不确定。
对于新增加的特殊功能寄存器,需要进行声明然后才能使用。例如:使用串口2控制寄存器S2CON前,在汇编语言程序中,使用S2CON DATA 9AH或者S2CON EQU 9AH进行定义。
在C语言中,可以使用 sfr S2CON = 0x9a;进行声明。
为了便于使用,本书将所有的特殊功能寄存器的汇编语言格式定义存放在文件STC8. INC中,将对应C语言格式的定义存放在文件stc8. h中,读者可以从本书的课程网站(http://course. sdu. edu. cn/mcu. html)中下载使用。