计算机基础
原码、反码、补码
正数的三者相同,负数反码为原码除符号位其余取反,补码为其反码+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为定时器模式