逻辑结构

  • 8位处理器
  • 哈佛结构
  • 复杂指令集
  • 128B RAM + 特殊功能寄存器SFR
  • 4KB ROM
  • 16位定时/计数器*2:T0和T1
  • 8位双向可编程GPIO ,并行端口P0~P3
  • 1个UART串行端口
  • 中断控制系统
  • 内部时钟电路

内部逻辑

数据指针DPTR

16位特殊功能寄存器,用于数据存储器和I/O寻址,(DPH+DPL)

1
2
3
4
5
6
; 访问片外数据存储器或I/O的指令
MOVX A,@DPTR ; 读
MOVX @DPTR,A ; 写
; 作为访问程序存储器时的基址寄存器,访问程序存储器中的表格、常数
MOVC A,@A+DPTR ; 作为基址寄存器
JMP @A+DPTR

累加器A

它是一个使用最频繁的专用寄存器,这导致了累加器的瓶颈,它用来存放操作数,是ALU单元的输入之一并且也是ALU运算结果的暂存单元,ALU的运算结果会通过内部总线送回到累加器中得以保存

程序状态字(PSW):

CY,AC,OV,P都是ALU在运算后的标志位直接输入的

  • CY:进位标志位
  • AC:辅助进位标志位
  • OV:溢出标志位
  • P:奇偶标志位,通常添加在串行通信时的帧中来保证数据传输的可靠性
  • F0:用户标志
  • RS1&RS0:工作寄存器组选择控制位

ALU

产生两个结果

  • 运算结果送入累加器中
  • 标志位送入PSW中

条件转移逻辑电路

  • 内部条件:通过判断PSW(程序状态标志位)的状态,这和x86汇编中的jz,ja之类的指令很相似;以及累加器是否是结果为0(零状态)来决定是否进行分支转移
  • 外部条件:通过F0的值,以及位寻址(8051单片机内部有1个可位寻址区,地址为20H~2FH)空间中的各个位的状态来判断是否进行分支转移

定时器/计数器

定时器/计数器时嵌入式芯片的核心部件,定时、技术、捕获PWM是由它实现的,51中有两个16位的定时器/计数器

中断系统

外中断2个,定时/计数中断2个,串行中断1个。优先级分为高/低两种

振荡器

  • 内部振荡器:误差1%-5%不精确
  • 外部振荡器
    • 晶体振荡器
    • 陶瓷振荡器
    • RC振荡器:廉价

由PD位(电源控制寄存器PCON中的一位)控制。当PD=1时,停止工作,系统进入低功耗工作状态

程序存储器

介质类型分类

  • 片内不带程序存储器而使用片外只读存储器的称80C31

  • 内部带ROM的称80C51

  • 内部以EPROM代替ROM的称87C51

  • 内部以FLASH代替ROM的称89C51

容量

采用16位的地址总线,可直接扩展的地址空间位64KB,片内、片外均为64KB

保密及攻击方法

复位及中断入口

复位方式见后文工作方式的内容

中断入口地址:

和x86的中断向量工作方式类似,通过这个入口地址跳转到实际程序的执行地址

  • 复位 0000H~0002H(3个单元)

  • 外部中断0 0003H~000AH(8个单元)

  • 计时器T0溢出 000BH~0012H (8个单元)

  • 外部中断1 0013H~001AH (8个单元)

  • 计时器T1溢出 001BH~0022H (8个单元)

  • 串行口中断 0023H~002AH (8个单元)

  • 计时器 T2/T2EX 002BH~0032H (8个单元,80C52)

数据存储器

容量

片内256B数据存储器地址空间,片外64KB的数据存储器地址空间

寻址

地址只有8位=256B的寻址范围

低128B一定为片内数据RAM区

高128B为特殊功能寄存器SFR区/RAM区:高128B的RAM区和SFR区的地址空间是重叠的。究竟访问哪一个区是通过不同的寻址方式来加以区别的,访问高128B RAM区时,选用间接寻址方式;访问SFR区,选用直接寻址方式(eg: MOV AX [2000H],[]中为常数)

片外数据存储器只能用寄存器间接寻址的方法访问,这里使用的寄存器为DPTR、R1、R0

工作寄存器区

片内数据 RAM区的 0~31(00H~1FH),共 32个单元,是 4个通用工作寄存器组,每个组包含8个8位寄存器,编号为 R0~R7

单片机的信号引脚

  • 40引脚双列直插(DIP, Dual In-line Package)
  • 44引脚(PLCC, plastic leaded chip carrier)
  • 44引脚(PQFP/TQFP, plastic quad flat pack / Thin Quad Flat Package)封装形式

ALE(PROG:编程脉冲):地址所存允许信号

/PSEN:片外程序存储器读选通信号,‘/’表示低电平有效

时钟电路

内部时钟发生器实质上是一个2分频的触发器,讲震荡信号2分频

时序定时单位:震荡周期/节拍、时钟周期/状态周期、机器周期(机器周期是单片机的最小时间单位)、指令周期(由于使用复杂指令集,因此根据指令的不同,可能包含n个机器周期)

工作方式

复位

PC:arrow_right:0000H,对特殊功能寄存器又影响,ALE=0,/PSEN = 1

程序运行出错或者操作错误而使得系统处于死锁状态时,可以使用复位键或WDT看门狗定时器来复位。

复位实现方式:

需要使用RST引脚,该引脚为复位信号的输入端,复位信号是高电平有效,其有效时间应该持续2个机器周期以上才能进行复位

  • 上电自动复位
  • 按键复位:
    • 电平方式(复位端经过电阻和Vcc电源接通实现)
    • 脉冲方式(通过RC微分电路产生正脉冲)

程序执行

一般在0000H处有一个跳转指令用来跳转到实际的程序入口

低功耗

由电源控制寄存器(PCON)的有关位来控制

低功耗模式下内部振荡器不工作,因此不产生内部时钟信号

  • 待机/空闲(IDLE)方式
  • 掉电(POWER DOWN)保护方式

编程和校验

这里有点晕,感觉特别繁琐,先放个图吧

控制线

注:/ 表示低电平有效,没有这个标志标识高电平有效

RST

在振荡器工作时,在RST上作用两个机器周期以上的高电平,将器件复位。

VPD:备用电源引入端,当电源发生故障,电源降到下限值时,备用电源经此端向内部RAM提供电压,以保护内部RAM中的数据不丢失

/EA

片外程序存储器访问允许信号,低电平有效。/EA=1,选择片内程序存储器;/EA=0,则程序存储器全部在片外而不管片内是否有程序存储器。

Vpp:编程电压,具体电压值视芯片而定

ALE(PROG: 编程脉冲)

该信号每6个震荡周期出现一次,是地址锁存允许信号。例如在读取指令的时候需要它为1才可以读取。

/PSEN

片外程序存储器读选通信号,低电平有效

指令系统

  • 单字节或双字节指令可能是单机器周期或双机器周期的

  • 三字节指令是双机器周期的

  • 乘除指令是四个机器周期的

总线

地址、数据、控制三总线:地址总线是单向的、数据总线是双向的、控制总线是单向的

位寻址

RAM(20H-2FH)16*8=128位、特殊功能寄存器被8整除的位、I/O口中可以位寻址的位

电源

种类:TYPE A: 5V、 TYPE B: 3.3V、 TYPE C: 1.8V

误差:\(\pm10\%\),少数芯片可以达到\(\pm5\%\)

宽电源芯片

可以同时支持TYPE A/B

芯片工作电压范围很宽,比如工作电压\(3V-5V\),使用\(3V\)工作功耗比使用\(5V\)低。因为逻辑高电平大于等于\(0.7*Vcc\),逻辑低电平小于等于\(0.3*Vcc\),当使用高\(Vcc\)时,高逻辑和低逻辑的电压差大,所以抗干扰能力强

内部方式

XTAL1——片内振荡器的反相放大器输入端

XTAL2——片内振荡器的反相放大器输出端。

外部方式

使用外部振荡器时,外部信号应直接加到XTAL1,而XTAL2悬空。根据频率微调电容取15-30P左右。

这老师的ppt就乱得离谱,感觉还是没理顺