当前位置: 首页 > news >正文

物联网控制技术期末复习 知识点总结 第二章 单片机

单片机

将组成微型计算的各个功能部件:中央处理器(CPU)存储器(RAM、ROM、EPROM)、定时/计数器串行口I/O接口电路集成在一块集成电路芯片中,从而构成完整的微型计算机。故称为单晶片微型计算机,简称单片机,也称为微控制器(Micro Controller Unit, MCU)。
在这里插入图片描述

51单片机的体系结构

51单片机与微机系统的区别与联系

内部结构

MCS-51单片机的内部结构组成CPU(进行运算、控制)、RAM(数据存储器)、ROM(程序存储器)、I/O口(串口、并口)、内部总线中断系统等。组成框图、内部结构如下:
在这里插入图片描述 在这里插入图片描述

CPU的组成

组成:运算器控制器
(1)运算器:完成算数运算和逻辑运算
(8位算数逻辑运算单元ALU、8位累加器A、8位寄存器B、程序状态字寄存器PSW、8位暂存寄存器TMP1和TMP2)
(2)控制器:取指令、译码、执行信号
(程序计数器PC、指令寄存器IR、指令译码器ID、堆栈指针SP、数据指针DPTR、定时控制逻辑、振荡器OSC)

存储器的组成

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

存储器的访问

片内数据存储器RAM:MOV
片内/片外程序存储器TOM:MOVC
片外程序存储器RAM:MOVX
在这里插入图片描述

存储空间的分布

三个逻辑空间:
(1)片内外同一寻址的64KB程序存储器空间,地址范围为0000H~FFFFH。
(2)64KB的片外数据存储器空间,地址范围也为0000H~FFFFH。
(3)256B的片内数据存储器空间,地址范围为00H~FFH。
在这里插入图片描述

特殊功能寄存器(SFR)

理解程序计数器PC、累加器、工作寄存器、程序状态字PSW、数据指针DPTR、堆栈指针SP、I/O专用寄存器P0~P3。

程序计数器PC

程序计数器PC在物理上是独立的,它不属于SFR存储器块。PC是一个16位的计数器,专门用于存放CPU将要执行的指令地址(即下一条指令的地址),寻址范围为64KB,PC有自动加1功能,不可寻址,用户无法对它进行读写,但是可以通过转移、调用、返回等指令改变其内容,以控制程序执行的顺序。

累加器A

累加器A是8位寄存器,又记做ACC,是一个最常用的专用寄存器。在算术/逻辑运算中用于存放操作数或结果。

工作寄存器R0~R7

内部RAM的工作寄存器区00H~1FH共32个字节被均匀地分成四个组(区),每个组(区)有8个寄存器,分别用R0~R7表示,称为工作寄存器或通用寄存器,其中,R0、R1还经常用于间接寻址的地址指针。在程序中通过程序状态字寄存器(PSW)第3、4位设置工作寄存器区。

程序状态字PSW

程序状态字PSW是8位寄存器,用于存放程序运行的状态信息,PSW中各位状态通常是在指令执行的过程中自动形成的,但也可以由用户根据需要采用传送指令加以改变。

数据指针DPTR

数据指针DPTR是16位的专用寄存器,即可作为16位寄存器使用,也可作为两个独立的8位寄存器DPH(高8位)、DPL (低8位)使用。DPTR主要用作16位间址寄存器,访问程序存储器和片外数据寄存器。

堆栈指针SP

堆栈指针SP是一个8位寄存器,用于指示堆栈的栈顶,它决定了堆栈在内部RAM中的物理位置。

I/O专用寄存器P0~P3

片内有4个8位并行I/O接口P0, P1, P2和P3,在SFR中相应有4个I/O口寄存器P0, P1, P2和P3。

端口线P0~P3的特点

P0口

8位双向三态I/O口,可作为外部扩展时的数据总线/低8位地址总线的分时复用口。又可作为通用I/O口,每个引脚可驱动8个TTL负载。

P1口

8位准双向I/O口,内部具有上拉电阻,可作为通用I/O口。每个引脚可驱动4个TTL负载。

P2口

8位准双向I/O口,内部具有上拉电阻,可作为外部扩展时的高8位地址总线。又可作为通用I/O口,每个引脚可驱动4个TTL负载。

P3口

8位准双向I/O口,内部具有上拉电阻。它是双功能复用口,作为通用I/O口时,功能与P1口相同,常用第二功能。每个引脚可驱动4个TTL负载。作为第二功能使用时,各位的作用如下表所示。
在这里插入图片描述

控制线ALE、EA

ALE

地址锁存允许/编程引脚。当访问外部程序存储器时,ALE的输出用于锁存地址的低位字节,以便P0口实现地址/数据复用。当不访问外部程序存储器时,ALE端将输出一个1/6时钟频率的正脉冲信号。

知识延伸解释
复用:
“复用” 是指 同一个物理引脚(P0口的引脚)在不同的时间段被用来传输不同类型的信息——地址信息和数据信息。
复用技术的精髓——时间分割
同一组引脚,不同时间干不同的事:在总线周期的前半部分(通常是地址建立阶段): P0口被用作低8位地址总线(A0-A7)。在总线周期的后半部分(数据读写阶段): P0口被用作8位双向数据总线(D0-D7)。

ALE使能:
当单片机输出地址时,它会同时产生一个ALE(地址锁存使能) 信号(通常是一个高电平脉冲)。
ALE有效时: 地址锁存器是透明的,P0口上的地址信息直接通过锁存器送到地址总线的低8位(A0-A7)。
当ALE信号由高变低(下降沿)时: 地址锁存器将此刻出现在其输入端的地址信息(即P0口上的值)锁存并保持在它的输出端(A0-A7),即使P0口上的电平之后发生了变化。
ALE无效后: P0口就可以释放出来,用于传输数据(D0-D7)。此时地址锁存器的输出保持不变,继续为外部存储器提供稳定的低8位地址。

总结:
P0口的“地址/数据复用”就是指P0口的引脚在CPU访问外部存储器的过程中,先当地址线用,锁存住地址后,再当数据线用。 利用时间分割和外部地址锁存器(由ALE信号控制)来分离地址信息和数据信息。

EA

允许访问片外程序存储器/编程电源引脚。对于片内无程序存储器的MCS-51单片机(如8031),EA 必须接地。片内有程序存储器的MCS-51单片机(如8051),EA必须接高电平。

51单片机的时序

时序:CPU在执行指令时所需控制信号的时间顺序称为时序。
时序是用定时单位来描述的,MCS-51的时序单位有四个,分别是时钟周期(节拍)、状态、机器周期和指令周期。

MCS-51的时序单位

(1)时钟周期

又称为振荡周期、节拍(用P表示),定义为单片机提供时钟信号的振荡源(OSC)的周期。它是时序中的最小单位。

(2)状态S

单片机振荡脉冲经过二分频后即得到整个单片机工作系统的状态。一个状态有两个节拍,前半周期对应的节拍定义为P1,后半周期对应的节拍定义为P2。

(3)机器周期

通常将完成一个基本操作所需的时间称为机器周期。
MCS-51中规定一个机器周期包含12个时钟周期,即有6个状态,分别表示为S1~S6。
若晶振为6MHz,则机器周期为2μs,若晶振为12MHz,则机器周期为1μs

知识延伸与解释:晶振
机器周期(Machine Cycle) 是单片机执行一个基本操作(如取指令、读存储器等)所需的时间单位。在8051中,1个机器周期 = 12个时钟周期(Clock Cycle)。
时钟周期(Clock Cycle) 是单片机最小的时间单位,由 晶振频率(Crystal Frequency) 直接决定:时钟周期 = 1/fosc,其中fosc是晶振频率(单位:Hz)。

(4)指令周期

执行一条指令所需要的时间称为指令周期。它是时序中的最大单位。一个指令周期通常含有1~4个机器周期。
指令所包含的机器周期数决定了指令的运算速度,机器周期数越少的指令,其执行速度越快。
以机器周期为单位,指令可分为单周期、双周期和四周期指令。

指令的取指/执行时序

ALE信号是用于锁存低8位地址的选通信号,每出现一次该信号,单片机即进行一次读指令操作。当指令为多字节或多周期指令时,只有第一个ALE信号进行读指令操作,其余的ALE信号为无效操作(或读操作数操作)。
单周期和双周期指令的取指时序图如下:
在这里插入图片描述

访问片外ROM/RAM指令的时序

(1)片外ROM读时序

从外部程序存储器读取指令,必须有两个信号进行控制:ALE信号PESN信号(外部ROM读选通脉冲)。
在这里插入图片描述

(2)片外RAM读时序

第一个机器周期是取指周期,是从ROM中读取指令数据,第二个机器周期才开始读取外部数据存储器RAM中的内容。有三个信号进行控制:ALE信号PSEN 信号(外部ROM读选通脉冲)和RD信号(外部RAM读选通脉冲)。
在这里插入图片描述

MCS-51单片机的片上接口及其应用

定时/计数器

工作原理

定时器
计数输入信号来自内部振荡信号,在每个机器周期内定时器的计数器做一次“+1”运算。因此定时器亦可视为计算机机器周期的计数器。
计数器
计数输入信号来自外部引脚T0(P3.4)、T1(P3.5)上的计数脉冲,外部每输入一个脉冲,计数器做一次“+1”运算。
当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。

控制方式

方式控制寄存器TMOD

TMOD用于设置定时/计数器的工作方式,是一可编程的特殊功能寄存器,字节地址为89H,不可位寻址。其中低4位控制T0,高4位控制T1。
在这里插入图片描述
GATE:门控位。GATE=0时,软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚为高电平,才能启动定时/计数器工作。
C/T:定时/计数模式选择位。0为定时模式;1为计数模式。
M1和M0:工作方式选择位。
在这里插入图片描述

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

8位特殊功能寄存器,字节地址为88H,可以位寻址,位寻址为88H~8FH,用来存放控制字。
在这里插入图片描述

初始化编程

  1. 确定工作方式——对方式寄存器TMOD赋值。
  2. 预置定时或计数初值,直接将初值写入TL0、TH0或TL1、TH1中。
  3. 根据需要对中断允许寄存器有关位赋值,以开放或禁止定时器/计数器中断。
  4. 启动定时器/计数器,使TCON中的TR1或TR0置“1”,计数器即按确定的工作方式和初值开始计数或定时。

举例说明:
设置定时器0工作方式1,晶振频率为12MHz,定时器50ms中断一次。
则程序开始处对定时器及中断寄存器的初始化设置如下:

TMOD=0x01;  //设置定时器工作方式
TH0=(65535-50000)/256;  //装初值
TL0=(65535-50000)%256;
EA=1;  //打开总中断
ET0=1;  //打开定时器0中断
TR0=1;  //启动定时器0

初值计算

设计数器最大计数值为M,选择不同的工作方式,最大计数值M不同。
方式0:M=213=8192
方式1:M=216=65536
方式2、3:M=28=256
置入计数初值X可计算如下:
① 计数方式时:
X=M-计数值(X即为计数值的补码)
例如:要计100个数,则计数初值X=M-100
② 定时方式时:
(M-X)×T=定时值
故,X=M-定时值/T
其中T为计数周期,是单片机时钟的12分频,即单片机机器周期。当晶振为6MHz时,T=2μs,当晶振为12MHz时,T=1μs。

51单片机的中断系统

中断

当CPU正在处理某事件的时候,外部发生的某一事件请求CPU迅速去处理,于是CPU暂时中止当前的工作,转去处理所发生的事件。中断服务处理完该事件后,再返回到原来被中止的地方继续原来的工作,这样的过程称为中断。
在这里插入图片描述

中断过程

中断响应(入口地址)、中断处理(保存现场、寄存器工作区切换、中断撤销)、中断返回

中断源

(MCS-51:外2,内2,串1,外2可拓展)
INT0:来自P3.2引脚上的外部中断请求
INT1:来自P3.3引脚上的外部中断请求
T0:片内定时器/计数器0溢出中断请求
T1:片内定时器/计数器1溢出中断请求
串行口:完成一帧发送(TI)或接收(RI)中断请求

中断涉及控制寄存器

中断允许控制器

在这里插入图片描述
EA:总中断允许控制位。0:屏蔽所有中断;1:打开所有中断。

中断优先级寄存器IP

在这里插入图片描述
PX0:外部中断0的中断优先级控制位。
PT0:定时/计数器T0中断优先级控制位。
PX1:外部中断1的中断优先级控制位。
PT1:定时/计数器T1中断优先级控制位。
PS:串行口中断优先级控制位。

中断标志优先顺序

中断源中断标志优先顺序
外部中断0
定时/计数器0
外部中断1
定时/计数器1
串行口

中断编程应用

汇编语言中断编程

  1. 中断入口地址设定
  2. 中断允许、优先级设定
  3. 中断服务程序
    - 保护现场
    - 切换工作寄存器区
    - 执行中断工作
    - RETI
ORG 0000H                ;主程序
LJMP START
ORG 0003H
LJMP INT0INORG 0040H
START:SETB EASETB EX0     ;下降沿触发,EX0允许INT0中断...ORG 0100H
INT0IN:                       ;四个区                     R0~R7区1:00H~07HPUSH PSW   ; 区2或区3都可以     R0~R7区2:08H~0FHSETB RS0; --设置工作寄存器区3  R0~R7区3:10H~17HSETB RS1; --11第3区                    R0~R7区4:18H~1FH...POP PSWRETI              ;保存中断返回地址

C51中断编程

  1. 主程序(允许中断、中断优先级)
  2. 中断函数(interrupt、保护现场)
中断函数

中断函数使用interrupt m进行修饰。当函数定义时用了interrupt m修饰符,系统编译时把对应函数转化为中断函数,自动加上程序头段和尾段,并按MCS-51系统中断的处理方式自动把它安排在程序存储器中的相应位置。
在该修饰符中,m的取值为0~31,对应的中断情况如下:
0——外部中断0
1——定时/计数器T0
2——外部中断1
3——定时/计数器T1
4——串行口中断
5——定时/计数器T2
其它值预留。

编写MCS-51中断函数的注意事项:
1. 中断函数不能进行参数传递
2. 中断函数没有返回值
3. 不能直接调用中断函数
4. 中断函数中调用的其他函数所使用的寄存器必须与中断函数相同
5. 中断函数最好写在文件的尾部

实例:
编写一个用于统计外中断0的中断次数的中断服务程序。

extern int x;
void int0() interrupt 0 using 1
{x++;
}

相关文章:

  • 34.1STM32下的can总线实现知识(区分linux)_csdn
  • java判断一个字符串(如 str1)是否在给定的一组字符串
  • linux如何配置wifi连接
  • 微信小程序开发一个自定义组件的详细教程
  • LLM应用开发(九)- 幻觉及如何缓解
  • gateway 网关 路由新增 (已亲测)
  • HarmonyOS 实战:给笔记应用加防截图水印
  • EMCC 13c 报错 “Metrics Global Cache Blocks Lost is at XXX“ 解决
  • 大语言模型备案与深度合成算法备案的区别与联系
  • yoloe优化:可支持点提示进行检测分割
  • Python训练第四十四天
  • Windows系统下npm报错node-gyp configure got “gyp ERR“解决方法
  • Kafka消息队列笔记
  • 10. MySQL索引
  • Windows系统工具:WinToolsPlus 之 SQL Server Suspect/质疑/置疑/可疑/单用户等 修复
  • ​BEV和OCC学习-3:mmdet3d 坐标系
  • Spark实战能力测评模拟题精析【模拟考】
  • webpack打包学习
  • Webpack性能优化:构建速度与体积优化策略
  • 6.4本日总结
  • 男同志做爰网站/山东疫情最新情况
  • 专门做asmr的网站/2345网址导航用户中心
  • 营销型和展示型网站/360提交网站收录入口
  • 怎么用vs做动态网站/seo优化网络推广
  • 上海沪港建设咨询有限公司网站/惠州优化怎么做seo
  • 企业电子商务的网站的建设方式/bing搜索引擎国内版