- 8085 微处理器
- 微处理器 - 8085 架构
- 8085 引脚配置
- 寻址方式和中断
- 8085 指令集
- 多处理器配置
- 配置概述
- 8087 数值数据处理器
- I/O 接口
- I/O 接口概述
- 8279 可编程键盘
- 8257 DMA 控制器
- 微处理器有用资源
- 微处理器快速指南
- 微处理器 - 有用资源
- 微处理器 - 讨论
微处理器快速指南
微处理器 - 概述
微处理器是微型计算机的控制单元,制造在一个小型芯片上,能够执行算术逻辑单元 (ALU) 操作并与连接到它的其他设备通信。
微处理器由算术逻辑单元 (ALU)、寄存器阵列和控制单元组成。ALU 对从内存或输入设备接收的数据执行算术和逻辑运算。寄存器阵列由用字母(如 B、C、D、E、H、L 和累加器)标识的寄存器组成。控制单元控制计算机内的数据和指令的流程。
基本微型计算机的框图
微处理器是如何工作的?
微处理器遵循以下顺序:取指令、解码和执行。
最初,指令按顺序存储在内存中。微处理器从内存中获取这些指令,然后对其进行解码并执行这些指令,直到到达 STOP 指令。之后,它将结果以二进制形式发送到输出端口。在这些过程之间,寄存器存储临时数据,ALU 执行计算功能。
微处理器中使用的术语列表
以下是微处理器中一些常用术语的列表:
指令集 - 微处理器可以理解的指令集。
带宽 - 单条指令中处理的位数。
时钟速度 - 确定处理器每秒可以执行的操作次数。以兆赫兹 (MHz) 或千兆赫兹 (GHz) 表示。也称为时钟频率。
字长 - 取决于内部数据总线、寄存器、ALU 等的宽度。8 位微处理器一次可以处理 8 位数据。字长范围从 4 位到 64 位,具体取决于微型计算机的类型。
数据类型 - 微处理器具有多种数据类型格式,例如二进制、BCD、ASCII、有符号数和无符号数。
微处理器的特点
以下是任何微处理器的一些最突出的特点:
经济高效 - 微处理器芯片价格低廉,因此成本低。
尺寸小巧 - 微处理器芯片尺寸小,便于携带。
低功耗 - 微处理器采用金属氧化物半导体技术制造,功耗低。
通用性强 - 微处理器用途广泛,可以通过配置软件程序在许多应用程序中使用相同的芯片。
可靠性高 - 微处理器中集成电路的故障率非常低,因此非常可靠。
微处理器 - 分类
微处理器可分为三类:
精简指令集计算机 (RISC) 处理器
RISC 代表精简指令集计算机。它旨在通过简化计算机的指令集来减少执行时间。使用 RISC 处理器,每条指令只需要一个时钟周期即可执行,从而实现统一的执行时间。但这降低了效率,因为代码行数更多,因此需要更多 RAM 来存储指令。编译器也必须做更多工作才能将高级语言指令转换为机器码。
一些 RISC 处理器包括:
- Power PC:601、604、615、620
- DEC Alpha:210642、211066、21068、21164
- MIPS:TS (R10000) RISC 处理器
- PA-RISC:HP 7100LC
RISC 架构
RISC 微处理器架构使用高度优化的指令集。由于其功耗效率,它被用于苹果 iPod 等便携式设备中。
RISC 的特点
RISC 处理器的主要特点如下:
它包含简单的指令。
它支持各种数据类型格式。
它使用简单的寻址模式和固定长度指令进行流水线处理。
它支持在任何上下文中使用寄存器。
单周期执行时间。
“LOAD”和“STORE”指令用于访问内存位置。
它包含大量寄存器。
它包含较少数量的晶体管。
复杂指令集计算机 (CISC) 处理器
CISC 代表复杂指令集计算机。它旨在最大限度地减少每个程序的指令数量,而忽略每条指令的周期数。重点是将复杂指令直接嵌入到硬件中。
编译器只需要做很少的工作就能将高级语言转换为汇编语言/机器码,因为代码长度相对较短,所以只需要很少的 RAM 来存储指令。
一些 CISC 处理器包括:
- IBM 370/168
- VAX 11/780
- Intel 80486
CISC 架构
其架构旨在降低内存成本,因为较大的程序需要更多存储空间,导致更高的内存成本。为了解决这个问题,可以通过将多个操作嵌入到单个指令中来减少每个程序的指令数量。
CISC 的特点
- 各种寻址模式。
- 大量指令。
- 可变长度的指令格式。
- 执行一条指令可能需要多个周期。
- 指令解码逻辑复杂。
- 一条指令需要支持多种寻址模式。
专用处理器
这些处理器是为某些特殊用途而设计的。下面简要介绍了一些专用处理器:
协处理器
协处理器是一种专门设计的微处理器,它可以处理其特定功能的速度比普通微处理器快很多倍。
例如 - 数学协处理器。
一些 Intel 数学协处理器包括:
- 8087 - 与 8086 一起使用
- 80287 - 与 80286 一起使用
- 80387 - 与 80386 一起使用
输入/输出处理器
它是一种专门设计的微处理器,具有自己的本地内存,用于在最少 CPU 参与的情况下控制 I/O 设备。
例如:
- DMA(直接内存访问)控制器
- 键盘/鼠标控制器
- 图形显示控制器
- SCSI 端口控制器
超立方体 (Transputer)
超立方体是一种专门设计的微处理器,具有自己的本地内存,并具有连接一个超立方体到另一个超立方体以进行处理器间通信的链路。它于 1980 年由 Inmos 首次设计,目标是利用 VLSI 技术。
超立方体可以用作单处理器系统,也可以连接到外部链路,这降低了建设成本并提高了性能。
例如 - 16 位 T212、32 位 T425、浮点 (T800、T805 和 T9000) 处理器。
数字信号处理器 (DSP)
此处理器专门设计用于将模拟信号处理成数字形式。这是通过定期采样电压水平并将该时刻的电压转换为数字形式来完成的。此过程由称为模数转换器、A 到 D 转换器或 ADC 的电路执行。
DSP 包含以下组件:
程序存储器 - 它存储 DSP 用于处理数据的程序。
数据存储器 - 它存储要处理的信息。
计算引擎 - 它执行数学处理,从程序存储器访问程序,从数据存储器访问数据。
输入/输出 - 它连接到外部世界。
其应用包括:
- 声音和音乐合成
- 音频和视频压缩
- 视频信号处理
- 2D 和 3D 图形加速。
例如 - 德州仪器的 TMS 320 系列,例如 TMS 320C40、TMS320C50。
微处理器 - 8085 架构
8085 读作“八十-八十五”微处理器。它是英特尔于 1977 年使用 NMOS 技术设计的 8 位微处理器。
它具有以下配置:
- 8 位数据总线
- 16 位地址总线,最多可寻址 64KB
- 16 位程序计数器
- 16 位堆栈指针
- 六个 8 位寄存器成对排列:BC、DE、HL
- 需要 +5V 电源才能以 3.2 MHz 单相时钟运行
它用于洗衣机、微波炉、移动电话等。
8085 微处理器 - 功能单元
8085 包含以下功能单元:
累加器
这是一个 8 位寄存器,用于执行算术、逻辑、I/O 和 LOAD/STORE 操作。它连接到内部数据总线和 ALU。
算术逻辑单元
顾名思义,它对 8 位数据执行算术和逻辑运算,如加法、减法、AND、OR 等。
通用寄存器
8085 处理器中有 6 个通用寄存器,即 B、C、D、E、H 和 L。每个寄存器可以保存 8 位数据。
这些寄存器可以成对工作以保存 16 位数据,其配对组合类似于 B-C、D-E 和 H-L。
程序计数器
这是一个 16 位寄存器,用于存储要执行的下一条指令的内存地址位置。每执行一条指令,微处理器都会递增程序计数器,以便程序计数器指向将要执行的下一条指令的内存地址。
堆栈指针
它也是一个 16 位寄存器,像堆栈一样工作,在 push 和 pop 操作期间始终递增/递减 2。
临时寄存器
这是一个 8 位寄存器,它保存算术和逻辑运算的临时数据。
标志寄存器
这是一个 8 位寄存器,具有五个 1 位触发器,根据存储在累加器中的结果保存 0 或 1。
这五个触发器是:
- 符号 (S)
- 零 (Z)
- 辅助进位 (AC)
- 奇偶校验 (P)
- 进位 (C)
其位位置如下表所示:
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
S | Z | AC | P | CY |
指令寄存器和解码器
这是一个 8 位寄存器。当从内存中获取指令时,它存储在指令寄存器中。指令解码器解码指令寄存器中存在的信息。
定时和控制单元
它为微处理器提供定时和控制信号以执行操作。以下是控制外部和内部电路的定时和控制信号:
- 控制信号:READY,RD’,WR’,ALE
- 状态信号:S0,S1,IO/M’
- DMA信号:HOLD,HLDA
- 复位信号:RESET IN,RESET OUT
中断控制
顾名思义,它控制进程中的中断。当微处理器正在执行主程序,并且发生中断时,微处理器将控制从主程序转移到处理传入的请求。请求完成后,控制返回主程序。
8085微处理器有5个中断信号:INTR,RST 7.5,RST 6.5,RST 5.5,TRAP。
串行输入/输出控制
它使用这两个指令控制串行数据通信:SID(串行输入数据)和SOD(串行输出数据)。
地址缓冲器和地址数据缓冲器
将堆栈指针和程序计数器中存储的内容加载到地址缓冲器和地址数据缓冲器中,以与CPU通信。内存和I/O芯片连接到这些总线上;CPU可以与内存和I/O芯片交换所需的数据。
地址总线和数据总线
数据总线承载要存储的数据。它是双向的,而地址总线承载数据应该存储到的位置,它是单向的。它用于传输数据和地址I/O设备。
8085架构
我们尝试使用以下图像描述8085的架构:
微处理器 - 8085引脚配置
下图显示了8085微处理器的引脚图:
8085微处理器的引脚可以分为七组:
地址总线
A15-A8,它承载内存/IO地址的最高有效8位。
数据总线
AD7-AD0,它承载最低有效8位地址和数据总线。
控制和状态信号
这些信号用于识别操作的性质。有3个控制信号和3个状态信号。
三个控制信号是RD、WR和ALE。
RD - 此信号表示所选的IO或内存设备将被读取,并已准备好接收数据总线上可用的数据。
WR - 此信号表示数据总线上的数据将被写入选定的内存或IO位置。
ALE - 这是微处理器启动新操作时产生的正脉冲。当脉冲变高时,它表示地址。当脉冲变低时,它表示数据。
三个状态信号是IO/M、S0和S1。
IO/M
此信号用于区分IO和内存操作,即当它为高时表示IO操作,当它为低时表示内存操作。
S1和S0
这些信号用于识别当前操作的类型。
电源
有2个电源信号 - VCC和VSS。VCC表示+5v电源,VSS表示接地信号。
时钟信号
有3个时钟信号,即X1、X2、CLK OUT。
X1,X2 - 晶体(RC,LC网络)连接在这两个引脚上,用于设置内部时钟发生器的频率。此频率在内部除以2。
CLK OUT - 此信号用作与微处理器连接的设备的系统时钟。
中断和外部启动信号
中断是由外部设备生成的信号,请求微处理器执行任务。有5个中断信号,即TRAP、RST 7.5、RST 6.5、RST 5.5和INTR。我们将在中断部分详细讨论中断。
INTA - 这是一个中断确认信号。
RESET IN - 此信号用于通过将程序计数器设置为零来复位微处理器。
RESET OUT - 当微处理器复位时,此信号用于复位所有连接的设备。
READY - 此信号表示设备已准备好发送或接收数据。如果READY为低,则CPU必须等待READY变高。
HOLD - 此信号表示另一个主设备正在请求使用地址和数据总线。
HLDA(HOLD Acknowledge) - 它表示CPU已收到HOLD请求,它将在下一个时钟周期释放总线。在HOLD信号移除后,HLDA设置为低。
串行I/O信号
有2个串行信号,即SID和SOD,这些信号用于串行通信。
SOD(串行输出数据线) - 如SIM指令指定的,输出SOD被设置/复位。
SID(串行输入数据线) - 每当执行RIM指令时,此线路上的数据就会加载到累加器中。
8085寻址模式和中断
现在让我们讨论8085微处理器的寻址模式。
8085中的寻址模式
这些指令用于在不更改内容的情况下将数据从一个寄存器传输到另一个寄存器,从内存到寄存器,以及从寄存器到内存。8085中的寻址模式分为5组:
立即寻址模式
在这种模式下,8/16位数据在指令本身中作为其操作数之一指定。**例如:**MVI K, 20F:表示将20F复制到寄存器K。
寄存器寻址模式
在这种模式下,数据从一个寄存器复制到另一个寄存器。**例如:**MOV K, B:表示寄存器B中的数据被复制到寄存器K。
直接寻址模式
在这种模式下,数据直接从给定地址复制到寄存器。**例如:**LDB 5000K:表示地址5000K处的数据被复制到寄存器B。
间接寻址模式
在这种模式下,数据通过使用寄存器指向的地址从一个寄存器传输到另一个寄存器。**例如:**MOV K, B:表示数据从寄存器指向的内存地址传输到寄存器K。
隐含寻址模式
此模式不需要任何操作数;数据由操作码本身指定。**例如:**CMP。
8085中的中断
中断是由外部设备生成的信号,请求微处理器执行任务。有5个中断信号,即TRAP、RST 7.5、RST 6.5、RST 5.5和INTR。
根据其参数,中断分为以下几组:
向量中断 - 在这种类型的中断中,中断地址为处理器所知。**例如:**RST7.5,RST6.5,RST5.5,TRAP。
非向量中断 - 在这种类型的中断中,中断地址对处理器未知,因此需要由设备外部发送中断地址来执行中断。**例如:**INTR。
可屏蔽中断 - 在这种类型的中断中,我们可以通过向程序写入一些指令来禁用中断。**例如:**RST7.5,RST6.5,RST5.5。
不可屏蔽中断 - 在这种类型的中断中,我们不能通过向程序写入一些指令来禁用中断。**例如:**TRAP。
软件中断 - 在这种类型的中断中,程序员必须向程序添加指令来执行中断。8085中有8个软件中断,即RST0、RST1、RST2、RST3、RST4、RST5、RST6和RST7。
硬件中断 - 8085中有5个中断引脚用作硬件中断,即TRAP、RST7.5、RST6.5、RST5.5、INTA。
注意 - NTA不是中断,它被微处理器用于发送确认。TRAP具有最高优先级,然后是RST7.5,依此类推。
中断服务程序(ISR)
一个小的程序或例程,当执行时,为相应的中断源提供服务,称为ISR。
TRAP
这是一个不可屏蔽中断,在所有中断中具有最高的优先级。默认情况下,它被启用,直到它被确认。如果失败,它将作为ISR执行并将数据发送到备份内存。此中断将控制转移到0024H位置。
RST7.5
这是一个可屏蔽中断,在所有中断中具有第二高的优先级。当执行此中断时,处理器将PC寄存器的內容保存到堆栈中,并跳转到003CH地址。
RST 6.5
这是一个可屏蔽中断,在所有中断中具有第三高的优先级。当执行此中断时,处理器将PC寄存器的內容保存到堆栈中,并跳转到0034H地址。
RST 5.5
这是一个可屏蔽中断。当执行此中断时,处理器将PC寄存器的內容保存到堆栈中,并跳转到002CH地址。
INTR
这是一个可屏蔽中断,在所有中断中具有最低的优先级。可以通过复位微处理器来禁用它。
当INTR信号变高时,可能会发生以下事件:
微处理器在执行每条指令期间都会检查INTR信号的状态。
当INTR信号为高时,微处理器将完成其当前指令并发送有效低中断确认信号。
当接收到指令时,微处理器将保存堆栈上下一条指令的地址并执行接收到的指令。
微处理器 - 8085指令集
让我们来看一下8085微处理器的编程。
指令集是执行某些任务的指令代码。它分为五类。
序号 | 指令和描述 |
---|---|
1 | 控制指令
下表显示了控制指令及其含义的列表。 |
2 | 逻辑指令
下表显示了逻辑指令及其含义的列表。 |
3 | 分支指令
下表显示了分支指令及其含义的列表。 |
4 | 算术指令
下表显示了算术指令及其含义的列表。 |
5 | 数据传输指令
下表显示了数据传输指令及其含义的列表。 |
8085 – 演示程序
现在,让我们来看一些使用上述指令的程序演示:
添加两个8位数字
编写一个程序,将3005H和3006H内存位置的数据相加,并将结果存储到3007H内存位置。
问题演示 -
(3005H) = 14H (3006H) = 89H
结果 -
14H + 89H = 9DH
程序代码可以这样编写:
LXI H 3005H : "HL points 3005H" MOV A, M : "Getting first operand" INX H : "HL points 3006H" ADD M : "Add second operand" INX H : "HL points 3007H" MOV M, A : "Store result at 3007H" HLT : "Exit program"
交换内存位置
编写一个程序来交换5000M和6000M内存位置的数据。
LDA 5000M : "Getting the contents at5000M location into accumulator" MOV B, A : "Save the contents into B register" LDA 6000M : "Getting the contents at 6000M location into accumulator" STA 5000M : "Store the contents of accumulator at address 5000M" MOV A, B : "Get the saved contents back into A register" STA 6000M : "Store the contents of accumulator at address 6000M"
将数字按升序排列
编写一个程序,将从3000H内存地址开始的前10个数字按升序排列。
MVI B, 09 :"Initialize counter" START :"LXI H, 3000H: Initialize memory pointer" MVI C, 09H :"Initialize counter 2" BACK: MOV A, M :"Get the number" INX H :"Increment memory pointer" CMP M :"Compare number with next number" JC SKIP :"If less, don’t interchange" JZ SKIP :"If equal, don’t interchange" MOV D, M MOV M, A DCX H MOV M, D INX H :"Interchange two numbers" SKIP:DCR C :"Decrement counter 2" JNZ BACK :"If not zero, repeat" DCR B :"Decrement counter 1" JNZ START HLT :"Terminate program execution"
微处理器 - 8086 概述
8086微处理器是英特尔于1976年设计的8085微处理器的增强版。它是一个16位微处理器,具有20条地址线和16条数据线,可提供高达1MB的存储空间。它包含强大的指令集,可以轻松地执行乘法和除法等操作。
它支持两种操作模式,即最大模式和最小模式。最大模式适用于具有多个处理器的系统,最小模式适用于具有单个处理器的系统。
8086的特性
8086微处理器的最显著特性如下:
它有一个指令队列,能够从内存中存储六个指令字节,从而加快处理速度。
它是第一个具有16位ALU、16位寄存器、内部数据总线和16位外部数据总线的16位处理器,从而加快了处理速度。
它根据工作频率有3个版本:
8086 → 5MHz
8086-2 → 8MHz
(c)8086-1 → 10 MHz
它使用两个阶段的流水线,即取指阶段和执行阶段,这提高了性能。
取指令阶段可以预取最多 6 个字节的指令并将它们存储在队列中。
执行阶段执行这些指令。
它具有 256 个矢量中断。
它由 29,000 个晶体管组成。
8085 和 8086 微处理器比较
大小 - 8085 是 8 位微处理器,而 8086 是 16 位微处理器。
地址总线 - 8085 具有 16 位地址总线,而 8086 具有 20 位地址总线。
内存 - 8085 可以访问最多 64KB,而 8086 可以访问最多 1MB 的内存。
指令 - 8085 没有指令队列,而 8086 有指令队列。
流水线 - 8085 不支持流水线架构,而 8086 支持流水线架构。
I/O - 8085 可以寻址 2^8 = 256 个 I/O,而 8086 可以访问 2^16 = 65,536 个 I/O。
成本 - 8085 的成本较低,而 8086 的成本较高。
8086 架构
下图显示了 8086 微处理器的架构 -
微处理器 - 8086 功能单元
8086 微处理器分为两个功能单元,即EU(执行单元)和BIU(总线接口单元)。
EU(执行单元)
执行单元向 BIU 指示从哪里取数据,然后解码并执行这些指令。其功能是使用指令解码器和 ALU 控制数据操作。如上图所示,EU 与系统总线没有直接连接,它通过 BIU 对数据执行操作。
现在让我们讨论 8086 微处理器的功能部件。
ALU
它处理所有算术和逻辑运算,例如 +、-、×、/、OR、AND、NOT 运算。
标志寄存器
这是一个 16 位寄存器,其行为类似于触发器,即它根据累加器中存储的结果改变其状态。它有 9 个标志,分为两组 - 条件标志和控制标志。
条件标志
它表示最后执行的算术或逻辑指令的结果。以下是条件标志的列表 -
进位标志 - 此标志指示算术运算的溢出情况。
辅助进位标志 - 当在 ALU 执行运算时,它会导致从低位 nibble(即 D0 – D3)到高位 nibble(即 D4 – D7)的进位/借位,则设置此标志,即 D3 位到 D4 的进位是 AF 标志。处理器使用此标志执行二进制到 BCD 的转换。
奇偶标志 - 此标志用于指示结果的奇偶性,即当结果的低 8 位包含偶数个 1 时,则设置奇偶标志。对于奇数个 1,奇偶标志被复位。
零标志 - 当算术或逻辑运算的结果为零时,此标志设置为 1,否则设置为 0。
符号标志 - 此标志保存结果的符号,即当操作的结果为负时,符号标志设置为 1,否则设置为 0。
溢出标志 - 此标志表示系统容量超过时的结果。
控制标志
控制标志控制执行单元的操作。以下是控制标志的列表 -
陷阱标志 - 它用于单步控制,并允许用户一次执行一条指令进行调试。如果设置了它,则程序可以以单步模式运行。
中断标志 - 它是一个中断启用/禁用标志,即用于允许/禁止程序中断。对于中断启用状态,它设置为 1;对于中断禁用状态,它设置为 0。
方向标志 - 它用于字符串操作。顾名思义,当它被设置时,字符串字节从较高的内存地址访问到较低的内存地址,反之亦然。
通用寄存器
有 8 个通用寄存器,即 AH、AL、BH、BL、CH、CL、DH 和 DL。这些寄存器可以单独用于存储 8 位数据,也可以成对使用以存储 16 位数据。有效的寄存器对是 AH 和 AL、BH 和 BL、CH 和 CL 以及 DH 和 DL。它们分别称为 AX、BX、CX 和 DX。
AX 寄存器 - 也称为累加器寄存器。它用于存储算术运算的操作数。
BX 寄存器 - 用作基址寄存器。它用于存储数据段内内存区域的起始基址。
CX 寄存器 - 称为计数器。它在循环指令中用于存储循环计数器。
DX 寄存器 - 此寄存器用于保存 I/O 指令的 I/O 端口地址。
堆栈指针寄存器
这是一个 16 位寄存器,它保存从段的起始位置到内存位置的地址,最近存储在堆栈上的字就在该位置。
BIU(总线接口单元)
BIU 负责 EU 在总线上进行的所有数据和地址传输,例如发送地址、从内存中取指令、从端口和内存中读取数据以及将数据写入端口和内存。EU 与系统总线没有直接连接,因此这可以通过 BIU 实现。EU 和 BIU 通过内部总线连接。
它具有以下功能部件 -
指令队列 - BIU 包含指令队列。BIU 获取多达 6 个字节的下一条指令并将它们存储在指令队列中。当 EU 执行指令并准备好其下一条指令时,它只需从指令队列中读取指令,从而提高执行速度。
在执行当前指令的同时获取下一条指令称为流水线。
段寄存器 - BIU 有 4 个段总线,即 CS、DS、SS 和 ES。它保存内存中指令和数据的地址,处理器使用这些地址来访问内存位置。它还包含 1 个指针寄存器 IP,它保存 EU 要执行的下一条指令的地址。
CS - 代表代码段。它用于寻址内存中代码段中的内存位置,可执行程序存储在该位置。
DS - 代表数据段。它包含程序使用的数据,并通过偏移地址或保存偏移地址的其他寄存器的內容在数据段中被访问。
SS - 代表堆栈段。它处理在执行期间存储数据和地址的内存。
ES - 代表附加段。ES 是附加数据段,字符串使用它来保存额外的目标数据。
指令指针 - 这是一个 16 位寄存器,用于保存要执行的下一条指令的地址。
微处理器 - 8086 引脚配置
8086 是第一个采用 40 引脚 DIP(双列直插式封装)芯片的 16 位微处理器。现在让我们详细讨论 8086 微处理器的引脚配置。
8086 引脚图
以下是 8086 微处理器的引脚图 -
现在让我们详细讨论这些信号 -
电源和频率信号
它在 VCC 引脚 40 使用 5V 直流电源,并在 VSS 引脚 1 和 20 使用接地用于其操作。
时钟信号
时钟信号通过引脚 19 提供。它为处理器的操作提供时序。其频率对于不同的版本是不同的,即 5MHz、8MHz 和 10MHz。
地址/数据总线
AD0-AD15。这些是 16 位地址/数据总线。AD0-AD7 传输低位字节数据,AD8-AD15 传输高位字节数据。在第一个时钟周期期间,它传输 16 位地址,之后它传输 16 位数据。
地址/状态总线
A16-A19/S3-S6。这些是 4 位地址/状态总线。在第一个时钟周期期间,它传输 4 位地址,之后它传输状态信号。
S7/BHE
BHE 代表总线高位启用。它位于引脚 34,用于指示使用数据总线 D8-D15 传输数据。此信号在第一个时钟周期期间为低电平,之后它处于活动状态。
读取($\overline{RD}$)
它位于引脚 32,用于读取操作的读取信号。
就绪
它位于引脚 22。它是来自 I/O 设备的数据传输确认信号。它是一个高电平有效信号。当它为高电平时,表示设备已准备好传输数据。当它为低电平时,表示等待状态。
复位
它位于引脚 21,用于重新启动执行。它会导致处理器立即终止其当前活动。此信号在前 4 个时钟周期内为高电平以复位微处理器。
INTR
它位于引脚 18。这是一个中断请求信号,在每条指令的最后一个时钟周期对其进行采样以确定处理器是否将其视为中断。
NMI
代表非屏蔽中断,位于引脚 17。它是一个边沿触发的输入,会导致向微处理器发出中断请求。
$\overline{TEST}$
此信号类似于等待状态,位于引脚 23。当此信号为高电平时,处理器必须等待空闲状态,否则执行继续。
MN/$\overline{MX}$
代表最小/最大,位于引脚 33。它指示处理器要以何种模式运行;当它为高电平时,它以最小模式工作,反之亦然。
INTA
它是一个中断确认信号,位于引脚 24。当微处理器接收到此信号时,它会确认中断。
ALE
代表地址启用锁存器,位于引脚 25。每次处理器开始任何操作时都会产生一个正脉冲。此信号指示地址/数据线上有效地址的可用性。
DEN
代表数据启用,位于引脚 26。它用于启用收发器 8286。收发器是一个用于将数据与地址/数据总线分开的设备。
DT/R
代表数据传输/接收信号,位于引脚 27。它决定数据通过收发器的流动方向。当它为高电平时,数据被传输出去,反之亦然。
M/IO
此信号用于区分存储器和I/O操作。高电平时表示I/O操作,低电平时表示存储器操作。它位于28引脚。
WR
代表写信号,位于29引脚。根据M/IO信号的状态,它用于将数据写入内存或输出设备。
HLDA
代表保持确认信号,位于30引脚。此信号确认HOLD信号。
HOLD
此信号指示处理器外部设备正在请求访问地址/数据总线。它位于31引脚。
QS1和QS0
这些是队列状态信号,位于24和25引脚。这些信号提供指令队列的状态。其状态如下表所示:
QS0 | QS1 | 状态 |
---|---|---|
0 | 0 | 无操作 |
0 | 1 | 队列中操作码的第一个字节 |
1 | 0 | 清空队列 |
1 | 1 | 队列中的后续字节 |
S0, S1, S2
这些是状态信号,提供操作状态,由总线控制器8288用于生成内存和I/O控制信号。它们位于26、27和28引脚。下表显示了它们的状态:
S2 | S1 | S0 | 状态 |
---|---|---|---|
0 | 0 | 0 | 中断确认 |
0 | 0 | 1 | I/O读 |
0 | 1 | 0 | I/O写 |
0 | 1 | 1 | 暂停 |
1 | 0 | 0 | 操作码提取 |
1 | 0 | 1 | 内存读 |
1 | 1 | 0 | 内存写 |
1 | 1 | 1 | 被动 |
LOCK
当此信号激活时,它指示其他处理器不要请求CPU释放系统总线。它通过在任何指令上使用LOCK前缀来激活,位于29引脚。
RQ/GT1和RQ/GT0
这些是请求/授权信号,由其他处理器用于请求CPU释放系统总线。当CPU收到信号时,它会发送确认。RQ/GT0优先级高于RQ/GT1。
微处理器 - 8086指令集
8086微处理器支持8种类型的指令:
- 数据传输指令
- 算术指令
- 位操作指令
- 字符串指令
- 程序执行转移指令(分支和循环指令)
- 处理器控制指令
- 迭代控制指令
- 中断指令
现在让我们详细讨论这些指令集。
数据传输指令
这些指令用于将数据从源操作数传输到目标操作数。以下是此组中的指令列表:
传输字的指令
MOV − 用于将字节或字从提供的源复制到提供的目标。
PUSH − 用于将字压入堆栈顶部。
POP − 用于将字从堆栈顶部弹出到指定位置。
PUSHA − 用于将所有寄存器压入堆栈。
POPA − 用于将字从堆栈弹出到所有寄存器。
XCHG − 用于交换两个位置的数据。
XLAT − 用于使用内存中的表转换AL中的字节。
输入和输出端口传输指令
IN − 用于将字节或字从指定端口读取到累加器。
OUT − 用于将字节或字从累加器发送到指定端口。
传输地址的指令
LEA − 用于将操作数的地址加载到指定的寄存器。
LDS − 用于从内存加载DS寄存器和其他指定的寄存器。
LES − 用于从内存加载ES寄存器和其他指定的寄存器。
传输标志寄存器的指令
LAHF − 用于将标志寄存器的低字节加载到AH中。
SAHF − 用于将AH寄存器存储到标志寄存器的低字节。
PUSHF − 用于将标志寄存器复制到堆栈顶部。
POPF − 用于将堆栈顶部的字复制到标志寄存器。
算术指令
这些指令用于执行算术运算,如加法、减法、乘法、除法等。
以下是此组中的指令列表:
执行加法的指令
ADD − 用于将提供的字节加到字节/字或字加到字。
ADC − 用于带进位的加法。
INC − 用于将提供的字节/字加1。
AAA − 用于加法后调整ASCII码。
DAA − 用于加法/减法运算后调整十进制数。
执行减法的指令
SUB − 用于从字节/字中减去字节或从字中减去字。
SBB − 用于带借位的减法。
DEC − 用于将提供的字节/字减1。
NEG − 用于反转提供的字节/字的每一位并加1/求补码。
CMP − 用于比较两个提供的字节/字。
AAS − 用于减法后调整ASCII码。
DAS − 用于减法后调整十进制数。
执行乘法的指令
MUL − 用于将无符号字节乘以字节/字乘以字。
IMUL − 用于将有符号字节乘以字节/字乘以字。
AAM − 用于乘法后调整ASCII码。
执行除法的指令
DIV − 用于将无符号字除以字节或将无符号双字除以字。
IDIV − 用于将有符号字除以字节或将有符号双字除以字。
AAD − 用于除法后调整ASCII码。
CBW − 用于用低字节的符号位的副本填充字的高字节。
CWD − 用于用低字的符号位填充双字的高字。
位操作指令
这些指令用于执行涉及数据位的操作,即逻辑、移位等操作。
以下是此组中的指令列表:
执行逻辑运算的指令
NOT − 用于反转字节或字的每一位。
AND − 用于将字节/字中的每一位与另一个字节/字中的对应位相加。
OR − 用于将字节/字中的每一位与另一个字节/字中的对应位相乘。
XOR − 用于对字节/字中的每一位与另一个字节/字中的对应位执行异或运算。
TEST − 用于将操作数相加以更新标志,而不会影响操作数。
执行移位操作的指令
SHL/SAL − 用于将字节/字的位向左移动并将零(S)放入最低有效位。
SHR − 用于将字节/字的位向右移动并将零(S)放入最高有效位。
SAR − 用于将字节/字的位向右移动并将旧的最高有效位复制到新的最高有效位。
执行旋转操作的指令
ROL − 用于将字节/字的位向左旋转,即最高有效位到最低有效位,以及到进位标志[CF]。
ROR − 用于将字节/字的位向右旋转,即最低有效位到最高有效位,以及到进位标志[CF]。
RCR − 用于将字节/字的位向右旋转,即最低有效位到CF,以及CF到最高有效位。
RCL − 用于将字节/字的位向左旋转,即最高有效位到CF,以及CF到最低有效位。
字符串指令
字符串是一组字节/字,它们的内存总是按顺序分配的。
以下是此组中的指令列表:
REP − 用于重复给定的指令,直到CX ≠ 0。
REPE/REPZ − 用于重复给定的指令,直到CX = 0或零标志ZF = 1。
REPNE/REPNZ − 用于重复给定的指令,直到CX = 0或零标志ZF = 0。
MOVS/MOVSB/MOVSW − 用于将字节/字从一个字符串移动到另一个字符串。
COMPS/COMPSB/COMPSW − 用于比较两个字符串的字节/字。
INS/INSB/INSW − 用于将I/O端口的字符串/字节/字输入到提供的内存位置。
OUTS/OUTSB/OUTSW − 用于将提供的内存位置的字符串/字节/字输出到I/O端口。
SCAS/SCASB/SCASW − 用于扫描字符串并将它的字节与AL中的字节或字符串字与AX中的字进行比较。
LODS/LODSB/LODSW − 用于将字符串字节存储到AL中或将字符串字存储到AX中。
程序执行转移指令(分支和循环指令)
这些指令用于在执行期间转移/分支指令。它包括以下指令:
在执行期间无条件转移指令的指令:
CALL − 用于调用过程并将它们的返回地址保存到堆栈。
RET − 用于从过程返回到主程序。
JMP − 用于跳转到提供的地址以继续执行下一条指令。
在执行期间根据某些条件转移指令的指令:
JA/JNBE − 如果高于/不低于/等于指令满足条件则跳转。
JAE/JNB − 如果高于/不低于指令满足条件则跳转。
JBE/JNA − 如果低于/等于/不高于指令满足条件则跳转。
JC − 如果进位标志CF = 1则跳转。
JE/JZ − 如果相等/零标志ZF = 1则跳转。
JG/JNLE − 如果大于/不小于/等于指令满足条件则跳转。
JGE/JNL − 如果大于/等于/不小于指令满足条件则跳转。
JL/JNGE − 如果小于/不大于/等于指令满足条件则跳转。
JLE/JNG − 如果小于/等于/不大于指令满足条件则跳转。
JNC − 如果没有进位标志(CF = 0)则跳转。
JNE/JNZ − 如果不相等/零标志ZF = 0则跳转。
JNO − 如果没有溢出标志OF = 0则跳转。
JNP/JPO − 如果没有奇偶校验/奇数奇偶校验PF = 0则跳转。
JNS − 如果没有符号SF = 0则跳转。
JO − 如果溢出标志OF = 1则跳转。
JP/JPE − 如果奇偶校验/偶数奇偶校验PF = 1则跳转。
JS − 如果符号标志SF = 1则跳转。
处理器控制指令
这些指令用于通过设置/重置标志值来控制处理器操作。
以下是此组中的指令:
STC − 用于将进位标志CF设置为1。
CLC − 用于清除/重置进位标志CF为0。
CMC − 用于对进位标志CF的状态取反。
STD − 用于将方向标志DF设置为1。
CLD − 用于清除/重置方向标志DF为0。
STI − 用于将中断允许标志设置为1,即允许INTR输入。
CLI − 用于将中断允许标志清零,即禁用 INTR 输入。
迭代控制指令
这些指令用于执行给定指令多次。以下是此组下的指令列表:
LOOP − 用于循环执行一组指令,直到条件满足,即 CX = 0
LOOPE/LOOPZ − 用于循环执行一组指令,直到满足 ZF = 1 & CX = 0
LOOPNE/LOOPNZ − 用于循环执行一组指令,直到满足 ZF = 0 & CX = 0
JCXZ − 如果 CX = 0,则跳转到提供的地址
中断指令
这些指令用于在程序执行期间调用中断。
INT − 用于在执行过程中中断程序并调用指定的程序。
INTO − 如果 OF = 1,则用于在执行过程中中断程序
IRET − 用于从中断服务返回主程序
微处理器 - 8086 中断
中断是一种在程序执行期间创建临时暂停的方法,允许外围设备访问微处理器。微处理器通过ISR(中断服务例程)响应中断,ISR 是一个简短的程序,用于指示微处理器如何处理中断。
下图显示了 8086 微处理器中的中断类型:
硬件中断
硬件中断是由任何外围设备通过向微处理器发送指定引脚的信号引起的。
8086 具有两个硬件中断引脚,即 NMI 和 INTR。NMI 是不可屏蔽中断,INTR 是可屏蔽中断,优先级较低。另一个相关的中断引脚是 INTA,称为中断确认。
NMI
它是一个单一的不可屏蔽中断引脚 (NMI),优先级高于可屏蔽中断请求引脚 (INTR),它是 2 型中断。
当此中断被激活时,将发生以下操作:
完成当前正在执行的指令。
将标志寄存器的值压入堆栈。
将返回地址的 CS(代码段)值和 IP(指令指针)值压入堆栈。
IP 从字地址 00008H 的内容加载。
CS 从下一个字地址 0000AH 的内容加载。
中断标志和陷阱标志被重置为 0。
INTR
INTR 是可屏蔽中断,因为只有在使用设置中断标志指令启用中断时,微处理器才会被中断。不应使用清除中断标志指令启用它。
INTR 中断由 I/O 端口激活。如果启用了中断并且禁用了 NMI,则微处理器首先完成当前执行,并在 INTA 引脚上发送两次“0”。第一个“0”表示 INTA 通知外部设备做好准备,在第二个“0”期间,微处理器从可编程中断控制器接收 8 位数据,例如 X。
微处理器将采取以下操作:
首先完成当前指令。
激活 INTA 输出并接收中断类型,例如 X。
将标志寄存器值、返回地址的 CS 值和返回地址的 IP 值压入堆栈。
IP 值从字地址 X × 4 的内容加载。
CS 从下一个字地址的内容加载。
中断标志和陷阱标志被重置为 0
软件中断
在程序中的所需位置插入一些指令以创建中断。这些中断指令可用于测试各种中断处理程序的工作情况。它包括:
INT- 带类型号的中断指令
这是一个 2 字节指令。第一个字节提供操作码,第二个字节提供中断类型号。此组下有 256 种中断类型。
其执行包括以下步骤:
将标志寄存器值压入堆栈。
将返回地址的 CS 值和返回地址的 IP 值压入堆栈。
IP 从字地址“类型号”× 4 的内容加载。
CS 从下一个字地址的内容加载。
中断标志和陷阱标志被重置为 0
0 型中断的起始地址为 000000H,1 型中断的起始地址为 00004H,2 型中断的起始地址为 00008H,依此类推。前五个指针是专用中断指针,即:
0 型中断表示除零情况。
1 型中断表示程序调试期间的单步执行。
2 型中断表示不可屏蔽 NMI 中断。
3 型中断表示断点中断。
4 型中断表示溢出中断。
5 型到 31 型中断保留用于其他高级微处理器,32 型到 255 型中断可用于硬件和软件中断。
INT 3-断点中断指令
这是一个 1 字节指令,操作码为 CCH。这些指令被插入到程序中,以便当处理器到达那里时,它会停止程序的正常执行并遵循断点过程。
其执行包括以下步骤:
将标志寄存器值压入堆栈。
将返回地址的 CS 值和返回地址的 IP 值压入堆栈。
IP 从字地址 3×4 = 0000CH 的内容加载。
CS 从下一个字地址的内容加载。
中断标志和陷阱标志被重置为 0
INTO- 溢出中断指令
这是一个 1 字节指令,其助记符为INTO。此指令的操作码为 CEH。顾名思义,它是一个条件中断指令,即只有当溢出标志设置为 1 时才有效,并跳转到中断类型号为 4 的中断处理程序。如果溢出标志被复位,则执行继续到下一条指令。
其执行包括以下步骤:
标志寄存器值被压入堆栈。
将返回地址的 CS 值和返回地址的 IP 值压入堆栈。
IP 从字地址 4×4 = 00010H 的内容加载。
CS 从下一个字地址的内容加载。
中断标志和陷阱标志被重置为 0
微处理器 - 8086 编址模式
在指令中表示源操作数的不同方法称为编址模式。8086 编程中有 8 种不同的编址模式:
立即寻址模式
数据操作数本身就是指令一部分的编址模式称为立即寻址模式。
示例
MOV CX, 4929 H, ADD AX, 2387 H, MOV AL, FFH
寄存器寻址模式
这意味着寄存器是指令操作数的来源。
示例
MOV CX, AX ; copies the contents of the 16-bit AX register into ; the 16-bit CX register), ADD BX, AX
直接寻址模式
内存位置的有效地址直接写在指令中的编址模式。
示例
MOV AX, [1592H], MOV AL, [0300H]
寄存器间接寻址模式
此编址模式允许通过以下任何寄存器中保存的偏移地址来寻址任何内存位置的数据:BP、BX、DI 和 SI。
示例
MOV AX, [BX] ; Suppose the register BX contains 4895H, then the contents ; 4895H are moved to AX ADD CX, {BX}
基址寻址模式
在此编址模式下,操作数的偏移地址由 BX/BP 寄存器的内容和 8 位/16 位位移的总和给出。
示例
MOV DX, [BX+04], ADD CL, [BX+08]
索引寻址模式
在此编址模式下,操作数的偏移地址通过将 SI 或 DI 寄存器的内容与 8 位/16 位位移相加来找到。
示例
MOV BX, [SI+16], ADD AL, [DI+16]
基址索引寻址模式
在此编址模式下,操作数的偏移地址通过将基址寄存器的内容与索引寄存器的内容相加来计算。
示例
ADD CX, [AX+SI], MOV AX, [AX+DI]
带位移的基址索引寻址模式
在此编址模式下,操作数的偏移地址通过将基址寄存器的内容、索引寄存器的的内容和 8 位或 16 位位移相加来计算。
示例
MOV AX, [BX+DI+08], ADD CX, [BX+SI+16]
多处理器配置概述
多处理器是指同时执行指令的多组处理器。有三种基本的多处理器配置。
- 协处理器配置
- 紧密耦合配置
- 松散耦合配置
协处理器配置
协处理器是微处理器芯片上专门设计的电路,它可以非常快速地执行微处理器执行的相同任务。它减少了主处理器的负载。协处理器共享相同的内存、I/O 系统、总线、控制逻辑和时钟发生器。协处理器处理诸如数学计算、屏幕图形显示等专业任务。
8086 和 8088 可以执行大部分操作,但它们的指令集无法执行复杂的数学运算,因此在这些情况下,微处理器需要数学协处理器,例如英特尔 8087 数学协处理器,它可以轻松快速地执行这些运算。
协处理器配置框图
协处理器和处理器是如何连接的?
协处理器和处理器通过 TEST、RQ-/GT- 和 QS0 & QS1 信号连接。
TEST 信号连接到协处理器的 BUSY 引脚,其余 3 个引脚连接到协处理器上相同名称的 3 个引脚。
TEST 信号负责协处理器的活动,即协处理器是繁忙还是空闲。
RT-/GT- 用于总线仲裁。
协处理器使用 QS0 & QS1 来跟踪主机处理器的队列状态。
紧密耦合配置
紧密耦合配置类似于协处理器配置,即两者共享相同的内存、I/O 系统总线、控制逻辑和控制发生器以及主机处理器。但是,协处理器和主机处理器获取并执行自己的指令。系统总线由协处理器和主机处理器独立控制。
紧密耦合配置框图
处理器和独立处理器是如何连接的?
主机和独立处理器之间的通信通过内存空间进行。
没有指令用于通信,例如 WAIT、ESC 等。
主机处理器管理内存,并通过向其一个端口发送命令来唤醒独立处理器。
然后,独立处理器访问内存以执行任务。
任务完成后,它使用状态信号或中断请求向主机处理器发送确认。
松散耦合配置
松散耦合配置由基于微处理器的系统模块组成,这些模块通过公共系统总线连接。每个模块都有自己的时钟发生器、内存和 I/O 设备,并通过本地总线连接。
松散耦合配置框图
优点
拥有多个处理器可以提高效率。
每个处理器都有自己的本地总线来访问本地内存/I/O 设备。这使得实现并行处理变得容易。
系统结构灵活,即一个模块的故障不会影响整个系统的故障;有故障的模块可以稍后更换。
8087 数值数据处理器
8087 数字数据处理器也称为数学协处理器、数字处理器扩展和浮点单元。它是英特尔设计的第一个数学协处理器,与 8086/8088 配合使用,从而使计算更容易、更快。
一旦 8086/8088 处理器识别出指令,它就会分配给 8087 协处理器进一步执行。
8087 支持的数据类型为:
- 二进制整数
- 压缩十进制数
- 实数
- 临时实数格式
8087 数字数据处理器的最突出特点如下:
它支持整数、浮点数和实数类型的数据,范围从 2 到 10 个字节。
处理速度非常快,它可以在 ~27 µs 内计算两个 64 位实数的乘法,也可以在 ~35 µs 内计算平方根。
它遵循 IEEE 浮点标准。
8087 架构
8087 架构分为两组,即控制单元 (CU) 和数字扩展单元 (NEU)。
控制单元处理处理器和内存之间的所有通信,例如接收和解码指令、读取和写入内存操作数、维护并行队列等。所有协处理器指令都是 ESC 指令,即它们以“F”开头,协处理器只执行 ESC 指令,而其他指令由微处理器执行。
数值扩展单元处理所有数值处理器指令,例如算术、逻辑、超越和数据传输指令。它具有8个寄存器堆栈,用于保存指令的操作数及其结果。
8087协处理器的架构如下:
8087引脚描述
让我们首先看一下8087的引脚图:
以下列表提供了8087的引脚描述:
AD0 – AD15 − 这些是时间复用的地址/数据线,在第一个时钟周期传输地址,从第二个时钟周期开始传输数据。
A19 / S6 – A16/S − 这些线是时间复用的地址/状态线。它的功能与8086的对应引脚类似。S6、S4和S3永久为高电平,而S5永久为低电平。
$\overline{BHE}$/S7 − 在第一个时钟周期,$\overline{BHE}$/S7用于使能8086数据总线的高字节数据,之后作为状态线S7工作。
QS1, QS0 − 这些是队列状态输入信号,提供指令队列的状态,其状态如以下表格所示:
QS0 | QS1 | 状态 |
---|---|---|
0 | 0 | 无操作 |
0 | 1 | 队列中操作码的第一个字节 |
1 | 0 | 清空队列 |
1 | 1 | 队列中的后续字节 |
INT − 这是一个中断信号,当执行过程中接收到未屏蔽的异常时,它变为高电平。
BUSY − 这是一个输出信号,当它为高电平时表示协处理器处于繁忙状态。
READY − 这是一个输入信号,用于通知协处理器总线是否准备好接收数据。
RESET − 这是一个输入信号,用于重置协处理器的内部活动,并在CPU需要时准备进行进一步执行。
CLK − CLK输入提供处理器操作的基本时序。
VCC − 这是一个电源信号,电路工作需要+5V电源。
S0, S1, S2 − 这些是状态信号,提供操作的状态,8087总线控制器使用这些信号生成内存和I/O控制信号。这些信号在第四个时钟周期有效。
S2 | S1 | S0 | 队列状态 |
---|---|---|---|
0 | X | X | 未使用 |
1 | 0 | 0 | 未使用 |
1 | 0 | 1 | 内存读 |
1 | 1 | 0 | 内存写 |
1 | 1 | 1 | 被动 |
RQ/GT1 & RQ/GT0 − 这些是请求/授权信号,8087处理器使用这些信号从主机处理器8086/8088获取总线控制权以进行操作数传输。
微处理器 - I/O接口概述
本章将讨论8085的内存接口和I/O接口。
接口是两个组件之间通信的路径。接口分为两种类型:内存接口和I/O接口。
内存接口
执行任何指令时,都需要微处理器访问内存以读取指令代码和存储在内存中的数据。为此,内存和微处理器都需要一些信号来读取和写入寄存器。
接口过程包括一些关键因素,以匹配内存需求和微处理器信号。因此,接口电路的设计应使其能够将内存信号需求与微处理器的信号匹配。
IO接口
有各种通信设备,例如键盘、鼠标、打印机等。因此,我们需要使用锁存器和缓冲器将键盘和其他设备与微处理器接口。这种类型的接口称为I/O接口。
内存和I/O接口的框图
8085接口引脚
以下是用于与其他设备接口的8085引脚列表:
- A15 - A8(高地址总线)
- AD7 - AD0(低地址/数据总线)
- ALE
- RD
- WR
- READY
通信方式 - 微处理器与外部世界?
微处理器连接外部世界有两种通信方式。
- 串行通信接口
- 并行通信接口
串行通信接口 - 在这种类型的通信中,接口从微处理器获取单个字节的数据,并逐位地将其串行发送到另一个系统,反之亦然。
并行通信接口 - 在这种类型的通信中,接口从微处理器获取一个字节的数据,并将其同时(或)并行地逐位发送到其他系统,反之亦然。
8279 - 可编程键盘
8279可编程键盘/显示控制器由英特尔设计,用于将键盘与CPU接口。键盘首先扫描键盘并识别是否有任何键被按下。然后,它将被按下键的相对响应发送到CPU,反之亦然。
键盘与CPU接口有多少种方式?
键盘可以通过中断模式或轮询模式与CPU接口。在中断模式下,只有在按下任何键时才请求处理器服务,否则CPU将继续其主要任务。
在轮询模式下,CPU定期读取8279的内部标志,以检查是否有键被按下。
8279键盘如何工作?
键盘最多包含64个键,它们使用键码与CPU接口。这些键码经过去抖动处理并存储在8字节FIFO RAM中,CPU可以访问该RAM。如果在FIFO中输入超过8个字符,则意味着一次按下了8个以上的键。这时会设置溢出状态。
如果FIFO包含有效的键输入,则在中断模式下中断CPU,否则CPU在轮询中检查状态以读取输入。一旦CPU读取键输入,FIFO就会更新,键输入就会从FIFO中弹出以腾出空间以供新的输入。
架构和描述
I/O控制和数据缓冲区
该单元控制数据在微处理器中的流动。只有当D为低电平时才启用它。它的数据缓冲区将系统的外部总线与微处理器的内部总线接口。A0、RD和WR引脚用于命令、状态或数据读/写操作。
控制和定时寄存器以及定时控制
该单元包含寄存器,用于存储键盘、显示模式以及CPU编程的其他操作。定时和控制单元处理电路操作的定时。
扫描计数器
它有两种模式,即编码模式和解码模式。在编码模式下,计数器提供二进制计数,该计数将被外部解码以提供键盘和显示器的扫描线。
在解码扫描模式下,计数器内部解码最低两位,并在SL0-SL3上提供解码的1选4扫描。
返回缓冲区、键盘去抖和控制
该单元首先逐行扫描键闭合,如果找到,则键盘去抖单元对键输入进行去抖动处理。如果检测到相同的键,则该键的代码将与SHIFT和CONTROL键状态一起直接传输到传感器RAM。
FIFO/传感器RAM和状态逻辑
该单元充当8字节先进先出(FIFO) RAM,每个被按下键的键码都按其顺序输入到RAM中。状态逻辑在每次FIFO读取操作后生成中断请求,直到FIFO为空。
在扫描传感器矩阵模式下,该单元充当传感器RAM,其每一行都加载了传感器矩阵中相应行的状态。当传感器改变其状态时,IRQ线变为高电平并中断CPU。
显示地址寄存器和显示RAM
该单元包含显示地址寄存器,该寄存器保存CPU当前从显示RAM读/写的数据的地址。
8279 - 引脚描述
下图显示了8279的引脚图:
数据总线线,DB0 - DB7
这是8条双向数据总线,用于与CPU之间传输数据。
CLK
时钟输入用于生成微处理器所需的内部时序。
复位
顾名思义,此引脚用于复位微处理器。
CS片选
当此引脚设置为低电平时,允许读/写操作,否则此引脚应设置为高电平。
A0
此引脚指示命令/状态信息的传输。当它为低电平时,表示数据传输。
RD, WR
此读/写引脚使数据缓冲区能够通过数据总线发送/接收数据。
IRQ
当FIFO传感器RAM中有数据时,此中断输出线变为高电平。每进行一次FIFO RAM读取操作,中断线都变为低电平。但是,如果FIFO RAM中还有任何键码输入需要CPU读取,则此引脚再次变为高电平,从而向CPU生成中断。
Vss, Vcc
这些是微处理器的接地和电源线。
SL0 − SL3
这些是扫描线,用于扫描键盘矩阵和显示数字。可以使用模式控制寄存器将这些线编程为编码或解码。
RL0 − RL7
这些是返回线,连接到键的一个端子,而键的另一个端子连接到解码的扫描线。当按下任何键时,这些线设置为0。
SHIFT
在扫描键盘模式下,Shift输入线状态与FIFO中的每个键码一起存储。在用键闭合将其下拉之前,它会在内部上拉以保持高电平。
CNTL/STB - 控制/选通输入模式
在键盘模式下,此线用作控制输入,并在键闭合时存储在FIFO中。在选通输入模式下,该线是一个选通线,将数据输入FIFO RAM。它具有内部上拉电阻。该线通过键闭合下拉。
BD
它代表空白显示。它用于在数字切换期间使显示变为空白。
OUTA0 – OUTA3 和 OUTB0 – OUTB3
这些是用于两个16x4或一个16x8内部显示刷新寄存器的输出端口。来自这些线的数据与扫描线同步,以扫描显示器和键盘。
8279的操作模式
8279有两种操作模式:输入模式和输出模式。
输入模式
此模式处理键盘给出的输入,此模式进一步分为3种模式。
扫描键盘模式 - 在此模式下,可以使用编码扫描或解码扫描来接口键矩阵。在编码扫描中,可以接口8×8键盘;在解码扫描中,可以接口4×8键盘。带有SHIFT和CONTROL状态的被按下键的代码存储到FIFO RAM中。
扫描传感器矩阵 - 在此模式下,可以使用编码器扫描或解码器扫描将传感器阵列与处理器接口。在编码器扫描中,可以接口8×8传感器矩阵;在解码器扫描中,可以接口4×8传感器矩阵。
选通输入 - 在此模式下,当控制线设置为0时,返回线上的数据将逐字节存储在FIFO中。
输出模式
此模式处理与显示相关的操作。此模式进一步分为两种输出模式。
显示扫描 - 此模式允许将8/16个字符多路复用显示器组织为双4位/单8位显示单元。
显示输入 - 此模式允许从右侧/左侧输入要显示的数据。
微处理器 - 8257 DMA控制器
DMA 指的是直接内存访问 (Direct Memory Access)。它是英特尔设计的,用于以最快速度传输数据。它允许设备直接与内存之间传输数据,而无需 CPU 干预。
使用 DMA 控制器,设备请求 CPU 保持其数据、地址和控制总线,以便设备可以自由地直接与内存之间传输数据。只有在收到 CPU 的 HLDA 信号后,才会启动 DMA 数据传输。
DMA 操作是如何执行的?
以下是 DMA 执行的操作序列:
最初,当任何设备必须在设备和内存之间发送数据时,设备必须向 DMA 控制器发送 DMA 请求 (DRQ)。
DMA 控制器向 CPU 发送保持请求 (HRQ),并等待 CPU 确认 HLDA。
然后,微处理器将所有数据总线、地址总线和控制总线置为高阻态。CPU 放弃对总线的控制,并通过 HLDA 信号确认 HOLD 请求。
现在 CPU 处于 HOLD 状态,DMA 控制器必须管理 CPU、内存和 I/O 设备之间总线上的操作。
8257 的特点
以下是 8257 的一些主要特点:
它有四个通道,可用于四个 I/O 设备。
每个通道具有 16 位地址和 14 位计数器。
每个通道最多可以传输 64kb 的数据。
每个通道可以独立编程。
每个通道可以执行读取传输、写入传输和验证传输操作。
它向外围设备生成 MARK 信号,表示已传输 128 字节。
它需要一个单相时钟。
其频率范围为 250Hz 至 3MHz。
它以两种模式运行,即 **主模式** 和 **从模式**。
8257 架构
下图显示了 8257 的架构:
8257 引脚描述
下图显示了 8257 DMA 控制器的引脚图:
DRQ0−DRQ3
这些是四个独立的通道 DMA 请求输入,外围设备使用它们来使用 DMA 服务。当选择固定优先级模式时,DRQ0 具有最高的优先级,而 DRQ3 具有最低的优先级。
DACKo − DACK3
这些是低电平有效的 DMA 确认线,它们通过 CPU 向请求外围设备更新其请求的状态。这些线也可以作为请求设备的选通线。
Do − D7
这些是双向数据线,用于将系统总线与 DMA 控制器的内部数据总线连接。在从模式下,它将命令字传输到 8257,并将状态字从 8257 传输出来。在主模式下,这些线用于将生成的地址的高位字节发送到锁存器。此地址将进一步使用 ADSTB 信号锁存。
IOR
它是一个低电平有效的双向三态输入线,CPU 在从模式下使用它来读取 8257 的内部寄存器。在主模式下,它用于在内存写入周期期间从外围设备读取数据。
IOW
它是一个低电平有效的双向三态线,用于将数据总线的内容加载到 8 位模式寄存器或 16 位 DMA 地址寄存器或终端计数寄存器的高/低位字节。在主模式下,它用于在 DMA 内存读取周期期间将数据加载到外围设备。
CLK
这是 8257 内部操作所需的时钟频率信号。
复位
此信号用于通过禁用所有 DMA 通道来重置 DMA 控制器。
Ao - A3
这些是四个最低有效地址线。在从模式下,它们充当输入,用于选择要读取或写入的寄存器之一。在主模式下,它们是 8257 生成的四个最低有效内存地址输出线。
CS
它是一个低电平有效的片选线。在从模式下,它启用对 8257 的读/写操作。在主模式下,它禁用对 8257 的读/写操作。
A4 - A7
这些是 DMA 在主模式下生成的下字节地址的高四位。
READY
它是一个高电平有效的异步输入信号,通过插入等待状态使 DMA 就绪。
HRQ
此信号用于接收来自输出设备的保持请求信号。在从模式下,它与 8257 的 DRQ 输入线连接。在主模式下,它与 CPU 的 HOLD 输入连接。
HLDA
这是保持确认信号,当它设置为 1 时,表示 DMA 控制器 CPU 已将总线授予请求外围设备。
MEMR
它是低电平有效的内存读取信号,用于在 DMA 读取周期期间从寻址的内存位置读取数据。
MEMW
它是低电平有效的三态信号,用于在 DMA 写入操作期间将数据写入寻址的内存位置。
ADST
此信号用于将 DMA 控制器生成的内存地址的高位字节转换为锁存器。
AEN
此信号用于禁用地址总线/数据总线。
TC
它代表“终端计数”,它向当前外围设备指示当前 DMA 周期。
MARK
从开始起每 128 个周期或其整数倍数激活标记。它表示当前 DMA 周期是自上次向所选外围设备输出 MARK 信号以来的第 128 个周期。
Vcc
它是电路操作所需的电源信号。
微控制器 - 概述
**微控制器**是一种小型且低成本的微型计算机,旨在执行嵌入式系统的特定任务,例如显示微波炉的信息、接收远程信号等。
一般的微控制器包括处理器、内存(RAM、ROM、EPROM)、串行端口、外围设备(定时器、计数器)等。
微处理器和微控制器的区别
下表重点介绍了微处理器和微控制器之间的区别:
微控制器 | 微处理器 |
---|---|
微控制器用于在一个应用程序中执行单个任务。 | 微处理器用于大型应用程序。 |
其设计和硬件成本低。 | 其设计和硬件成本高。 |
易于更换。 | 不容易更换。 |
它采用 CMOS 技术制造,运行功耗低。 | 其功耗高,因为它必须控制整个系统。 |
它由 CPU、RAM、ROM、I/O 端口组成。 | 它不包含 RAM、ROM、I/O 端口。它使用其引脚与外围设备接口。 |
微控制器的类型
根据内存、架构、位和指令集,微控制器分为不同的类别。以下是它们的类型列表:
位
基于位配置,微控制器进一步分为三类。
**8 位微控制器** - 此类型的微控制器用于执行算术和逻辑运算,例如加法、减法、乘法、除法等。例如,Intel 8031 和 8051 是 8 位微控制器。
**16 位微控制器** - 此类型的微控制器用于执行需要更高精度和性能的算术和逻辑运算。例如,Intel 8096 是一款 16 位微控制器。
**32 位微控制器** - 此类型的微控制器通常用于自动控制设备,例如自动操作机器、医疗设备等。
内存
基于内存配置,微控制器进一步分为两类。
**外部内存微控制器** - 此类型的微控制器设计为芯片上没有程序内存。因此,它被称为外部内存微控制器。例如:Intel 8031 微控制器。
**嵌入式内存微控制器** - 此类型的微控制器设计为微控制器的所有程序和数据内存、计数器和定时器、中断、I/O 端口都嵌入在芯片上。例如:Intel 8051 微控制器。
指令集
基于指令集配置,微控制器进一步分为两类。
**CISC** - CISC 代表复杂指令集计算机。它允许用户插入单个指令作为许多简单指令的替代方案。
**RISC** - RISC 代表精简指令集计算机。它通过缩短每个指令的时钟周期来减少操作时间。
微控制器的应用
微控制器广泛应用于各种不同的设备,例如:
光线感测和控制设备,如 LED。
温度感测和控制设备,如微波炉、烟囱。
火灾探测和安全设备,如火灾报警器。
测量设备,如电压表。
微控制器 - 8051 架构
8051 微控制器由英特尔于 1981 年设计。它是一款 8 位微控制器。它采用 40 引脚 DIP(双列直插式封装)制造,具有 4kb 的 ROM 存储空间和 128 字节的 RAM 存储空间,以及 2 个 16 位定时器。它包含四个并行的 8 位端口,这些端口是可编程的,也可以根据需要寻址。片上晶体振荡器集成在微控制器中,晶体频率为 12 MHz。
现在让我们讨论 8051 微控制器的架构。
在下图中,系统总线将所有支持设备连接到 CPU。系统总线由 8 位数据总线、16 位地址总线和总线控制信号组成。所有其他设备,如程序内存、端口、数据内存、串行接口、中断控制、定时器和 CPU,都通过系统总线相互连接。
微控制器 - 8051 引脚描述
8051 微控制器的引脚图如下所示:
**引脚 1 至 8** - 这些引脚称为端口 1。此端口不执行任何其他功能。它是内部上拉的双向 I/O 端口。
**引脚 9** - 它是一个复位引脚,用于将微控制器复位到其初始值。
**引脚 10 至 17** - 这些引脚称为端口 3。此端口执行一些功能,例如中断、定时器输入、控制信号、串行通信信号 RxD 和 TxD 等。
**引脚 18 和 19** - 这些引脚用于连接外部晶体以获得系统时钟。
**引脚 20** - 此引脚为电路提供电源。
**引脚 21 至 28** - 这些引脚称为端口 2。它用作 I/O 端口。高位地址总线信号也使用此端口进行多路复用。
**引脚 29** - 这是 PSEN 引脚,代表程序存储器启用。它用于从外部程序存储器读取信号。
**引脚 30** - 这是 EA 引脚,代表外部访问输入。它用于启用/禁用外部内存接口。
**引脚 31** - 这是 ALE 引脚,代表地址锁存器启用。它用于解复用端口的地址-数据信号。
**引脚 32 至 39** - 这些引脚称为端口 0。它用作 I/O 端口。低位地址和数据总线信号使用此端口进行多路复用。
**引脚 40** - 此引脚用于为电路提供电源。
微控制器 8051 输入输出端口
8051 微控制器有 4 个 8 位 I/O 端口,可以配置为输入或输出。因此,总共 32 个输入/输出引脚允许微控制器与外围设备连接。
**引脚配置**,即引脚可以根据逻辑状态配置为 1(输入)和 0(输出)。
输入/输出 (I/O) 引脚 − 微控制器内部的所有电路都必须连接到它的一个引脚,P0端口除外,因为它没有内置上拉电阻。
输入引脚 − 将逻辑1应用于P寄存器的一个位。输出FE晶体管关闭,另一个引脚通过高阻上拉电阻保持连接到电源电压。
P0端口 − P0(零)端口具有两个功能:
当使用外部存储器时,低地址字节(地址A0A7)应用于它;否则,此端口的所有位都配置为输入/输出。
当P0端口配置为输出时,其他端口包含带有内置上拉电阻的引脚(其一端连接到5V电源),而此端口的引脚则缺少该电阻。
输入配置
如果此端口的任何引脚配置为输入,则其行为就像“浮动”一样,即输入具有无限的输入电阻和不确定的电位。
输出配置
当引脚配置为输出时,它充当“开漏”输出。通过将逻辑0应用于端口位,相应的引脚将连接到地 (0V);应用逻辑1时,外部输出将保持“浮动”。
为了在此输出引脚上应用逻辑1 (5V),需要构建一个外部上拉电阻。
P1端口
P1是一个真正的I/O端口,因为它不像P0那样具有任何替代功能,但此端口只能配置为通用I/O。它具有内置上拉电阻,并完全兼容TTL电路。
P2端口
当使用外部存储器时,P2类似于P0。此端口的引脚占据了为外部存储器芯片设计的地址。此端口可用于具有地址A8-A15的较高地址字节。如果没有添加存储器,则此端口可用作类似于P1端口的通用输入/输出端口。
P3端口
在此端口中,功能与其他端口类似,只是必须将逻辑1应用于P3寄存器的相应位。
引脚电流限制
当引脚配置为输出(即逻辑0)时,单个端口引脚可以接收10mA的电流。
当这些引脚配置为输入(即逻辑1)时,内置上拉电阻提供非常微弱的电流,但可以激活多达4个LS系列TTL输入。
如果端口的所有8位都处于活动状态,则总电流必须限制在15mA(P0端口:26mA)。
如果所有端口(32位)都处于活动状态,则总最大电流必须限制在71mA。
微控制器 - 8051 中断
中断是暂时挂起主程序、将控制权传递给外部源并执行其任务的事件。然后,它将控制权传递回主程序中断停止的地方。
8051有5个中断信号,即INT0、TF0、INT1、TF1、RI/TI。可以通过设置IE寄存器的位来启用或禁用每个中断,并且可以通过清除同一寄存器的EA位来禁用整个中断系统。
IE(中断允许)寄存器
此寄存器负责启用和禁用中断。将EA寄存器设置为1以启用中断,设置为0以禁用中断。其位序列及其含义如下图所示。
EA | IE.7 | 它禁用所有中断。当EA = 0时,不会确认任何中断;EA = 1则分别启用中断。 |
- | IE.6 | 保留供将来使用。 |
- | IE.5 | 保留供将来使用。 |
ES | IE.4 | 启用/禁用串口中断。 |
ET1 | IE.3 | 启用/禁用定时器1溢出中断。 |
EX1 | IE.2 | 启用/禁用外部中断1。 |
ET0 | IE.1 | 启用/禁用定时器0溢出中断。 |
EX0 | IE.0 | 启用/禁用外部中断0。 |
IP(中断优先级)寄存器
我们可以通过更改中断优先级 (IP) 寄存器中相应的位来更改中断的优先级级别,如下图所示。
低优先级中断只能被高优先级中断中断,但不能被另一个低优先级中断中断。
如果同时收到不同优先级的两个中断请求,则优先处理高优先级请求。
如果同时收到相同优先级的请求,则内部轮询顺序决定要处理哪个请求。
- | IP.6 | 保留供将来使用。 |
- | IP.5 | 保留供将来使用。 |
PS | IP.4 | 它定义串口中断的优先级。 |
PT1 | IP.3 | 它定义定时器1中断的优先级。 |
PX1 | IP.2 | 它定义外部中断1的优先级。 |
PT0 | IP.1 | 它定义定时器0中断的优先级。 |
PX0 | IP.0 | 它定义外部中断0的优先级。 |
TCON寄存器
TCON寄存器指定微控制器外部中断的类型。
8255A - 可编程外设接口
8255A是一种通用的可编程I/O设备,旨在根据需要在特定条件下将数据从I/O传输到中断I/O。它几乎可以与任何微处理器一起使用。
它包含三个8位双向I/O端口(24条I/O线),可以根据需要进行配置。
8255A的端口
8255A有三个端口:端口A、端口B和端口C。
端口A包含一个8位输出锁存器/缓冲器和一个8位输入缓冲器。
端口B类似于端口A。
端口C可以通过控制字分为两部分:端口C下半部分 (PC0-PC3) 和端口C上半部分 (PC7-PC4)。
这三个端口进一步分为两组:A组包括端口A和端口C上半部分;B组包括端口B和端口C下半部分。这两组可以用三种不同的模式进行编程:第一种模式称为模式0,第二种模式称为模式1,第三种模式称为模式2。
工作模式
8255A有三种不同的工作模式:
模式0 − 在此模式下,端口A和B用作两个8位端口,端口C用作两个4位端口。每个端口都可以编程为输入模式或输出模式,其中输出是锁存的,而输入不是锁存的。端口不具有中断能力。
模式1 − 在此模式下,端口A和B用作8位I/O端口。它们可以配置为输入端口或输出端口。每个端口使用端口C中的三条线作为握手信号。输入和输出是锁存的。
模式2 − 在此模式下,端口A可以配置为双向端口,端口B可以配置为模式0或模式1。端口A使用端口C中的五个信号作为数据传输的握手信号。端口C的其余三个信号可以用作简单的I/O或端口B的握手信号。
8255A的功能
8255A的主要功能如下:
它包含3个8位IO端口,即PA、PB和PC。
地址/数据总线必须在外部进行多路分解。
它与TTL兼容。
它具有改进的直流驱动能力。
8255架构
下图显示了8255A的架构:
Intel 8255A - 引脚描述
让我们首先看一下Intel 8255A的引脚图:
现在让我们讨论8255A中引脚的功能描述。
数据总线缓冲器
这是一个三态8位缓冲器,用于将微处理器与系统数据总线连接。数据根据CPU的指令由缓冲器传输或接收。控制字和状态信息也通过此总线传输。
读/写控制逻辑
此块负责控制数据/控制/状态字的内部/外部传输。它接收来自CPU地址和控制总线的输入,然后向两个控制组发出命令。
CS
它代表片选。此输入的低电平选择芯片并启用8255A和CPU之间的通信。它连接到解码地址,A0 & A1连接到微处理器地址线。
其结果取决于以下条件:
CS | A1 | A0 | 结果 |
---|---|---|---|
0 | 0 | 0 | 端口A |
0 | 0 | 1 | 端口B |
0 | 1 | 0 | 端口C |
0 | 1 | 1 | 控制寄存器 |
1 | X | X | 无选择 |
WR
它代表写操作。此控制信号启用写操作。当此信号变低时,微处理器写入选定的I/O端口或控制寄存器。
复位
这是一个高电平有效信号。它清除控制寄存器并将所有端口设置为输入模式。
RD
它代表读操作。此控制信号启用读操作。当信号为低电平时,微处理器从8255的选定I/O端口读取数据。
A0和A1
这些输入信号与RD、WR和一个控制信号一起工作。下表显示了它们的各种信号及其结果。
A1 | A0 | RD | WR | CS | 结果 |
---|---|---|---|---|---|
0 | 0 | 0 | 1 | 0 | 输入操作 端口A → 数据总线 |
0 | 1 | 0 | 1 | 0 | 端口B → 数据总线 |
1 | 0 | 0 | 1 | 0 | 端口C → 数据总线 |
0 | 0 | 1 | 0 | 0 | 输出操作 数据总线 → 端口A |
0 | 1 | 1 | 0 | 0 | 数据总线 → 端口A |
1 | 0 | 1 | 0 | 0 | 数据总线 → 端口B |
1 | 1 | 1 | 0 | 0 | 数据总线 → 端口D |
Intel 8253 - 可编程定时器
Intel 8253和8254是可编程定时器 (PTI),设计用于微处理器使用三个16位寄存器执行计时和计数功能。每个计数器有两个输入引脚,即时钟和门,还有一个“OUT”输出引脚。要操作计数器,需要在其寄存器中加载一个16位计数。根据命令,它开始递减计数,直到达到0,然后它产生一个脉冲,该脉冲可用于中断CPU。
8253和8254的区别
下表区分了8253和8254的功能:
8253 | 8254 |
---|---|
其工作频率为0 - 2.6 MHz | 其工作频率为0 - 10 MHz |
它使用N-MOS技术 | 它使用H-MOS技术 |
回读命令不可用 | 回读命令可用 |
同一计数器的读写不能交错。 | 同一计数器的读写可以交错。 |
8253/54的功能
8253/54最突出的功能如下:
它具有三个独立的16位向下计数器。
它可以处理从DC到10 MHz的输入。
这三个计数器可以编程为二进制或BCD计数。
它几乎与所有微处理器兼容。
8254有一个强大的命令,称为回读命令,允许用户检查计数值、编程模式、当前模式和计数器的当前状态。
8254架构
8254的架构如下所示:
8254引脚说明
以下是8254的引脚图:
在上图中,有三个计数器、一个数据总线缓冲器、读/写控制逻辑和一个控制寄存器。每个计数器有两个输入信号 - 时钟和门,以及一个输出信号 - OUT。
数据总线缓冲器
这是一个三态、双向、8位缓冲器,用于将8253/54接口到系统数据总线。它具有三个基本功能:
- 编程8253/54的模式。
- 加载计数寄存器。
- 读取计数值。
读/写逻辑
它包括5个信号,即RD、WR、CS和地址线A0 & A1。在外设I/O模式下,RD和WR信号分别连接到IOR和IOW。在内存映射I/O模式下,它们连接到MEMR和MEMW。
CPU的地址线A0 & A1连接到8253/54的A0和A1线,CS连接到解码地址。控制字寄存器和计数器根据A0 & A1线上的信号进行选择。
A1 | A0 | 结果 |
---|---|---|
0 | 0 | 计数器0 |
0 | 1 | 计数器1 |
1 | 0 | 计数器2 |
1 | 1 | 控制字寄存器 |
X | X | 无选择 |
控制字寄存器
当A0 & A1线为逻辑1时访问该寄存器。它用于写入命令字,该命令字指定要使用的计数器、其模式以及读或写操作。下表显示了各种控制输入的结果。
A1 | A0 | RD | WR | CS | 结果 |
---|---|---|---|---|---|
0 | 0 | 1 | 0 | 0 | 写入计数器0 |
0 | 1 | 1 | 0 | 0 | 写入计数器1 |
1 | 0 | 1 | 0 | 0 | 写入计数器2 |
1 | 1 | 1 | 0 | 0 | 写入控制字 |
0 | 0 | 0 | 1 | 0 | 读取计数器0 |
0 | 1 | 0 | 1 | 0 | 读取计数器1 |
1 | 0 | 0 | 1 | 0 | 读取计数器2 |
1 | 1 | 0 | 1 | 0 | 无操作 |
X | X | 1 | 1 | 0 | 无操作 |
X | X | X | X | 1 | 无操作 |
计数器
每个计数器由一个16位单向下计数器组成,它可以以二进制或BCD方式工作。其输入和输出由控制字寄存器中存储的模式选择配置。程序员可以读取任何三个计数器的内容,而不会干扰正在进行的实际计数。
Intel 8253/54 - 工作模式
8253/54可以以6种不同的模式工作。本章将讨论这些工作模式。
模式0 ─ 终端计数中断
它用于在一定时间间隔后向微处理器产生中断。
模式设置后,输出最初为低电平。将计数值加载到计数器后,输出保持低电平。
计数器递减的过程持续到达到终端计数,即计数变为零,输出变为高电平,并将保持高电平,直到重新加载新的计数。
GATE信号为高电平时进行正常计数。当GATE变为低电平时,计数终止,当前计数被锁存,直到GATE再次变为高电平。
模式1 – 可编程单稳态
它可以用作单稳态多谐振荡器。
门输入在此模式下用作触发输入。
输出保持高电平,直到加载计数并应用触发信号。
模式2 – 频率发生器
初始化后,输出通常为高电平。
每当计数变为零时,输出端就会产生另一个低脉冲,计数器将被重新加载。
模式3 – 方波发生器
此模式类似于模式2,只是输出在计时器周期的一半时间内保持低电平,在另一半时间内保持高电平。
模式4 − 软件触发模式
在此模式下,输出将保持高电平,直到计时器计数到零,此时输出将脉冲低电平然后再次变为高电平。
当GATE信号变为低电平时,计数被锁存。
在终端计数时,输出变为低电平一个时钟周期,然后变为高电平。此低脉冲可以用作脉冲信号。
模式5 – 硬件触发模式
此模式响应外部生成的信号产生脉冲信号。
此模式类似于模式4,只是计数是由门输入处的信号启动的,这意味着它是硬件触发的,而不是软件触发的。
初始化后,输出变为高电平。
达到终端计数时,输出变为低电平一个时钟周期。