【笔记】微机原理及接口技术5 -- MCS51单片机概述

MCS-51


CPU

由两个部分组成:运算器和控制器

运算器:算术逻辑单元(ALU)、位处理器、累加器 ACC 等组成;
控制器:主要有内部晶振和一些定时、控制逻辑组成


存储器

拥有三个存储器地址空间

  1. 程序存储器地址空间
  2. 内部数据存储器地址空间
  3. 外部数据存储器地址空间

累加器 ACC:一个最常用的专用寄存器,大部分单操作数指令的操作数取自累加器,指令系统中采用 A 作为累加器的助记符

程序状态字 PSW:一个 8 位寄存器,它包含了程序状态信息

栈指针 SP:它指示出栈顶在内部 RAM 块中的位置;SP 的初值越小,堆栈深度就可以越深

数据指针 DPTR:一个 16 位专用寄存器,当对 64KB 外部数据存储空间寻址时,可作为间址寄存器使用

IO 专用寄存器:统一使用 MOV 指令操作

串行数据缓存器SBUF:用于存放欲发送或已接受的数据,由两个独立的寄存器组成,一个是发送缓冲器,另一个是接受缓冲器

定时器与计数器


时序系统

XTAL1 作为芯片内部振荡电路的输入端,XTAL2 为其输出端

扫描二维码关注公众号,回复: 15609054 查看本文章

标准内部时钟
在 XTAL1 和 XTAL2 上面接定时原件,内部振荡电路实现自激振荡

在这里插入图片描述


外部时钟方式?
下图展示了 HMOS 型芯片的外部时钟连接方式

在这里插入图片描述

单片机复位

计算机启动,系统默认进入复位状态;
复位状态下 CPU 和其余转筒寄存器均设置默认值;


在单片机的 RESET 引脚上出现 24 个时钟振荡脉冲(两个机器周期)以上的高电平,单片机就能实现复位

下图表示内部复位的典型格式,RESET 接外部复位电路,而施密特触发器可以用来进行整形操作

在这里插入图片描述


简单复位电路有上电复位和手动复位两种
不管是哪一种复位电路都要保证在 RESET 引脚上提供 10ms 以上稳定的高电平


低功耗

目前存在两种低功耗模式

  1. 空闲方式
  2. 掉电保护方式

空闲方式中,仅 CPU 停止工作,但振荡器仍然运行,中断控制器等仍然在时钟控制下进行。

掉电保护方式中,片内振荡器停止工作,片内所有功能全部停止工作,而 RAM 等寄存器内容可维持不变


低功耗工作方式是通过 电源控制寄存器PCON 来确定的

PCON.0=1 进入空闲方式
可以使用中断、硬件复位两种方式退出空闲方式

PCON.1=1 进入掉电保护方式
只能使用硬件复位的方式退出掉电保护方式
不建议通过降低 VCC 电压使得其“不自然的”进入掉电保护状态!


定时器计数器原理

重点关注以下图形,C51 和 STM32 的定时器和计数器对应寄存器名称和布局都差不多,学会了就直接融会贯通即可

在这里插入图片描述


T0 由 TH0 和 TL0 构成,T1 由 TH1 和 TL1 构成
TMOD用于控制和确定各个定时器/计数器的功能和工作模式
TCON用于控制定时器/计数器 T0、T1 的启动和停止计数,同时包含定时器/计数器的状态


下图为定时器与计数器的工作原理图

  • 计数脉冲有两个源:一个是片内振荡器输出经 12 分频得到;一个是外部脉冲 TX
  • C/T 用于设置使用内部振荡(0)还是外部振荡(1)
  • 控制信号有效时(闭合),开始计数
  • 计数开始,每获得一个脉冲则让加 1 计数器给计数器加 1
  • 当计数器全 1 时,发生溢出,计数器归零,置位 TCON 表示定时时间到或者计数值满

在这里插入图片描述


控制寄存器 TCON 可以设置以下几个主要的位

  • TF1:定时器 1 溢出标志位,当定时器/计数器 1 计满溢出时,由硬件置 1
  • TR1:定时器 1 运行控制位,置位时,启动定时器/计数器工作;清零时,停止工作
  • TF0:定时器 0 溢出标志位
  • TR0:定时器 0 运行控制位

定时器与计数器工作模式

定时器/计数器的初始化流程

  1. 确定定时器的工作模式,设置 TMOD
  2. 写入定时初值到 TH0、TL0 或 TH1、TL1 中;
  3. 设置 IE,开放定时器中断;
  4. 将 TR0 或 TR1 置位,启动定时器/计数器工作。

串行通讯

串行口基本结构

  • 收发缓冲器 SBUF 可同时收发数据
  • 发送缓冲器只能写入不能读出,接收缓冲器只能读出不能写入
  • SBUF 的作用是设置针对接收缓存区操作还是发送缓冲器操作

串行口控制寄存器 SCON 设置串行通信接口的工作方式及收发方式
电源控制寄存器 PCON


波特率解释

  • 波特率指串行口每秒发送(或接收)的位数
  • 工作方式 0 中,波特率为时钟频率的 1/12,即 fosc/12
  • 工作方式 2 中,波特率取决于 PCON 中的 SMOD 值

中断系统

下图展示了中断系统的程序框图
下面介绍当设置对应寄存器的值后对应含义

  • IT0=1 设置 INT0 为脉冲触发,下降沿有效
  • IT0=0 设置 INT0 为电平触发,低电平有效
  • IE0 INT0 请求标志位
  • TF0 T0 定时计数溢出标志位
  • EA=1 CPU 开放所有中断
  • EX0=0 禁止 INT0 中断
  • ET0=0 禁止 T0 中断
  • PX0 外部中断 0 优先级设定位
  • PT0 定时器 T0 中断优先级设定位
  • PX1 外部中断 1 优先级设定位
  • PT1 定时器 T1 中断优先级设定位
  • PS 串行口中断优先级设定位。

在这里插入图片描述


外部中断 0:对应引脚 INT0
外部中断 1:对应引脚 INT1

外部中断有两种触发方式

  1. 低电平有效:即 CPU 时刻监测 INT 输入电平,若为低电平则触发中断
  2. 边沿触发:连续监测 INT 两次输入电平,若前一次为高电平,后一次为低电平,则触发中断

低电平或高电平的宽度至少要保持一个机器周期,即 12 个振荡周期以上


PX PT PS 可以设置中断的优先级,设置为 0 为低优先级,设置为 1 为高优先级

中断规则

  • 低优先级中断请求不能打断高优先级的中断服务
  • 高优先级中断请求可以打断低优先级的中断服务
  • 一个中断一旦得到响应,与它同级的中断请求不能中断它
  • 如果同级的多个中断请求同时出现,则按 CPU 查询次序确定哪个中断请求被响应

单片机的中断处理流程

分为 3 个阶段,即中断响应、中断处理和中断返回

中断响应

  • 中断响应条件满足,且不存在中断阻断的情况,开始触发中断响应
  • 中断系统通过硬件生成长调用指令(LCALL),其把断点地址压入堆栈保护起来
  • 将对应的中断入口地址装入程序计数器 PC,使程序转向该中断入口地址,执行中断服务程序

中断处理

  • 从入口地址开始执行,直至遇到指令 “RETI” 为止
  • 过程包括:一是保护现场;二是处理中断源的请求

中断返回

  • 由专门的中断返回指令 RETI 来实现的
  • RETI 把断点地址取出,送回到程序计数器 PC 中去
  • 通知中断系统已完成中断处理,将清除优先级状态触发器

PS:中断请求撤销(对于某些中断,如果不及时清除就会触发下一次中断)

  1. 定时器溢出中断 TF0 或 TF1 是自动清除的,不用管
  2. 边沿触发 IE0 或 IE1 也是自动清除
  3. 串行口中断需要手动清除

猜你喜欢

转载自blog.csdn.net/delete_you/article/details/131514044