一、8086/8088微处理器
寄存器类型:
通用寄存器
-
AX: AL, AH
BX: BL, BH
CX: CL, CH
DX: DL, DH - 堆栈指针寄存器:SP
- 基址指针寄存器:BP
- 源变址寄存器:SI
- 目的编制寄存器:DI
段寄存器
CS, DS, SS,ES
标志寄存器
IP,FLAGS
状态标志寄存器(FLAGS)
状态控制
:存放运算结果的特征;
(CF,SF,AF,PF,OF,ZF)
CF
进位标志位
PF
奇偶标志位
AF
辅助进位标志位
ZF
零标志位
SF
符号标志位
OF
溢出标志位
控制标志
:控制某些特殊操作;
(IF,TF,DF)
TF
跟踪标志位
IF
中断允许标志位
DF
方向标志位
二、8086CPU指令系统
数据传送指令MOV
MOV指令格式:
MOV dst, src
立即数到通用寄存器的数据传送
MOV AL, 4 ;AL=4
MOV AX, 1000 ;AX=1000
MOV SI, 037BH ;SI=037BH
CS,DS,SS,ES,IP,FLAGS不能用立即数赋值。
mov ax, 2000
mov ds, ax
立即数到存储单元的数据传送
注意:MOV指令的两个操作数类型是确定的。
MOV [1500H], 9
这种形式不可以。
9可以是字节类型,也可以是字类型的。[1500H]可以表示一个内存单元,也可以表示首地址的内存单元。
应当写成
MOV BYTE PTR [1500H], 9
MOV BYTE PTR [SI], 9
MOV WORD PTR [1500H], 9
MOV WORD PTR [SI], 9
CPU内部寄存器之间的数据传送
MOV AL,BL
MOV AX, BX
MOV DS, AX
-
MOV指令的两个操作数类型必须相同;
MOV AX, BL
-
两个操作数不能同时为存储操作数;
MOV [BX],[SI]
-
两个操作数不能同时为段寄存器;
MOV DS, ES
寄存器与存储单元之间的数据传送
MOV AL,[2000H]
MOV AX,[SI]
MOV [3200H], CX
MOV ARRY[DI], DL
MOV DL, [BX][SI]
- MOV指令的操作数可以使用各种寻址方式。
除法指令DIV/IDIV
-
被除数的字长要求是除数字长的两倍。
如果除数是
字节类型
,被除数必须是
字类型
而且要预置在
AX
中;如果除数是
字类型
,被除数必须是
双字类型
而且要预置在
DX:AX
中。 -
除法指令隐含了被除数
AX
或
DX:AX
,除数可以是寄存器或者是存储器操作数,但
不能是立即数
。
无符号除数指令DIV
DIV BL
商存到AL中,余数存到AH中。
DIV BX
商存到AX中,余数存到DX中。
DIV BYTE PTR[SI]
商存到AL中,余数存到AH中。
DIV WORD PTR[DI]
商存到AX中,余数存到DX中。
说明
- 在指令执行前,必须检查被除数的长度,如果不符合要求,要用位扩展指令来转换。
- 除数不能是0
- 除数不能太小。除数太小将产生除法溢出。
带符号数的除法指令IDIV
余数符号与被除数符号保持一致。
符号扩展指令CBW,CWD
使用符号扩展指令对数据类型进行调整。指令不影响标志位。
CBW
功能
:字节转换为字。将AL中的数的
符号位
扩展至
16位
,扩展的符号部分存入AH中,即由AL扩展为AX,值保持不变。
CWD
功能
:字转换为双字。将AX中的数的符号位扩展至
32位
,扩展的符号部分存入DX中。即由DX:AX代替AX,值保持不变。
逻辑运算指令
慕课:逻辑运算指令
逻辑运算指令可以对操作数的任意位进行置位、清0。逻辑运算指令的执行影响6个状态标志位,其中
CF
和
OF
标志位会被清0,其他状态位的变化与运算结果有关。
因为逻辑运算不会进位也不会溢出。
(1)与指令AND
指令格式
AND ,OPRD1, OPRD2
AND AL, 0FH ;取AL的低4位,屏蔽高4位。
AND AX, BX ;AX与BX进行与运算,结果保存在AX中。
AND [SI], AL ;内存单元[SI]与AL与,结果存回内存单元
AND DX, [BX+SI]
- 取AL中某一位或者某几位的数。常用与运算。
- 逻辑与指令常用于将某些位置0,其余为保持不变。
-
用与指令设置标志位CF=OF=0:
AND AX, AX ;AX不变,CF=OF=0
指令执行使标志位CF=OF=0,AF值不定,对SF、PF和ZF产生影响。
(2)或指令OR
OR指令实现或运算。
OR AX, CX
OR [DI], AL
OR AL, 0FH ;AL的低4位被置1,高4位不变。
OR AL, 80H ;AL的符号位置1,其它位保持不变。
例子:对AL进行偶校验
:
OR AL, AL ;改变PF的值,若为奇数个1发送,如果为偶数个1,将最高位置位1
JPE CONTINUE
OR AL,80H
CONTINUE: ...
- 逻辑或指令常用于将某些位置1,其余位保持不变。
(3)非指令NOT
指令格式
:NOT OPRD
功能
:将
OPRD
逐位取反,结果返回
OPRD
中。
例如
:
MOV AL, 0FH
NOT AL ;AL=F0H
NOT BYTE PTR[SI]
(4)异或指令XOR
功能
:
OPRD1
与
OPRD2
按位进行异或操作,结果回送
OPRD1
中。
例如
:
XOR AX, CX
XOR BYTE PTR[DI], 4AH
XOR AX, AX ;AX=0,同时标志位CF=0F=0,这条指令常用于算术运算指令之前清理运算环境。
(5)测试指令TEST
指令格式
:TEST OPRD1, OPRD2
功能
:
OPRD1
与
OPRD2
按位进行与操作,但是结果不回送
OPRD1
中,所以指令执行后两个操作数的值保持不变。
指令的执行使标志寄存器的标志位CF=OF=0,AF值不变,SF\PF和ZF受影响。通常是
ZF位
最受关注。
例如
:
TEST AL, 04H
TEST [SI], 80H
AL的二进制表示:xxxx xxxxB
04H的二进制表示:0000 0100B
如果AL的第2位为0,那么相与后结果为0,ZF=1;反之相与后不为0,ZF=0。
-
这条指令常用于对
OPRD1
中的特定某一位进行测试,
OPRD2
用于说明测试的是
OPRD1
中的哪一位。 -
常见的
OPRD2
的取值为01H, 02H, 04H, 08H, 10H, 20H, 40H, 80H等等。
例如测试AL的第0位,可以安排如下一条指令:
TEST AL, 01H
指令执行后AL的值保持不变,但标志位受到影响。如果ZF=0说明AL的第0位是1,如果ZF=1说明AL的第0位为0。
移位指令
非循环移位指令
逻辑左移指令SHL,逻辑右移指令SHR,算术左移指令SAL,算术右移指令SAR
逻辑左移指令SHL
指令格式
:SHL OPRD, COUNT
功能
:将 OPRD 逐位进行左移,最低位第0位向左移到第1位,依次移动,最高位移
出OPRD,移到标志寄存器的 CF 中;
第0位空出,用0填补
。
说明
:OPRD 可以是寄存器或存储器操作数,COUNT 可以为 1 或 CL。
逻辑右移指令 SHR
指令格式
:SHR OPRD, COUNT
功能
:将 OPRD 逐位进行右移,最高位向右移到次高位,依次移动,第0位移出 OPRD,移到标志寄存器的 CF 中;
最高位空出,用0填补
。
说明
:OPRD 可以是寄存器或存储器操作数,COUNT 可以为1或 CL。
算术左移指令 SAL
指令格式
:SAL OPRD, COUNT
说明
:算术左移指令与逻辑左移指令的功能相同,这里不再赘述,但算术左移指令将操
作数作为
带符号数
处理。
算术右移指令 SAR
指令格式
:SAR OPRD, COUNT
功能
:将 OPRD 逐位进行右移,最高位向右移到次高位,依次移动,第 0 位移出 OPRD,移到标志寄存器的 CF 中;
最高位保持不变
。
说明
:OPRD 可以是寄存器或存储器操作数,COUNT 可以为 1 或 CL。
循环移位指令
循环移位,顾名思义首尾相接成一个环,左循环移位后可以通过右循环移位来还原数据,反之亦然。
4条循环移位指令又按照CF标志位是否参加循环细分为两组,一组
CF不参加循环移位但仍然随着循环操作变化
,又称为
不带CF的循环移位指令
;另一组
CF参加循环
,称为
带CF的循环移位指令
。
(1)不带 CF 的循环移位指令
循环左移的指令格式
:ROL OPRD, COUNT
功能
:将 OPRD 逐位进行左移,第 0 位移到第 1 位,依次移动,最高位移至第 0 位,
同时最高位又移到标志寄存器的 CF 中。
循环右移的指令格式
:ROR OPRD, COUNT
功能
:将 OPRD 逐位进行右移,最高位移到次高位,依次移动,第 0 位移至最高位,
同时最高位又移到标志寄存器的 CF 中。
说明
:OPRD 可以是寄存器或存储器操作数,COUNT 可以为 1 或 CL。
(2)带 CF 的循环移位指令
循环左移的指令格式
:RCL OPRD, COUNT
功能
:将 OPRD 逐位进行左移,第 0 位移到第 1 位,依次移动,最高位移至 CF 位,
CF 位移到第 0 位。
循环右移的指令格式
:RCR OPRD, COUNT
功能
:将 OPRD 逐位进行右移,最高位移到次高位,依次移动,第 0 位移至 CF 位,
CF 位移到最高位。
说明
:OPRD 可以是寄存器或存储器操作数,COUNT 可以为 1 或 CL。
四、汇编语言程序设计
伪指令
又称作
伪操作语句
,它是用来控制汇编语言源程序的汇编过程的,比如如何定义变量、为数据分配存储空间、如何对源程序汇编等。伪操作语句是由汇编程序定义的,也是由汇编程序处理的。伪操作语句汇编后不生成目标代码,所以常被称为
伪指令
(directive)。它不属于CPU的指令系统,只与汇编程序(MASM)有关。
五、存储器
存储器件
所有的存储器件都有==地址输入引脚、数据输出或数据输入引脚、从多片存储芯片中选定一个芯片的片选引脚,控制读写操作的控制引脚。
地址输入引脚
接受CPU发过来的地址信息,以选定存储芯片内部的存储单元。芯片上的地址线都是由A
0
开始标记到A
n
。
-
如果存储芯片的地址线为A0~A9,他的存储单元地址范围是:
00 0000 0000~11 1111 1111B,即000H~3FFH。
地址线为A0~A10根的芯片,地址范围为:
000 0000 0000~111 1111 1111B,即000H~7FFH。 -
地址线的根数与芯片内含有的存储单元个数有一个一一对应的关系。如含有10根地址线的芯片(A0~A9),它应该有2
10
=1024个存储单元;含有11根地址线的芯片(A0~A10),存储容量为2
11
=2048个存储单元。
数据输入引脚
芯片选择线(/CS)
所有存储器件都有芯片选择线,而且至少一根,用来选中这个芯片,或者说激活这个芯片。片选择线常被标识为片选#CS,片使能#CE、或简称为选择#S。
如果存储芯片含有多跟选择线,则只有在所有选择线都处于有效时,芯片才被激活,CPU才可以对它进行读写操作。
读写控制线(/OE、/WE)
每个存储器都有控制输入输出的控制线,常常标记为#OE,#WE。
- 当#OE为低电平的时候存储单元存放的数据流出芯片,出现在系统数据总线上。当/WE为低电平的时候,存储器件从数据线上接收数据存储到芯片内部。
- ROM存储器件因为只能读出数据不能写入数据,所以通常只有一个输出使能/OE引脚,有些芯片将其标为#G(输出选通)。
- 有些RAM存储器件受到芯片引脚数量的限制,控制数据输入输出的引脚只有一个,常常标记为R、#W。当R、#W引脚为高电平时芯片输出数据,执行读操作;当它为低电平时芯片接收数据,执行写操作。
- 如果RAM芯片有两个控制端#WE和#OE,这两个引脚不能同时有效。当他们都为高电平时,处于无效状态,芯片既不读出数据也不写入数据,数据线引脚处于高阻状态。
6264芯片
6264芯片与系统的连接
-
确定要访问的存储芯片
- 系统中可能存在多篇存储器芯片,要访问的单元只能存在某一片芯片上。
-
找到芯片后,寻找该芯片上要访问的单元
-
6264芯片上由8K(2
13
)个单元,每个单元在该芯片上有唯一个的13位地址码 - 每片6264芯片上第一个单元在芯片上的地址:0
-
每片6264芯片上最后一个单元在芯片上的地址:8191(2
13
-1)
-
6264芯片上由8K(2
因此
用芯片的13位地址码A0-A12寻址片内的每个单元
6264芯片的编址
A 19 ~ A 13 |
A 12 ~ A 0 |
位置 |
---|---|---|
xxxx xxx | 0 0000 0000 0000 | 片首地址 |
xxxx xxx | 1 1111 1111 1111 | 片尾地址 |
-
芯片上所有的单元具有相同的高位地址(
片选地址
) - 从片首地址到片为地址,构成芯片在内存空间中占有的地址范围
译码
:将输入的一组高位地址信号通过变换,产生一个有效的输出信号,用于选中某一个存储器芯片,从而确定了该存储器芯片在内存中的地址范围。
将输入的一组二进制编码变换为一个特定的输出信号。
译码方式
全地址译码
用全部的高位地址信号作为译码信号,使得存储器芯片的每一个单元都占据一个唯一的内存地址。
部分地址译码
用部分高位地址信号(而不是全部)作为译码信号,使得被选中存储器芯片占有几组不通得地址范围。
存储器接口设计注意点
- 片内地址用于寻址芯片上的单元,高位地址用于选择芯片(片选)
-
#MEMW
和==#MEMR==用于确保只有在对存储器芯片进行读或者写操作时,译码电路才可以工作。所以他们必须作为译码器输入信号。 - 74LS138译码器的使能端及输入端均不能悬空
-
对全地址译码,要求
全部高位地址
都需作为译码器输入。
六、输入输出
I/O接口概述:
I/O接口的基本功能
I/O接口及其编制方式
I/O地址译码
1. I/O接口
接口要解决的问题
-
速度匹配 —- 数据的
缓冲
与
暂存
- 信号的驱动能力 —- 信号驱动
- 信号形式和电平的匹配 —- 信号类型转换
- 信息格式 —- 信号格式转换
- 时序匹配(定时关系)
-
总线隔离 —- 三态门
高速的微处理器
与
低速的外设
能过够协调的工作,需要有一个具有数据缓冲和锁存的能力、数据格式转化能力、定时控制能力并且能够提供外设状态的连接电路,我们把它叫作输入输出接口。
系统设备
可编程中断控制器、DMA控制器、PCI总线、系统实时时钟、扬声器、定时器等等时组成系统
不可或缺
的设备,常称为系统设备。
外围设备
键盘、鼠标、显示器、打印机、磁盘、光盘、摄像头、音箱等属于外围设备,常称为外部设备。
I/O接口应具有以下能力
-
地址译码
:CPU通过给接口分配地址识别接口,并通过地址总线将地址信息传给接口。接口应该具有地址译码的能力。 -
数据传送
-
提供握手联络信号
外部设备的工作速度往往远低于CPU的处理速度,CPU发送的数据不能被外设即使读取,造成数据丢失,因此需要握手联络信号
使得CPU与I/O设备同步
。
I/O接口必须能够提供外部设备的
状态信息
,同时能够根据CPU的命令输出
控制信号
,对外设实时控制。 -
数据格式转换
-
信号电平转换
外部设备多是复杂的机电设备,其信号电平多数与TTL或者MOS电路不兼容,需要接口来完成信号的电平转换。 -
错误检测功能
接口和设备间的数据传输经常收到干扰,导致信息出错,接口应具备一定的错误检测能力,对传输信息进行校验。
2. I/O端口及其编址
端口:接口电路中用于缓存数据及控制信息的部件
-
计算机系统中包含各类不同功能的接口电路。
-
每个接口中含有1个或多个端口
-
端口地址
- 为确保CPU能够访问到每个不同的端口
-
寻址端口的方法:
- 先找到端口所在的接口电路芯片 —> 片选
-
再在该芯片上找具体访问的端口 —->片内寻址
每个端口地址 = 片选地址(高位地址)+ 片选地址
-
8086/8088寻址端口的能力:
- 64K个端口
-
端口的编址方式:
- 与内存统一编址
- 独立编址 (内存地址资源充分利用,能够应用于端口的指令较少)
8088/8086的I/O端口编址
- 采用I/O独立编址方式,与内存共用地址总线,用IO/#M信号状态区分
-
访问端口时仅使用地址总线的:A
15
~ A
0
- 可寻址的I/O端口数为64K(65536)个,I/O地址范围:0~FFFFH
3. I/O地址译码
-
目的:
- 确定端口的地址
-
参加译码的信号:
- #IOR,#IOW,高位地址信号
-
对端口读/写信号的产生条件
- IO/#M = 1
- #RD = 0 ——> #IOR = 0
- #WR = 0 -——> #IOW = 0
OUT
指令将使总线的**#IOW
信号有效
IN
指令将使总线的
#IOR**信号有效
I/O地址译码
-
当接口只有一个端口时:
- 无片内地址,全部地址信号均为高位地址(可全部参与译码),译码输出直接选择该端口;
-
当接口具有多个端口时:
- 则16位地址线的高位参与译码(决定接口的基地址),二低位则用于确定要访问哪一个端口。
由于端口资源丰富,端口地址译码常采用部分地址译码。
简单接口电路
了解和掌握:
- 不同类型接口的特点
- 三态门接口
- 锁存器接口
1. 接口的分类及特点
-
按传输信息的方向分类:
- 输入接口(要求对数据具有控制能力)
- 输出接口(要求对数据具有锁存能力)
-
按传输信息的类型分类:
- 数字接口
- 模拟接口
-
按传输信息的方式分类
- 并行接口
-
串行接口
2. 三态门接口
-
特点:
- 具有对数据的控制能力,但不具备对数据的锁存能力。
3. 锁存器接口
**特点:**具有对数据的锁存能力
-
8D锁存器:
- 74LS273:8D触发器,不具备数据的控制能力。
-
74LS373:含三态的8D触发器,具有对数据的控制能力。
- 既可以做输入接口,也可以做输出接口。
74L273
无论是IO接口,还是存储器接口,
读写控制信号
都一定要作为译码器的输入。
基本输入/输出方法
无条件传送
查询式传送
中断方式传送
直接存储器存取(DMA)
1. 无条件传送
2. 查询工作方式
- 仅当条件满足时才能进行数据传送;
- 每满足一次条件只能进行一次数据传送。
-
适用场合:
- 外设并不总是准备好
- 对传送速率和效率要求不高
-
工作条件:
- 外设应提供设备状态信息
-
接口应具备状态端口
优点:软硬件比较简单
缺点:CPU效率低,数据传输的实时性差,速度较慢
3. 中断控制方式
- 特点:外设在需要时向CPU体出请求,CPU再去位他服务。服务结束后或在外设不需要是,CPU可执行自己的程序。
- 优点:CPU效率高,实时性号,速度快。
- 缺点:程序编制相对较为复杂。
4. DMA控制方式
特点:
- 外设直接与存储器进行数据交换,CPU不再担当数据传输的中介者。
- 总线由DMA控制器(DMAC)进行控制(CPU要放弃总线控制权),内存/外设的地址和读写控制信号均由DMAC提供。
总结
简单I/O接口电路设计
例1:
例2:
七、可编程数字接口
可编程并行接口芯片8255
1. 并行接口8255的特点
通道型接口
:主要用于数据的输入或输出
含3个独立的8为并行输入/输出端口
- 2个为8位端口(PA,PB);
-
1个可拆分为两个4位端口(PC口)
各端口均具有数据的控制和锁存能力
-
既可作为输入端口,也可以作输出端口。
可通过编程,设置各端口工作在某一确定状态下
2. 8255内部的主要部件
有3个8位的数据端口,每个端口都可以作为输入端口,或设置为输出端口。
-
端口A
:A口属于A组,受A组控制电路控制,具备输入缓冲,输出锁存功能。 -
端口B
:B口属于B组,受B组控制电路控制,具备输入缓冲,输出锁存功能。 -
端口C
:C口既可以当成一个8位的数据端口用,作为输入或输出数据端口,也可以作为两个独立的4位端口用。
3. 8255引脚信号
链接系统端的主要引线:
- D0——D7
- #CS
- #RD
- #WR
- A0,A1(区分内部的4个端口)
- REAST
A1 | A0 | 选中端口 |
---|---|---|
0 | 0 | A端口 |
0 | 1 | B端口 |
1 | 0 | C端口 |
1 | 1 | 控制寄存器 |
连接外设端的引脚:
- PA0 —— PA7
- PB0 —— PB7
-
PC0 —— PC7
分别对应A、B、C三个端口
4. 8255的工作方式
方式0——基本的输入/输出方式
- 相当于三个独立的8位简单接口
- 3个数据端口A,B和C中任何一个端口都可由程序设定为8位的输入口或输出口。
- C端口的两个半口(高4位和低4位)可独立设为输入或输出端口。
-
常用于连接简单外设,用于无条件或查询方式,没有规定固定的用于应答式的联络信号线。
习惯上:
A端口和B端口作为8位数据的输入或输出口
C口的某些位作为
状态输入
。
注:
-
若使C端口低4位中某一位作为输入口,则低4位中其他位都为输入口。同时可设高4位作为输出。
方式1——选通工作方式
- 利用一组选通控制信号控制A端口和B端口的数据输入输出。
- A口、B口作为输入或输出口,C口的部分位用作选通控制信号
- A口、B口在作为输入和输出时的选通信号不同。
方式1输入
方式1输出
方式2——双向传送方式
双向输入输出方式
- 可以既作为输入口,又作为输出口。
只有A端口可以工作在方式2下
方式2的应用:
- 可使A端口作为双向端口所有
-
用于
中断控制
方式 -
当A口工作于方式2时:
-
B口可工作于方式1
此时C口的所有位都用做选通控制信号的输入输出
-
B口也可工作于方式0
此时C口的剩余位也可工作于方式0
-
B口可工作于方式1
4. 方式控制字及位控制字
-
方式控制字
-
用于确定3个端口的工作方式及数据传送方向;
-
用于确定3个端口的工作方式及数据传送方向;
-
位控制字
-
仅用于C端口
- 可设置C口某位的初始状态(为高电平或低电平)
-
当其工作于方式0下且作为输出口时,一般需要对作为输出得位设置初始状态(即初始化)
-
5. 8255芯片的应用
- 芯片与系统的连接
- 芯片的初始化
-
相应的控制程序
MOV DX, 1023H ;控制寄存器地址
MOV AL, 10010000B ;
OUT DX, AL
MOV AL, 0 ;设置PC0为低电平
OUT DX, AL
MOV DX, 1021H ;PB端口
MOV AL, 80H ;PB7输出高电平,启动布防
OUT DX, AL
A: MOV DX, 1020H ;从A端口读数据
IN AL, DX
CMP AL, 0 ;判断是否全为0
JZ A ;
MOV CX, 10 ;循环次数
MOV DX, 1022H ;C端口
MOV AL,1 ;高电平闪烁
B: OUT DX, AL ;亮
CALL DELAY
NOT AL ;反转为0,灭
CALL DELAY
LOOP B
可编程并行数字接口应用例
利用8255和8253构造报警系统
系统软件设计
8255_INIT PROC ;初始化子程序
PUSH AX ;压栈
PUSH DX
MOV DX, 3E3H ;写8255控制字
MOV AL, 90H(10010000B);PA方式0输入,PB方式0输出,PC方式0输出
OUT DX, AL
MOV AL, 0CH (00001100B) ;PC6置0
OUT DX, AL
MOV AL, 0FH (00001111B) ;PC7置1
OUT DX, AL
PUSH DX
PUSH AX
RET
8255 INIT ENDP
8253_INIT PROC
PUSH AX
PUSH DX
MOV DX, 3E7H ;8253控制字
MOV AL, 16H(00010110B);计数器0,读/写低字节,方式3(方波),二进制计数
OUT DX, AL
MOV DX, 3E4H ;8253计数器0
MOV AL, 189;
OUT DX, AL
PUSH DX
PUSH AX
RET
8253 INIT ENDP
L1: MOV DX, 3E0H ;PA口,8个监测点
MOV CX, 5 ;循环5次
L2: IN AL, DX ;读监测点数据
CMP AL, 0 ;是否有异常
JZ L1 ;若无异常继续L1程序段检测
LOOP L2 ;否则检查是否连续5次都有异常
MOV DX, 3E2H ;PC口,报警器+警灯
L3: MOV AL, 40H(01000000B) ;PC6高电平\PC7低电平
OUT DX, AL ;警报
CALL DELAY
MOV AL, 0C0H(11000000B) ;PC6\PC7高电平
OUT DX, AL ;警报+警灯
CALL DELAY
MOV AH, 1;键盘按下执行下一条程序---》MOV AL, 80H
INT 16H
JZ L3
MOV AL, 80H
OUT DX, AL
可编程定时计数器8253
计数与定时
定时/计算器的工作基准是
时钟脉冲
计数脉冲周期恒定 –> 定时
定时的时间长度取决于时钟脉冲的周期及脉冲数
加法计数
减法计数
8253芯片特点
可编程的逻辑器件;
非通道型
的接口,具有特定功能;
可实现计数和定时;
(例如定时启动空调)
工作方式:
- 减法计数
- 计数值减为0时输出相应控制信号
- 输出控制型号的形式可通过软件设置
认识学习8253主要从这几个方面:
- 外部主要引脚信号功能即内部结构
- 计数启动方式
- 工作方式
- 控制命令字格式
- 应用
1. 外部引线及内部结构
连接系统端的主要引线:
- D0~D7–8位的数据信号
- #CS—片选引脚
- #RD—读允许
- #WR—写允许
-
A0,A1—
片内地址
片内有4个端口
连接外设段的主要引线 - CLK–时钟脉冲输入
- GATE–门控信号输入(计数)
- OUT–定时输出(输出波形)
具有三个完全相同的、独立的计数/定时器
每个计数器都占有一个端口地址
每一个计数器里面都有两个16位的寄存器:
16b初值寄存器
、
16b计数寄存器
。
这两个寄存器在初始都填入值,但16b初值寄存器数值不变,16b计数寄存器中的数值从初始减到0。
- 三个可独立工作的16位定时/计数器,一个控制寄存器。共占用4个端口地址。
- 4个端口的地址编码:
A1 | A0 | 选中端口 |
---|---|---|
0 | 0 | CNT0 |
0 | 1 | CNT1 |
1 | 0 | CNT2 |
1 | 1 | 控制寄存器 |
2. 计数启动方式
启动方式由GATE端信号的形式决定
软件启动:GATE端必须为高电平
硬件启动:GATE端有一个上升沿
3. 工作方式
方式0
- 软件启动,不自动重复计数;
-
计数结束输出高电平。
先写命令字后写初值
① 当GATE为高电平时,输入初值后开始计数。
②计数结束后输出高电平。
③其输出信号可用于外部可屏蔽中断请求信号。
方式1
- 硬件启动,不自动重复计数;
-
计数开始输出低电平,结束后又变高。
①计数一旦启动,GATE端即使变为低电平也不会影响计数。
②可重复触发。当计数到0后,不用再次写入计数初值。只要再次出现GATE上升沿型号产生一个同样宽度的负脉冲。
方式2
- 软、硬件启动,自动重复计数
-
计数到最后一个脉冲时输出低电平
①可输出频率为(1/N)CLK脉冲信号的连续方波信号。
②每1个OUT端脉冲包含(N-1)*CLK的正脉冲,1CLK的负脉冲。
方式3
- 软、硬件启动,自动重复计数
-
输出对称方波
①若N为偶数,输出频率为(1/N)CLK的连续对称方波信号
②若N为奇数,输出波形为(N+1)/2CLK周期的正脉冲,(N-1)/2CLK负脉冲。
方式4
①软件启动,不自动重复计数。
②计数结束输出一个CLK宽度的低电平。
方式5
①硬件启动,不自动重复计数
②波形与方式4相同
小结
-
需要两个写脉冲—两次写操作
-
第1个写脉冲写入
控制字
-
第2个写脉冲写入
计数初值
-
第1个写脉冲写入
- 根据不同的工作方式,有不同的计数启动方式。
- 可根据对输出波形的要求,选择不同的工作方式。
- 能输出连续波形的只有方式2和方式3。
控制字
- 用于设定各计数器的工作方式
4. 控制字
5. 8253的应用
硬件设计:
- 与系统的连接
软件设计
-
初始化程序设计
- 写入控制字
- 置计数初值
与系统的连接示意
应用中的注意点
-
每一次启动计数,需要有
2次写操作
:- 写控制字
-
写计数器初值
- 如果初值为8位字长,则一次写入;若初值为16位字长,则需两次写入。
-
每个计数器的控制命令字均送入控制寄存器
-
各计数器的计数初值送到该计数器的计数寄存器及初值寄存器。
初始化程序流程
原则:先写入控制字,后写入计数初值
8253应用例
- 采用8253作定时/计数器,器接口地址为0120H~0123H
- 输入8253的时钟频率为2MH。
-
要求:
初始化程序:
CNT0:
MOV DX, 0123H
MOV AL, 34H
OUT DX, AL
MOV DX, 0120H
MOV AX, 20000
OUT DX, AL
MOV AL, AH
OUT DX, AL
八、模拟输入/输出接口
D/A转换器
1. D/A转换器的基本工作原理
-
如果用8位二进制代码来控制途中的S
1
~S
8
( D
i
=0时,S
i
断开)则不同的二进制代码就对应不同输出电压V; -
当代码在0~ FFH之间变化时,V
0
相应地在0 -(255/256) V
ref
之间变化;
2. D/A转换器的主要技术指标
-
分辨率
- 输入的二进制数每±1个最低有效位,是输出的变化的程度。
-
分辨率表示方式
- LSB最低有效位
- 可以用输入数字量的位数来表示,如8位、10位等;
- 也可以用一个LSB使输出变化的程度来表示。
-
例:
一个满量程为5V的10位D/A变换器的分辨率为:
5/(2
10
-1)=5/1025=0.04888V=48.88mV
-
转换时间
- 从开始转换到与满量程值相差±1/2LSB对应的模拟量所需要的时间。
3. 典型D/A转换器DAC0832
特点:
- 8位电流输出型D/A转换器
- T型电阻网络
- 差动输出
主要引脚功能
-
输入寄存器控制信号
D7~D0:输入数据线
ILE:输入锁存允许
#CS:片选信号
#WR1:写输入锁存器 -
DAC寄存器的控制信号
#WR2:写DAC寄存器 -
输出型号
IOUT1
IOUT2
有两道缓冲门
单缓冲模式
- 使输入寄存器或DAC寄存器二者之一处于直通,即芯片只占用一个端口地址。
- CPU只需一次写入即开始转换。写入数据的程序为:
MOV DX, PORT
MOV AL, DATA
OUT DX, AL
-
#XFER和#WR2接地,表示DAC寄存器为常通状态。
输出三角波:(不考虑频率和赋值调整)
MOV DX, 0278H ;端口
MOV AL, 0 ;从0开始增加
NET1: OUT DX, AL ;输出电压
INC AL ;增加1
CMP AL, 0FFH ;比较是否达到峰值
JNZ NET1 ;未到达,跳转
DEC AL ;到达峰值,开始减
NET2: OUT DX, AL ;输出电压
DEC AL ;减少1
CMP AL, 0 ;比较是否到达0
JNZ NET2 ;否,跳转NET2,继续减1
JMP NET1 ;是,跳转NET1,重新开始
双缓冲模式(标准模式)
-
输入寄存器
和
DAC寄存器
均需控制。-
当输入寄存器控制信号有效时,数据写入
输入寄存器
中,并同时位于DAC寄存器的输入端; -
在DAC寄存器控制信号有效时,数据写入
DAC寄存器
*,并启动变换。
-
当输入寄存器控制信号有效时,数据写入
- 此时芯片占用两个端口地址。
-
优点:
- 数据接收与D/A转换可异步进行;
- 可实现多个DAC同步转换输出。
-
应用场景:分时写入,同步转换
两片0832
两片0832的DAC寄存器具有同样的地址,其#XFER 并联在一起,共同使用了PORT3的地址
MOV AL, DATA
MOV DX, PORT1; 0832-1的输入寄存器地址
OUT DX, AL
MOV DX, PORT2; 0832-2的输入寄存器地址
OUT DX, AL
MOV DX, PORT3; DAC寄存器地址
OUT DX, AL
HLT
无缓冲器模式
- 是内部的两个寄存器都处于直通状态。
- 一般来说无缓冲模式是不能直接和CPU直接联通的,就是说0832和CPU之间要加一个数字接口(如74LS373,8255等)。
4. D/A转换器的应用
-
信号发生器
:向D/A转换器写入某种按规律变化的数据,即可在输出端获得相应的各种波形 -
用于闭环控制系统
A/D转换器
- A/D转换器的一般工作原理
- A/D转换器的主要技术指标
-
A/D转换器的应用
- 与系统的连接
-
数据采集程序的编写
将连续的变换的
模拟信号
转换为
数字信号
的装置,简称
ADC
,是模拟系统与计算机之间的接口部件。
1. A/D转换器的工作原理
-
逐位反馈型A/D转换器
类似天平称重量的尝试法,逐步用砝码的累积重量去逼近物体。
2. 主要技术指标
-
转换精度
-
转化时间
- 实现一次转换需要的时间。精度越高(字长越长),转换速度越慢。
-
动态范围
- 允许转换的电压范围。
3. 典型的A/D转换器芯片–ADC0809
ADC0809:
- 8通道(8路)输入
- 8位字长
- 逐位逼近型
- 转换时间100us
- 内置三态输出缓冲器
主要引脚功能
内部结构
工作流程
与系统的连接
采集方式
-
采集单路模拟量
此时通道可由硬件确定,系统无须输出通道地址,则也无需地址锁存。
-
循环采集多路模拟量
系统通过软件方式循环输出不同的通道地址,即相应的地址锁存信号。
中断
中断的概念
中断,是指在程序执行过程中,出现某种紧急事件,CPU暂停执行现行程序,转去执行处理该事件的程序——
中断服务程序
,执行完后再
返回
到被执行的程序继续执行,这一过程称为中断。
中断源
中断源
- 中断源可以笼统地分为两类:CPU内产生的,称为内部中断,其他的称为外部中断。
- 内部中断包括:由CPU本身产生的中断、由控制器产生的中断、由程序员安排的中断指令引起的中断。
-
外部中断又根据中断时间的紧迫程度将中断源划分为
可屏蔽中断
和
不可屏蔽中断
。
常见中断源
(1)
一般的I/O设备
发出的中断请求,如键盘、打印机等。
(2)
数据通道
发出的中断请求,如键盘、打印机等。
(3)
实时时钟
发出的中断请求,如定时芯片8253的定时输出。
(4)
硬件故障
发出的中断请求,如电源掉电、RAM奇偶校验错等。
(5)
软件故障
发出的中断请求,如执行出书为0的除法运算、地址越界、使用非法指令等。
(6)
软件设置
的中断源,如在程序中用中断指令而产生的中断。
中断处理的基本过程
中断处理的基本过程包括:中断请求、中断判优、中断响应、中断服务和中断返回等5个阶段。
1. 中断请求
(1)发生在
CPU内部
的中断,不需要中断请求,CPU内部的中断控制逻辑直接接收处理。
(2)外部中断请求由
中断源
提出。外部中断源利用CPU的
中断输入引脚输入中断请求信号
。一般CPU设有两个中断请求输入引脚:
可屏蔽中断请求输入引脚
和
不可屏蔽中断请求输入引脚
。
(3)
中断请求触发器:
每个中断源发出中断请求信号的时间是不确定的,而CPU在何时响应中断也是不确定的。所以,每个中断源都有一个
中断请求触发器
,锁存自己的中断请求信号,并保持到CPU响应这个中断请求之后才将其清除。
(4)
中断允许触发器
在CPU内部有一个中断允许触发器,当其为“1”时,允许CPU响应中断,称为
开中断
。若其为“0”,不允许CPU响应中断,中断被屏蔽,称为
关中断
。
- 通常,当CPU复位时,中断允许触发器也复位为“0”,即关中断。当CPU中断响应时,CPU自动关闭中断,禁止接收另一个新的中断。
2. 中断判优
(1)软件判优
CPU检测到中断请求后,首先读取中断请求寄存器的内容,逐位检测它们的状态,检测到某一位为1,就确定对应的中断源有中断请求,专区执行它的中断服务程序。
先检测哪一个,哪一个的优先级就高,后检测哪一个,哪一个优先级就低,检测的顺序就是各中断源的优先级顺序。
输入端口地址为67FFH。查询程序:
MOV DX, 87FFH
IN AL, DX ;读中断请求寄存器内容
SHR AL, 1 ;右移一位,移到CF位置上
JC IR0 ;IRQ0有请求,转IR0
SHR AL, 1
JC IR1 ;IRQ1有请求,转IR1
SHR AL, 1
JC IR2 ;IRQ2有请求,转IR2
软件判优耗时较长。如果中断源很多,中断的实时性就很差,但是软件判优优先权安排灵活。
(2)硬件判优
利用专门的硬件电路确定中断源的优先级,有2种常见的方式,
菊花链判优电路
和
中断控制器判优
。
中断控制器,如
Intel8259A
,可以以多种方式设置中断源的中断优先级。中断控制器中有一个中断优先级判别器,它自动判别出目前提出中断请求的优先级最高的中断源,并将它的
中断向量码
送到数据总线,CPU接收中断向量码并据此找到它的
中断服务程序
。
3. 中断响应
经过中断判优,中断处理就进入中断响应阶段。中断响应时,CPU向中断源发出中断响应信号,同时:
① 保护硬件现场;
② 关中断;
③ 保护断电;
④ 获得中断服务程序的入口地址。
4. 中断服务
中断服务程序的一般结构为:
-
保护现场
。在中断服务的起始部分安排若干条入栈指令,将各寄存器的内容
压入堆栈
保存。 -
开中断
。在中断服务程序执行期间允许级别更高的中断请求现行的中断服务程序,实现中断嵌套。 -
中断服务
。完成中断源的具体要求。 -
恢复现场
。中断服务程序结束前,必须恢复主程序的中断现场。通常是将保存在堆栈中的现场信息
弹出
到原来的寄存器中。 -
中断返回
。返回到原程序的断点处,继续执行源程序。
5. 中断返回
返回到原程序的断点处,恢复硬件现场,继续执行原程序。中断返回操作是中断响应操作的
逆过程
。
中断向量和中断向量表
-
8086/8088CPU的终端系统可以处理256种中断。每种中断都有对应的中断服务程序。
中断服务程序的入口地址称为
中断向量
。256种中断向量存储在内存中构成一张表,称为
中断向量表
。 -
每个中断向量都包括两部分:
段基址和偏移地址
。因此,存放一个中断向量需要4个内存单元,256种中断向量共需要1K个内存单元。
中断向量表位于内存起始地址
00000
~
003FFH
的存储区内。从地址
00000H
开始,
每4个单元存放一个中断向量
,其中低地址的两个单元存放中断向量的偏移地址,高地址的两个单元存放中断向量的段基址。256种中断向量按中断向量码从0 ~255的顺序依次存入中断向量表中。
中断向量在中断向量表中的存放首地址称为向量地址,其值为:中断类型码 x 4。
- 如DOS系统调用的中断类型号为21H,向量地址为:nx4=84H。
当CPU调用中断类型码为n的中断服务程序时首先把n乘以4,得到他的向量地址4n,然后把
4n+1
:
4n
两个单元的内容去除并装入
IP寄存器
;再把
4n+3
:
4n+2
两个单元的内容去除并装入
CS寄存器
,CPU就获得了
n
的中断服务程序入口地址,进而转去执行中断服务程序。
8086/8088CPU专用中断类型有5个
硬件中断
8086/8088CPU芯片有两个硬件中断请求信号输入引脚:NMI和INTR, 用来接收外部中断源产生的中断请求。NMI引脚接收非屏蔽中断请求,INTR引脚接收可屏蔽中断请求。
(1)非屏蔽中断
(2)可屏蔽中断
中断处理流程
CPU在每条指令的最后一个时钟周期按照下列顺序检测有无中断请求:
- 执行指令时是否有异常情况发生,如除法错;
- 有没有单步中断请求(TF=1);
- 有没有NMI非屏蔽中断请求;
- 有没有协处理器段超限;
- 有可屏蔽中断请求信号吗?
- 是中断指令吗?
- 如果有一个或者多个中断条件出现,CPU响应中断。
-
如果检测到
内部终端或非屏蔽中断
,CPU从
内部
获得中断类型码; -
如果检测到
可屏蔽中断请求
,CPU进一步测试
IF标志位
,如果IF=1,CPU就进入中断响应总线周期,从
中断控制器
获取中断类型码。
获得中断类型码后,各种中断的处理过程相同。CPU将中断类型码放入暂存器保存,以下动作顺序发生:
- 标志寄存器的内容入栈;
- 清除中断标志IF和TF
- CS的内容入栈;
- IP的内容入栈;
- 根据中断类型码,在中断向量表中取出中断向量转入IP和CS;
- 执行中断服务程序;
- 中断返回。
堆栈的变化
CPU响应中断时将状态表制寄存器的内容压入堆栈以保护现场,堆栈指针SP减2,接着CPU将主程序断点CS和IP的内容压入堆栈以保护断点,堆栈指针SP再减4。在中断服务程序的末尾执行IRET指令,从堆栈中弹出IP\CS\FLAGS,堆栈指针SP+6,堆栈恢复原状。
中断响应时,CPU发中断响应信号,同时:
① 保护硬件现场;
② 关中断;
③ 保护断点;
④ 获得中断服务程序的入口地址。
可编程中断控制器8259A
Intel 8259A可编程中断控制器 可以管理8个外部中断源,多偏8259A级联最多可以管理64个外部中断源(1个主片,8个从片),而无需外加电路。
它有多种工作方式。
CPU响应中断时,它提供中断源的中断向量码。
内部结构
8259A的内部逻辑由以下部分构成:
(1)
数据总线缓冲器
,它是CPU与8259A之间的数据总线接口,传输的信息包括
控制信息
、
状态信息
及
中断信息
。
(2)读/写控制逻辑。
8259只有一根地址线,说明内部只有2个端口。
A0 = 0时,偶地址。A0 = 1时,奇地址。
(3)级联控制,用以实现8259A芯片之间的级联,使得中断源可以由8级扩展至64级。
(4)
中断请求寄存器IRR
,用于寄存IR0~IR7的中断请求信号。如果由中断请求,IRR寄存器中的对应位置1。
(5)
中断服务寄存器ISR
,保存当前正在处理的中断请求。当CPU正为某个中断源服务时,8259A使ISR中的相应位置1。当ISR全为“0”时,表示无任何中断服务。
(6)
优先级分辨其PR
,也称优先级判决器,用来管理和试别各个中断源的优先级别。
(7)
操作命令字寄存器
,
OCW1~OCW3
,用于对中断处理过程的动态控制,由应用程序设定,在一个系统运行过程中,操作命令字可以被多次设置。
中断屏蔽寄存器IMR
用于存放CPU送来的中断屏蔽信号
OCW1
,它的每位对应IRR寄存器中的位。当它的某位为“1”时,对应的中断请求就被屏蔽,即对该中断源的中断请求置之不理。
(8)
初始化命令字寄存器
ICW1~ICW4,由初始化程序设置。初始化命令字送入8259A时,必须严格按着规定的顺序。
引脚功能
A0:地址输入引脚,选择8259A内部不同的寄存器。
A0 = 0 ICW1 \ OCW2 \ OCW3
A0 = 1 ICW~ICW4\ OCW1
CAS2~CAS0:级联信号引脚,用来选择从片。当8259A为主片时,为输出;否则为输入。与#SP/#EN信号配合,实现芯片的级联。
#SP/#EN:从片编程/允许缓冲器,双功能引脚。在非缓冲方式下,#SP/#EN引脚作为输入,用来决定本片8259A是主片还是从片。#SP/#EN为1,则8259A为主片。#SP/#EN为0,则8259A为从片。在缓冲方式下,#SP/#EN引脚作为输出,用作8259A外部数据总线缓冲器的信号。
8259A编程
1. 初始化命令字
(1)ICW1
(2)ICW2
(4)ICW4
2. 操作命令字
在8259A的工作期间,操作命令字用于控制8259A的操作。例如,可以通过操作命令字重新设置工作方式,或者实施读取8259A中某些寄存器的内容。
(1)OCW1
中断屏蔽字。用于设置或读取中断屏蔽器IMR,它对IR7~IR0的中断请求输入进行管理。
ICW1 EQU 00010011B ;13H写入20端口
ICW2 EQU 00100000B ;20H写入21端口,设置8个中断源的中断向量码
ICW4 EQU 00000011B ;03H写入21端口,中断结束方式是自动结束
OCW 1 EQU 00000000B ;00H写入21端口,8个中断源都没有屏蔽
Init PROC
MOV DX, CS8259A
MOV AL, ICW1
OUT DX, AL
MOV DX, CS8259B
MOV AL, ICW2
OUT DX, AL
MOV DX, CS8259B
MOV AL, ICW4
OUT DX, AL
MOV DX, CS8259B
MOV AL, OCW1
OUT DX, AL
STI ;开中断
RET
Init ENDP
(2)OCW2