单片机内部结构(干货)

假装没事ソ 提交于 2020-03-06 03:07:19

程序计数器PC(Program Counter):

存放着下一条将要从程序存储器中取出的指令的地址。

工作方式:

① 程序计数器PC自动加1。
②程序计数器将被置入新的数值。
③ 在执行子程序或响应中断时:将PC的当前值(可称为断点值)自动送入堆栈;将子程序的入口地址或中断向量地址送入PC,程序流向发生变化,执行子程序或中断服务程序。

51单片机存储器采用哈佛(Harvard)结构即将程序存储器和数据存储器截然分开,程序存储器和数据存储器各有自己的寻址方式、寻址空间和控制系统。

51单片机的4个物理存储空间相当于3个逻辑存储空间。

程序存储器ROM:(内外统一编址)

用来存放暂时性的数据、运算的中间结果或用作堆栈。 随时进行数据的写入和读出,关闭电源时,其所存储的信息将丢失。

特殊存储器单元:

0000H:复位后程序自动运行的首地址
0003H:外部中断0入口地址
000BH:定时器0溢出中断入口地址
0013H:外部中断1入口地址
001BH:定时器1溢出中断入口地址
0023H:串行口中断入口地址

程序一般应安排在0030H地址以后

数据存储器RAM:

用来存放MCU的固定系统程序、应用程序、数据或表格。如系统监控程序等。 写入信息后不易改写的存储器。断电后,其中的信息保留不变。

①工作寄存器区(含寄存器组0 ~ 3):
寄存器组0:地址00H~07H
寄存器组1:地址08H~0FH
寄存器组2:地址10H~17H
寄存器组3:地址18H~1FH

当前工作寄存器组选择 :RS1、RS0。通常采用位寻址比较方便。

②位寻址区:20H~2FH
片内数据RAM区的32~ 47(20H~2FH)16个字节单元,共包含128位。在这里插入图片描述
③通用RAM区 :( 30H~7FH,共80字节 )

  • 数据缓冲器
  • 堆栈
  • SP指示栈顶
  • 复位时SP=07H
  • 系统初始化通常重新设置

(4)特殊功能寄存器SFR区( 80H~0FFH)
(80C51的21个,80C52的26个)
除有字节寻址能力外,还有位寻址能力。

与运算器相关3个 :

  • ACC 累加器
  • B B寄存器
  • PSW 程序状态字寄存器

指针类3个 :

  • SP 堆栈指针
  • DPH,DPL

与中断相关2个

  • IE 中断允许控制寄存器
  • IP 中断优先级控制寄存器

与口相关7个

  • P0,P1,P2,P3
  • SBUF 串行口数据缓冲器
  • SCON 串行口控制寄存器
  • PCON 电源控制寄存器

与定时/计数器相关6个

  • TH0,TL0 T0的两个8位计数初值寄存器
  • TH1,TL1 T1的两个8位计数初值寄存器
  • TMOD 工作方式寄存器
  • TCON 控制寄存器

时序:

时钟周期(或节拍)P、状态周期S、机器周期、指令周期

  • 1个状态周期(S)= 2个节拍(P)
  • 1个机器周期 = 6个状态(S) =12个节拍(P)
  • 1个指令周期约为1~4个机器周期

几个常用的特殊功能寄存器:

程序状态字寄存器PSW:(8位)

在这里插入图片描述
CY:

  1. 判断有无进位或借位
  2. 可作为位累加器用。这时一般只用“C”表示。

AC:

  1. 根据AC判断加减运算时有无半进位或半借位;
  2. 在BCD码调整运算中要用到AC标志

F0(PSW.5)和F1(PSW.1): ——用户标志位,可作为用户自行定义的一个状态标记 。

RE1、RE0:控制片内工作寄存器区。

OV:有无溢出。溢出是指有符号数运算时,数值超过了+127—128。 OV=Cy7⊕Cy6,补码运算产生溢出OV=1,否则OV=0 。

P:用于串行通讯中的数据校验,判断是否存在传输错误。根据“1”个数的奇偶性

堆栈指针SP:(8位)

总是指向栈顶。遵循“先进后出,后进先出”的原则。SP指向操作。 入栈时,SP先加1,数据再压入SP指向的单元。出栈操作时
先将SP指向的单元的数据弹出,然后,SP再减1,这时SP指向的单元是新的栈顶。
堆栈功能作用有两个:保护断点和保护现场。
保护断点是将IP,CS的值压入堆栈,而保护现场是将断点处的有关寄存器的内容和标志位的状态压栈。

数据指针寄存器DPTR(Data Pointer——DPTR):(16位)

具有16位字长,可寻址范围216(64KB)
具有可被指令修改功能→可变更数据地址
存放16位的地址,可拆为2个8位的独立寄存器DPL和DPH

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!