微机原理及应用->STC25F2K60S2单片机增强型8051内核

基本概念

上拉电阻:Vcc处接电阻
下拉电阻:地极加个电阻

增强型8051

本章英文符号

SFR=special function register
SP=stack pointer 堆栈指针
DPTR=Data pointer register数据指针寄存器
GPIO=General Purpose Input/Output
IAP:在应用编程=In application
programming
ISP:在系统编程=In System Programming
osc=振荡器oscillator
SWRST:Software Rest软件复位
LVD:低电压指令 Low Voltge Detector

历史

功能概述

在这里插入图片描述
在这里插入图片描述

·增强型8051CPU,单时钟机器周期;
传统12个时钟周期构成一个机器周期,并且时钟兆数得到了提升

·在线可编程/在应用可编程(ISP/IAP)功能
在线
在应用:远程工作中编程,版本更新更方便
OTP一次性编程

·60KB Flash程序储存器;1KB数据Flash;2048(256+1792)(2K)字节SRAM

·最多42根I/O端口线

·3个16位定时/计数器
计数器:分时运行

·1个高速同步通信端口(SPI)
SPI做系统扩展用

·两个全双工UART串口
UART串行通行口,异步通讯

·8通道高速10位ADC:直接处理模拟信号

·3通道捕获/比较单元(PWN/PCA/CCP)
捕获外部跳变,与定时器也有关系,测试脉宽PWM(能量变换,整流的核心)

·内部高可靠上电复位电路和硬件看门狗

·内部集成高精度R/C时钟,常温工作时,可以省去外部晶振电路
时钟:原本需要外部晶振,外部振荡器,R/C时钟,没法集成大电容电感

每一个I/O口以8为单元,八条线作为一个端口,最大型号是68管脚,8X8,64条I/O口线

P0地址数据总线
TxD_2
T是发送口
XTAL1是晶体输入角,晶体振荡器准确度,R/C振荡器,温漂

振荡器有源部分集成内部,构成正反馈的电路,外接晶振不再是必不可少的,精度不高就可以只用内部的R/C

ALE现在很多单片机没有了,因为当时存储器太小,需要给一个扩展,节省I/O的代价就是需要增加外部电路

P0,现在已经不做扩展运用了,地址线16位,最大寻址64K

不同型号的单片机CPU是不变的,存储器会变,封装形式会变,引脚数量会变,环境适用性会变
汽车发动机高温控制ECU

CPU结构

运算器

8位ALU
可以一次对一个位

累加器ACC
寄存器B
为运算专设的辅助寄存器
暂存器TMP1和TMP2
程序状态标志寄存器PSW
在这里插入图片描述
CY进位标志位
AC辅助进位标志
F0用户标志0
RS1、RS.工作寄存器选择
OV
F1
P
布尔处理器

控制器

IR指令寄存器(不可见)
ID译码器
定时控制逻辑
DPTR地址指针
PC程序计数器
SP堆栈指针
RAM地址寄存器
16位地址缓冲器
CS:IP和PC都是指向指令

很多目的寄存器是累加器

存储结构

STC15F2K60S2单片机存储器结构的主
要特点是程序存储器与数据存储器是
开编址
的。

STC15F2K60S2单片机内部在物理上有
4个相互独立的存储器空间:程序存储器
程序Flash)、片内基本RAM、片内扩
展RAM与EEPROM(数据Flash)。

在这里插入图片描述
P可编程,E可擦除,EE是电可擦除

程序存储器(程序Flash)

功能:存放用户程序、数据和表格等信息。
空间大小: STC15F2K60S2片内集成了60KB的 程序Flash存储器,地址为0000H ∼ F 000 H \sim \mathrm{F} 000 \mathrm{H}F000H
> 0000 H , >0000 \mathrm{H},>0000H, 单片机复位后, 程序计数器PC的内容 为0000H,从0000H单元开始执行程序。
> 0003 H ∼ 00 A 3 H , >0003 \mathrm{H} \sim 00 \mathrm{A} 3 \mathrm{H},>0003H00A3H, 中断响应的入口地址 ( 中断向量地址) ,对应于21个中断源。
注意复位和中断入口地址与8086CPU的差异!!
8086的入口是CS:IP=FFFF:0,8086的中断入口可以定义,但是中断号是固定的。

LJMP是跳转
正式程序不可能从0000开始存放,只能在0000H单元使用无条件跳转指令。
定时器0中断服务子程序

ORG  0000H
LJMP  MAIN
		·
		·
ORG 0030H 
TIMEO: MOV SP, #30H

主程序实际从0030H开始存放,复位后, 通过 跳转指令LJMP转移至0030H开始执行。

ORG  000BH
LJMP  TIMEO
		·
		·
ORG 1000 1000H 
TIMEO: MOV SP, #30H

定时器0中断服务子程序实际从1000H开始存放,开始执行。CPU响应后在000BH通过跳转指令LJMP转移至1000H开始执行。

8086根据中断号来找中断服务程序。
0030传统51够用,内部中断源比较少,新的半导体厂商获得授权以后,增添了许多东西。

举例

中断源入口地址
外部中断00003H
定时/计数器0溢出000BH
外部中断10013H
定时/计数器1溢出001BH
串行通信口0023H

**每个中断向量的间隔是8字节。**不同机型的中断源不同,安排的入口地址不同。串行通信即一行行执行。
8086是相隔4字节。

由于相邻中断入口地址之间只有8个预留地址单元,无法保存完整的中断服务子程序,一般在中断入口的地址存放一条无条件转移指令,指向真正存放中断服务程序的空间。
有的把程序复位也当成一个中断。

片内基本RAM

1 ) 数据存储器分为: 内部数据存储区 (片内基本RAM) 和扩展数据存储区 (片内扩展RAM);
2 ) 片内基本RAM分 为低128字苟、高 128字节和特殊功能寄存器(SFR)。
在这里插入图片描述

不管怎么样,片内扩展片外扩展都是一种相对物理概念,数据和程序的存储逻辑上仍然是分开的。

  1. 低128字节RAM ( 00 H ∼ 7 F H 00 \mathrm{H} \sim 7 \mathrm{FH}00H7FH ) ,可以直接寻址和间接寻址,用“MOV”和“MOV @Ri”形式 的指令访问 ;
  2. 高128字节RAM ( 80 H 80 \mathrm{H}80H FFH ) : 只能间接寻址,用“MOV @Ri”形式的指令访问 ;
  3. 特殊功能寄存器 ( SFR ) 区 ( 80H FFH ) :
    只可直接寻址,用“MOV”形式的指令访问。
    地址一样,怎么区分高128和SFR,利用寻址方式区分,因为物理区域不同。
    例如
    访问SFR的P1端口(对应地址为90H),可采用如下指令:
	MOV P1,A;//将累加器A的内容送端口P1

或者

	MOV P1,A;//将累加器A的内容送字节地址是90H对应的特殊功能寄存器

如果采用寄存器间接寻址,则是对高128字节的RAM访问。

	MOV R1,#90H
	MOV @R1,A

#表示立即数

SFR=special function register
地址编址是一样的,但是硬件不一样,区别它们的方式就是访问的指令,采用各自的指令,就访问各自的硬件区。
在CPU内部也有微解码器,把每个CPU指令分解成一个个最原始最简单的跟硬件相关的微指令,而这都是译码器完成的(也是为什么会存在指令译码这么一个机器周期,关于具体的内容请参考相关内容),使用不同的指令会被解释成不用的微指令码,所以相当于多了一根线用来选择寄存器区和RAM区,在译码的时候它会在直接寻址的时候选通寄存器区,而在使用间接寻址的时候就会选通RAM。

在这里插入图片描述
内部数据存储器地址空间分配:
工作寄存器区
位寻址区
通用用户RAM和堆栈区
特殊功能寄存器区
00-1F的32字节是工作区,两个位就可以区分四个区域
8086通过保护现场压栈,解决中断服务导致的暂时的数据保存问题,51则最多可以嵌套3次,避免同时读取的问题。为什么不用堆栈,因为51的变量空间太少了,8086可以开辟64K的堆栈区域,而早期51只有128个字节。
大部分时候用0区,分区应用很少,123区仍然当通用存储器使用。30H以上才是标准的存储空间(以前)。位寻址区是为了方便工业控制区的位操作,不需要多位一起操作。8086要么输出一个字节,则只改变一位,其他全部以不变的数据填充上去。位变量也可以做组合逻辑使用。

位寻址区
00-7F
占用片内20 2FH共16个单元,每个单元8位,共计16x8 = 128位,每位对应都有位地址, 可以进行位寻址。
需要补充一个例子
如置位/复位指令(位操作指令):
SETB 20H;//对24H单元中位地址为20H的D0位(仅含1位)进行置位,使其为1

通用RAM区
占用片内30 7FH,共80个单元。为一般 RAM区域,无特殊功能特性。一般作数据缓冲区用,如显示缓冲区、堆栈区域。

高128字节(80H~FFH)
高128字节地址与特殊功能寄存区的地址是相同的。用不同的寻址方式访问。变量区间增加了一倍。高128字节只能采用寄存器间接寻址, 即用"MOV @Ri" 形式的指令访问。
在这里插入图片描述

特殊功能寄存器SFR(80H~FFH)
STC15F2K60S2 单片机有81个特殊功能寄存器。(最初只有21个)只可直接寻址, 用 "MOV"形式的指令访问。
由于堆栈操作也是间接寻址方式, 所以, 高128 字节RAM 亦可作为堆栈区使用。

> >> 除了程序计数器PC和4个工作寄存器组外,
其余的寄存器都在SFR区中。
> >> 特殊功能寄存器大体分为两类
①CPU寄存器与芯片的引脚有关。如P0 - P5(80H,90H,A0H…),它们实际上是6个锁存器,(P5只有两个端口,5*8+2=42)每个锁存器附加上相应的输出 驱动器和输入缓冲器就构成了一个并行口。
②片内外设:芯片内部功能的控制或者内部寄存器。如中断屏蔽及优先级控制、定时器、串行口、SPI接口等。

(1) 与运算器相关的寄存器(3个)
A C C \mathbf{A C C}ACC
累加器,通常用A表示,表示寄存器寻址; 若用ACC表示,则表示直接寻址(仅在 PUSH,PO指令中使用)。
B \mathbf{B}B
寄存器,主要用于乘除运算,也可作一般 RAM单元使用。
PSW
程序状态字。

(2)指针类寄存器(3个)
SP: 堆栈指针,只能设在片内RAM中,由堆栈指 针SP指定当前栈 顶所在的单元;
复位后SP = 07H,即堆栈从08H开始,且采用向上增长的原则。(每压栈一个字节,SP加1;每弹栈一个字节,SP减1)
SP=stack pointer 堆栈指针
DPTR:数据指针,由DPH和DPL组成,用于存放 16位地址,对16位地址的程序存储器和扩展RAM 访问。(8位CPU不可能有16位寄存器)
DPTR=Data pointer register数据指针寄存器

3、扩展RAM (XRAM)
功能:存放数据。
空间大小:STC15F2K60S2片内集成了1792字节的外部RAM,地址为0000H ∼ 06 F F H \sim 06 \mathrm{FFH}06FFH 。类似于传统的片外数据存储器。
STC片内扩展RAM(XRAM)以及片外数据存储器RAM均用MOVX指令访问(但访问片内扩展RAM速度更快)
必须要间接寻址。

4、数据Flash存储? (EEPROM)
功能:存放一些应用时需要经常修改,掉电后
又能保持不变的参数。
空间大小:STC15F2K60S2片内集成了1KB的数
据Flash存储器,地址为0000H ∼ 03 F F H \sim 03 \mathrm{FFH}03FFH
数据Flash存储器分为2个扇区,每个扇区包含
512字节,对应的地址范围分别为:
第一扇区 : 0000 H ∼ 01 F F H : 0000 \mathrm{H} \sim 01 \mathrm{FFH}:0000H01FFH
第二扇区 : 0200 H ∼ 03 F F H : 0200 \mathrm{H} \sim 03 \mathrm{FFH}:0200H03FFH

快擦除,直接一个扇区删除而不是一个字节一个字节擦除。

数据Flash存储器可以作为EEPROM使用,擦写次数在10万次以上,用于保存一些需要在应用过程中修改并且掉电不丢失的参数数据。
在用户程中,可以对数据Flash区进行字节读、 字节写、扇区擦除操作。
数据Flash存储器可以采用MOVC指令访问(类似于传统51的程序存储器), 此时的起始扇区地址为F000H~F3FFH。

程序存储器和ROM等效,数据存储器和RAM等效

总结

基本MOV,扩展MOVX
基本RAM又分低128,高128

并行I/O端口

基本除了电源口都可以当GPIO(General Purpose Input/Output)
一个口8位数据
44引脚42端口,64引脚62端口(最后一个P仅两位)

工作模式

4种工作模式

准双向口、推挽输出、仅为输入(高阻状态)与开漏模式。每个I/O口的驱动能力均可达到20mA(8086CPU引脚的是多少?)
-------------------------------
输入高阻不耗电
20mA足够点亮小的LED灯,原本驱动能力不足的时候需要加入放大电路。

准双向模式

MOS管上面加个电阻,传统50K以上,高电平驱动能力弱。
干扰抑制滤波是施密特触发器。
T1和T4强上拉,构成一个推挽状态。
读取数据时要先把T1置1,T4截止。

推挽

输入模式两个都关断即可

开漏

单片机过电流能力20mA。

工作模式选择

由PnM1和PnM0(n=0~5)寄存器的相应位来控制。例如:P0M1和P0M0用于设定P0口的工作模式,其中P0M1.0和P0M0.0用于设置P0.0的工作模式,P0M1.7和P0M0.7用于设置P0.7的工作模式,以此类推。
n代表是哪个端口,M后的数字表示四种模式

保留准双向口的目的是为了向下兼容。

系统时钟与时钟分频寄存器

osc=振荡器oscillator

系统时钟

时钟分频

频率越高,功耗越大。

时钟倍频

锁相环

主时钟输出控制

复位

可能产生的死循环
①编程不严谨
②由于工业环境干扰,引起字节错误。

复位电平需要持续一段时间,考虑上升时间。
冷启动复位
热启动复位:上电以后的
IAP:在应用编程=In application programming
ISP:在系统编程=In System Programming
看门狗复位
LVD:低电压指令(Low Voltage Detector);左心室功能紊乱(left ventricular dysfunction)
8086的堆栈指针默认值是00H


版权声明:本文为qq_45379724原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。