0%

单片机复习(考试复习自用)

计算机基础

  • 原码、反码、补码

    正数的三者相同,负数反码为原码除符号位其余取反,补码为其反码+1

    负数的机器码是其原码的补码

  • 微型计算机配置高速缓冲存储器是为了解决: CPU于内存储器速度不匹配

  • ROM和RAM

    • ROM:只读存储器,在单片机中用于存放程序,配有较大空间,掉电数据不丢失
    • RAM:随机存储器,存放临时数据,使单片机更适用于实时控制系统掉电数据丢失
    • 计算机的内存容量主要指RAM
  • 系统总线:地址总线 AB,控制总线 CB 和双向数据总线 DB。

    • 数据总线(Data Bus―DB)双向、三态:数据总线的根数决定了一次可以传递二进制数的位数
    • 地址总线(Address Bus―AB)单向、三态:地址总线的位数决定了可以直接访问的存储单元(或 I/O 口)的最大可能数 量(即容量)
    • 控制总线(Control Bus―CB):控制总线用来传输控制信号,数据总线和每个元件的数据线相连,为了使 CPU 能够和 其中一个元件正确通信,必须使用三态逻辑元件(特别针对输入元件)。

单片机硬件结构

CPU

分为运算器和控制器

  • 控制器:依次取出ROM中存储单元的指令

    • 程序计数器:PC,16位,指向下一条指令的地址,复位后为0000H
    • 指令寄存器
    • 指令译码器
    • 定时控制电路
  • 运算器ALU:对数据进行算术、逻辑运算

    • 算术逻辑运算部件ALU,负责运算,结果传回ACC,结果的状态传回PSW
    • 累加器ACC
    • 程序状态寄存器PSW
7 6 5 4 3 2 1 0
位名 Cy AC F0 RS1 RS0 OV F1 P
作用 进位/借位 辅助进位 自定义 寄存器选择 寄存器选择 溢出 自定义 奇偶效验
  • Cy:运算结果最高位有无进位/错位
  • AC:运算结果低四位有无向高四位进位
  • F0、F1:用户自定义
  • RS1、RS0:一起决定当前寄存器组(00对应寄存器0组,依次增加)
  • OV:数据是否溢出
  • P:1的个数为奇/偶

时钟电路

  • XTAL1:片内振荡电路输入端
  • XTAL2:输出端

当外部信号源为单片机提供时钟时,1接地,2接信号源

EA

EA(反)为1时CPU从片内读取指令,为0时访问外部

并行IO口

P1

通用输入、输出接口

作输出时:

  • 输出的数据通过内部总线送入锁存器保存

  • 判断数据的每一位。

    为1时,Q=1,Q(反)=0,VT截止,Vcc向引脚输出高电平。

上拉电阻的作用:当VT截止时,使输出强制为1,若没有上拉电阻,输出可能由于噪音上下浮动。

作输入时:

  • 先向锁存器写1(准双向),使VT一直为截止状态。否则VT导通会拉低输入信号。
  • CPU执行读指令时,2导通,数据通过2直接进入内部总线,因此内部总线信号跟随引脚变化。

P2

有两种用途,准双向IO和高8位地址总线

当用作IO时,控制信号使开关接左侧,Q输出1使VT截止。

P3

用户可自行操作第二功能实现相关功能,P3默认为准双向IO

第二功能包括:串口收发、外部中断、定时器输出等

P0

可作为准双向IO,IO时必须外接上拉电阻。第二功能时提供外部存储地址低8位和P2组成16位地址,之后用作数据总线(此时锁存器会保存低八位地址)。

P0具有高阻态

总结:

  • 四个IO均为准双向,在用作输入时都应向锁存器写“1”
  • 除P1外,其余端口都有第二功能:
    • P0:低八位地址和数据总线
    • P2:高八位地址
    • P3:自定义功能
  • P0作为通用IO时需要外接上拉电阻!
  • P0、P2作地址时剩下引脚不能作为IO使用;但是P3各个口独立,未用作第二功能的可以作为IO使用

存储结构

51单片机存储器物理上分为四个空间:

  • 片内程序存储器
  • 片外程序存储器
  • 片内数据存储器
  • 片外数据存储器

从用户使用的逻辑上分为三个区域:

  • 片内外统一编址的程序存储器 0000H-FFFFH(64KB)
  • 片内数据存储 00-FFH 128B
  • 片外数据存储 0000H-FFFFH

程序存储器

程序存储器由ROM和EPROM构成,掉电后数据不丢失

用于存放程序和程序运行时所需的常数。51片内有4K ROM,但地址线为16位,因此做多可以扩展到64KB。当PC值超过内部ROM容量时会自动转向外部寻址。\EA=1时为寻址内部ROM。

MOVC指令用于访问程序存储器。

数据存储器

数据存储器由RAM和专用寄存器组成,掉电后数据丢失

用于存放程序运算的中间结果、标志位、数据缓冲等。51片内有128+128B的数据存储器,可扩充至64KB

内部数据存储器分为低128B和高128B

低128B:RAM区

  • 通用寄存器区,供用户使用,用于临时存放8位数据

    通过修改程序状态寄存器PSW中的RS1和RS0实现选择,00H-1FH 128位

  • 位寻址区,提供地址读写数据

    RAM中的20H-2FH,128位

  • 数据缓存区

特殊功能寄存器SFR

包括51中有特殊功能的寄存器,如ACC、PSW、P0-P3等

不包括PC

时序

时钟周期(振荡周期)

也叫振荡周期,为振荡器频率的倒数,是时序中的最小单位

状态周期

两个振荡周期,一个完成运算,一个完成传送

机器周期

执行一条指令的一个阶段的时间。是单片机的基本操作周期。1个机器周期=6个状态周期=12个振荡周期

指令周期

执行一条指令的周期,通常含有1~4个机器周期。

51单片机分为单周期指令、双周期指令、四周期指令,分别对应n个机器周期。只有乘法和除法是四周砌指令。

因此,晶振周期为12MHz时:

  • 振荡周期=1/12us
  • 机器周期=1us
  • 指令周期:1、2、4us

工作方式

复位方式

  • 上电复位
  • 按键复位

复位后寄存器状态

  • P0~P3:0FFH(全高电平)
  • PC:0000H
  • SP:07H
  • PSW: 00H

51单片机在电复位时RAM保持不变

低功耗模式

  • 休眠模式:只有外部中断工作
  • 空闲模式(待机):只有CPU停止工作

错题

由于RAM片内外访问指令一个是MOV一个是MOVX,因此其地址可以重叠。外部地址总线16位对应64KB,而内部地址可以与其重合,因此RAM最大总量是大于64KB的

51指令系统

51单片机汇编指令查询 | 小董的BLOG (gitee.io)

一般只有A能参与这些逻辑运算

经典

规定

中断

中断请求标志寄存器

定时器/计数器控制寄存器TCON

  • IT 0/1:外部中断触发方式,0低电平触发,1下降沿触发
  • IE 0/1:中断请求标志位,触发中断后硬件自动清零
  • TF 0/1:定时器/计数器溢出中断标志位,触发中断后自动清零
  • TR 0/1:启停定时器

一般就只需设置IT和TR

串行口控制寄存器SCON

  • TI:发送中断标志位,每发送完一帧数据后硬件会对其置1,需用户自行软件清零!
  • RI:接收中断标志位,规则同上。

中断允许寄存器IE

  • EA:总中断允许位
  • ES:串口中断允许位
  • ET:定时器中断允许位
  • EX:外部中断允许位

都是置1允许

若要使用某个中断,必须先开启中断允许位,复位后清零

总结:

  • I开头为TCON寄存器,控制定时器中断触发的方法和标志位
  • RI和TI为SCON寄存器,控制串口相关
  • E开头为中断允许寄存器IE

中断优先级

由中断优先级寄存器IP控制

  • PX:外部中断优先级设置
  • PT:定时器中断优先级设置
  • PS:串口中断优先级设置

中断响应过程

中断请求

硬件完成,请求完成后对应标志位置1

中断查询

CPU检测TCON和SCON中各标志位状态,确定是哪个中断

中断响应

响应条件:

  • EA使能
  • 该中断允许位也使能
  • 有中断请求
  • 无同级或高级中断正在运行

中断处理

中断服务程序

中断返回

复位置位的标志位,重新执行原程序(PC被弹出堆栈)

操作流程

  • 打开对应中断允许位
  • 设置触发方式
  • 开启总中断允许
  • 编写服务函数

定时器/计数器

基本结构

T1、T2分别由两个8位特殊功能寄存器TH和TL组成。当它对外部事件进行计数时,作为计数器使用;当对内部固定频率的机器周期进行计数时,便可以达到定时的目的。

两种工作模式

  • 计数器工作模式

    对外部事件进行计数,计数脉冲来自P3中的对应引脚。

    下降沿触发

    最高频率为振荡频率的1/24,因为识别下降沿需要2个机器周期,即24个振荡周期

  • 定时器工作模式

    计数脉冲为内部时钟脉冲,也就是每个机器周期+1,因此计数频率为振荡频率的1/12,得到的时间:定时器计数值*机器周期时间

当设置好定时器后,定时器就将独立工作,不再占用CPU,只有溢出时才会申请中断。

控制寄存器

工作模式寄存器TMOD

  • GATE:门控位,使用外部中断引脚的高电平来启动定时器(前提是该定时器已被置位运行)
  • C/(/T):1为计数器模式,0为定时器模式
  • M1,M0:同时控制定时器的工作模式,同PSW中的RS用法

控制寄存器TCON

上一节中断中已讲过,控制定时器的开启。

定时器的工作方式

方式0

易得其定时时间为:(2^13 - 初值)*机器周期

计算后的值低5位赋给TL,高8位赋给TH

方式1

16位计数器,其余与方式0一样。

方式2

方式2为8位定时器

  • TL用作定时,TH用于保存初值。当TL溢出后,中断标志置位,同时自动将TH中的值重新装载进TL,无需用户再手动重新装入初值。

更加精准,但计时范围小。

方式3

  • 只有T0能被设置为模式3,T1若为模式3,则停止计数,保存原样。

T0为模式3时

TH和TL分别单独工作

  • TL:使用T0的状态控制位,同方式2,但是溢出后需用户手动装入初值
  • TH:被固定为一个内部定时器,受T1控制位的TR1控制启停,同上占用T1的中断请求TF1

T0为模式3时,T1的设置

T1仍可设置为方式0、1、2,但由于中断被占用,只能将输出送往串口

使用流程

  • 设置模式TMOD
  • 赋初值TL、TH
  • 开启中断ET、EA

  • 开启定时器TR

串口通信

串行通信:数据的各位在同一根数据线上逐位发送、接收。

串行通信按同步方式分为异步通信和同步通信

同步通信

数据传输速率高,但是要求发送时钟和接收时钟严格同步

异步通信

数据组成数据帧方式,收、发端相互独立、互不同步,只需规定收发数据的帧格式即可相互识别。

数据帧格式

  • 起始位:低电平有效
  • 数据位:5~8位
  • 奇偶校验位
  • 停止位:高电平有效

波特率

每秒传输二进制数码的位数,每位的传输时间为1/波特率

51单片机的串口通信

51内部有一个可编程全双工串口。

串口相关寄存器

串行数据缓冲器SBUF

包括发送和接收寄存器,但在逻辑上只有一个SBUF,在使用时可用作发送和接收。(物理上有两个完全独立的SBUF,但是他们地址是一样的)

串行控制寄存器SCON

  • SM0、1工作方式选择位

  • SM2:多机通信控制位

  • REN:允许接收控制位

  • TB8:方式2、3的发送第九位

  • RB8:方式2、3的接收第九位

电源控制寄存器PCON

其中第七位SMOD为1波特率加倍

基础流程

  • 配置SCON
  • 数据送往SBUF
  • 发送、接收数据
  • 中断置位

常用的一些寄存器

片内特殊功能寄存器SFR

大多数特殊寄存器都在这里,但不包括PC!!

程序状态寄存器PSW

用于表示运算结果的状态

7 6 5 4 3 2 1 0
位名 Cy AC F0 RS1 RS0 OV F1 P
作用 进位/借位 辅助进位 自定义 寄存器选择 寄存器选择 溢出 自定义 奇偶效验

中断允许寄存器IE(管理中断允许)E开头

用于管理所有中断

中断优先级寄存器IP(管理中断优先级)P开头

外部中断2位,定时器2位,串口1位,共5位

定时器工作模式寄存器TMOD(管理定时器工作模式)

8位,下4位控制T0,上4位控制T1

定时器中断控制寄存器TCON(管理定时器启动、定时器和外部中断的中断标志位)

其中IT和IE为控制外部中断的位

需要操作的位只有IT和TR,其他都会自动复位

串行控制寄存器SCON(管理串口中断位和串口配置)

电源控制寄存器PCON(波特率翻倍)

仅串口中需使用其第七位翻倍波特率

  • 堆栈的作用:保护现场和断点

  • JB为判断当前位,为1则跳转

如果是A,就是直接寻址,C则为位寻址,位寻址只能操作位

  • C/(/T):0为定时器模式