一、并行和串行通信
1. 并行通信
(1)数据的并行传送方式是以字节或字为单位传送
(2)并行通信通常用在传输距离近,数据率高的场合
(3)多位二进制同时由原端发向目的地。
如:微机与并行接口打印机、磁盘驱动器
系统板上各部件之间,
接口电路板上各部件之间
2.串行通信
(1)数据的串行传送方式是以位为的单位传送
(2)通信电线路的连接方式:单工、半双工、全双工
(3)串行通信协议分为:异步通信和同步通信
(4)异步串行通信的数据帧的格式:
传送数据的基本单位是字符,最优先传送的1位起始位, 低电平信号,随后5 ~ 8位数据位,1位奇偶校验位,最后1 ~ 2位高电平的停止位。
例:设每个字符对应1位起始位,7位信息位,1位奇偶校验位,1位停止位,若波特率为1200波特,则每秒传输的最大字符数为 ___ 120 ___ 个
1200 ÷ 10 = 120 1200\div 10=120 1200÷10=120
(5)异步串行通信的数据传输率
波特率(波特bit/s):每秒能传输的数据的二进制位数。
串行异步通信中,收发双方的波特率必须相同,只有波特率一致的情况下才能保证接收方和发送方获取同样的数据。
波 特 因 子 = 接 收 器 或 发 送 器 的 频 率 数 据 传 输 的 波 特 率 \pmb{波特因子=\frac{接收器或发送器的频率}{数据传输的波特率}} 波特因子=数据传输的波特率接收器或发送器的频率波特因子=数据传输的波特率接收器或发送器的频率波特因子=数据传输的波特率接收器或发送器的频率
例:如果9600波特传送一个7位ASCII字符并带1位奇偶校验位和2位停止位,写出该字符的传输速率。
1(起始位)+7+1+2=11
字符的传输速率 9600 11 = 872 字 符 / s \frac{9600}{11}=872字符/s 119600=872字符/s
(6)8251可编程串行接口芯片
支持异步和同步传送
二、8255(可编程并行接口芯片)的结构、功能和应用
1.结构
2. 特点
内 部 逻 辑 { A 组 控 制 { A 端 口 C 端 口 的 高 四 位 B 组 控 制 { B 端 口 C 端 口 的 低 四 位 内部逻辑\begin{cases} A组控制 \begin{cases} A端口\\C端口的高四位\\ \end{cases}\\ B组控制 \begin{cases} B端口\\C端口的低四位 \end{cases} \end{cases} 内部逻辑⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧A组控制{A端口C端口的高四位B组控制{B端口C端口的低四位
3
个
8
位
I
/
O
数
据
端
口
{
P
A
P
B
P
C
3个8位I/O数据端口\begin{cases} PA\\PB\\PC\end{cases}
3个8位I/O数据端口⎩⎪⎨⎪⎧PAPBPC
2
位
地
址
线
{
A
1
A
0
2位地址线\begin{cases}A_1\\A_0 \end{cases}
2位地址线{A1A0
4
个
I
/
O
端
口
地
址
{
0
0
→
端
口
A
0
1
→
端
口
B
1
0
→
端
口
C
1
1
→
控
制
口
(
前
面
是
A
1
,
后
面
是
A
0
)
4个I/O端口地址\begin{cases} 0\ 0\rightarrow 端口A\\ 0\ 1\rightarrow 端口B\\ 1\ 0\rightarrow 端口C\\ 1\ 1\rightarrow 控制口\\ (前面是A1,后面是A0) \end{cases}
4个I/O端口地址⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧0 0→端口A0 1→端口B1 0→端口C1 1→控制口(前面是A1,后面是A0)
1. 8255A可以无条件方式、查询方式和中断方式完成CPU与外设的数据交换。
2. 以无条件方式工作时,端口A、B和C都可以作为数据输入/输出端口。
3. 以查询或中断方式工作时,A口与B口可以作为数据输入/输出端口,C口作为握手联络信号,负责输出控制信息或输入状态信息。
3 种 工 作 方 式 : { 方 式 0 ( 基 本 输 入 输 出 方 式 ) { 适 用 于 无 条 件 传 送 和 条 件 传 送 通 常 不 用 联 络 信 号 或 不 适 用 固 定 的 联 络 信 号 可 以 有 16 种 组 合 进 行 数 据 的 输 入 / 输 出 直 接 由 C P U 执 行 I N / O U T 完 成 数 据 传 送 方 式 1 ( 选 通 输 入 输 出 方 式 ) { 适 用 于 条 件 传 送 和 中 断 方 式 通 常 使 用 固 定 的 联 络 信 号 一 般 作 中 断 方 式 输 入 / 输 出 输 入 : S T B ‾ 与 I B F ‾ 构 成 了 一 对 应 答 联 络 信 号 。 输 出 : O B F ‾ 与 A C K ‾ 构 成 了 一 对 应 答 联 络 信 号 A 口 和 B 口 通 常 用 于 I / O 数 据 传 送 , C 口 用 作 A 口 和 B 口 的 联 络 线 , 以 中 断 方 式 传 送 数 据 。 方 式 2 ( 双 向 选 通 传 送 方 式 ) { 适 用 于 条 件 传 送 和 中 断 方 式 只 有 端 口 A 可 以 工 作 在 方 式 2 P A 7 ~ P A 0 为 双 向 I / O 总 线 。 3种工作方式:\begin{cases}方式0(基本输入输出方式) \begin{cases} 适用于\pmb{无条件传送}和\pmb{条件传送}\\ 通常不用联络信号或不适用固定的联络信号\\ 可以有16种组合进行数据的输入/输出\\ 直接由CPU执行IN/OUT完成数据传送\\ \end{cases}\\ 方式1(选通输入输出方式) \begin{cases} 适用于\pmb{条件传送}和\pmb{中断方式}\\ 通常使用固定的联络信号\\ 一般作\pmb{中断方式输入/输出}\\ \pmb{输入}:\overline{STB}与\overline{IBF}构成了一对应答联络信号。\\ \pmb{输出}:\overline{OBF}与\overline{ACK}构成了一对应答联络信号\\ A口和B口通常用于I/O数据传送,C口用作A口和B口的联络线,以中断方式传送数据。\\ \end{cases}\\ 方式2(\pmb{双向}选通传送方式) \begin{cases} 适用于\pmb{条件传送}和\pmb{中断方式}\\ \pmb{只有端口A可以工作在方式2}\\ PA7~PA0为双向I/O总线。 \end{cases} \end{cases} 3种工作方式:⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧方式0(基本输入输出方式)⎩⎪⎪⎪⎨⎪⎪⎪⎧适用于无条件传送无条件传送无条件传送和条件传送条件传送条件传送通常不用联络信号或不适用固定的联络信号可以有16种组合进行数据的输入/输出直接由CPU执行IN/OUT完成数据传送方式1(选通输入输出方式)⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧适用于条件传送条件传送条件传送和中断方式中断方式中断方式通常使用固定的联络信号一般作中断方式输入/输出中断方式输入/输出中断方式输入/输出输入输入输入:STB与IBF构成了一对应答联络信号。输出输出输出:OBF与ACK构成了一对应答联络信号A口和B口通常用于I/O数据传送,C口用作A口和B口的联络线,以中断方式传送数据。方式2(双向双向双向选通传送方式)⎩⎪⎨⎪⎧适用于条件传送条件传送条件传送和中断方式中断方式中断方式只有端口A可以工作在方式2只有端口A可以工作在方式2只有端口A可以工作在方式2PA7~PA0为双向I/O总线。
方
式
1
输
入
:
方式1输入:
方式1输入:
S
T
B
‾
\overline{STB}
STB:选通输入,是由输入外设送来的输入信号。
I
B
F
IBF
IBF:输入缓冲器满,高电平有效。表示数据已送入8255A的输入锁存器,它由
S
T
B
‾
\overline{STB}
STB信号的下降沿置 位,由信号的上升沿使其复位。
I
N
T
R
INTR
INTR:中断请求信号,高电平有效。由8255A输出,向单片机发中断请求。
I
N
T
E
A
INTE\ A
INTE A:允许端口A输入中断,由
P
C
4
PC_4
PC4控制。
I
N
T
E
B
INTE\ B
INTE B:允许端口B输入中断,由
P
C
2
PC_2
PC2控制。
方
式
1
输
出
:
方式1输出:
方式1输出:
O
B
F
‾
\overline{OBF}
OBF:输出缓冲器满信号,8255A给外设的联络信号,外设可以将数据取走。
A
C
K
‾
\overline{ACK}
ACK:外设的响应信号,外设已将数据取走。
I
N
T
R
‾
\overline{INTR}
INTR:中断请求信号。表示该数据已被外设取走,请求单片机继续输出下一个数据。
I
N
T
E
A
INTE\ A
INTE A:允许端口A输出中断,由
P
C
6
PC_6
PC6控制。
I
N
T
E
B
INTE\ B
INTE B:允许端口B输出中断,由
P
C
2
PC_2
PC2控制。
方
式
2
输
入
方式2输入
方式2输入:
P
A
7
~
P
A
0
PA_7~PA_0
PA7~PA0受
S
T
B
A
‾
\overline{STBA}
STBA和
I
B
F
A
‾
\overline{IBFA}
IBFA控制,其工作过程和方式1输入时相同;
方
式
2
输
出
方式2输出
方式2输出:
P
A
7
~
P
A
0
PA_7~PA_0
PA7~PA0受
O
B
F
A
‾
\overline{OBFA}
OBFA、
A
C
K
A
‾
\overline{ACKA}
ACKA控制,其工作过程和方式1输出时相同。
2
个
控
制
字
:
{
方
式
控
制
字
(
控
制
端
口
写
入
)
端
口
C
的
按
位
复
位
/
置
位
字
2个控制字:\begin{cases}方式控制字(\pmb{控制端口}写入)\\ 端口C的按位复位/置位字\end{cases}
2个控制字:{方式控制字(控制端口控制端口控制端口写入)端口C的按位复位/置位字
方
式
控
制
字
(
控
制
端
口
写
入
)
:
方式控制字(控制端口写入):
方式控制字(控制端口写入):
D 7 D_7 D7 | D 6 D_6 D6 | D 5 D_5 D5 | D 4 D_4 D4 | D 3 D_3 D3 | D 2 D_2 D2 | D 1 D_1 D1 | D 0 D_0 D0 |
---|---|---|---|---|---|---|---|
1 |
D
7
:
特
征
位
(
永
远
是
1
)
D_7:特征位(永远是1)
D7:特征位(永远是1)
D
6
D
5
{
0
0
:
端
口
A
方
式
0
0
1
:
端
口
A
方
式
1
1
0
(
x
)
:
端
口
A
方
式
2
D_6\ D_5\begin{cases} 0\ 0:端口A方式0\\ 0\ 1:端口A方式1\\ 1\ 0(x):端口A方式2 \end{cases}
D6 D5⎩⎪⎨⎪⎧0 0:端口A方式00 1:端口A方式11 0(x):端口A方式2
D
4
{
0
:
端
口
A
输
出
1
:
端
口
A
输
入
D_4\begin{cases} 0:端口A输出\\ 1:端口A输入 \end{cases}
D4{0:端口A输出1:端口A输入
D
3
{
0
:
端
口
C
高
四
位
(
P
C
7
∼
P
C
4
)
输
出
1
:
端
口
C
高
四
位
(
P
C
7
∼
P
C
4
)
输
入
D_3\begin{cases} 0:端口C高四位(PC_7\sim PC_4)输出\\ 1:端口C高四位(PC_7\sim PC_4)输入 \end{cases}
D3{0:端口C高四位(PC7∼PC4)输出1:端口C高四位(PC7∼PC4)输入
D
2
{
0
:
端
口
B
方
式
0
1
:
端
口
B
方
式
1
D_2\begin{cases} 0:端口B方式0\\ 1:端口B方式1 \end{cases}
D2{0:端口B方式01:端口B方式1
D
1
{
0
:
端
口
B
输
出
1
:
端
口
B
输
入
D_1\begin{cases} 0:端口B输出\\ 1:端口B输入 \end{cases}
D1{0:端口B输出1:端口B输入
D
0
{
0
:
端
口
C
低
四
位
(
P
C
3
∼
P
C
0
)
输
出
1
:
端
口
C
低
四
位
(
P
C
3
∼
P
C
0
)
输
入
D_0\begin{cases} 0:端口C低四位(PC_3\sim PC_0)输出\\ 1:端口C低四位(PC_3\sim PC_0)输入 \end{cases}
D0{0:端口C低四位(PC3∼PC0)输出1:端口C低四位(PC3∼PC0)输入
端 口 C 复 位 / 置 位 字 : 端口C复位/置位字: 端口C复位/置位字:
D 7 D_7 D7 | D 6 D_6 D6 | D 5 D_5 D5 | D 4 D_4 D4 | D 3 D_3 D3 | D 2 D_2 D2 | D 1 D_1 D1 | D 0 D_0 D0 |
---|---|---|---|---|---|---|---|
0 | 0(x) | 0(x) | 0(x) |
D
7
:
特
征
位
(
永
远
是
0
)
D_7:特征位(永远是0)
D7:特征位(永远是0)
D
6
D
5
D
4
:
无
用
(
都
写
0
)
D_6\ D_5\ D_4:无用(都写0)
D6 D5 D4:无用(都写0)
D
3
D
2
D
1
{
0
0
0
:
P
C
0
0
0
1
:
P
C
1
.
.
.
1
1
1
:
P
C
7
D_3\ D_2\ D_1\begin{cases} 0\ 0 \ 0:PC_0\\ 0\ 0\ 1:PC_1\\ .\\ .\\ .\\ 1\ 1\ 1:PC_7 \end{cases}
D3 D2 D1⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧0 0 0:PC00 0 1:PC1...1 1 1:PC7
D
0
:
{
0
:
复
位
1
:
置
位
D_0:\begin{cases}0:复位\\ 1:置位 \end{cases}
D0:{0:复位1:置位
3. 编程
设 某 8255 的 端 口 地 址 为 F B C 0 H ∼ F B C 3 H , 编 写 程 序 设 置 P C 3 为 置 位 , P C 4 为 复 位 设某8255的端口地址为FBC0H\sim FBC3H,编写程序设置PC_3为置位,PC_4为复位 设某8255的端口地址为FBC0H∼FBC3H,编写程序设置PC3为置位,PC4为复位
P C 3 置 位 : 0000 0111 = 07 H PC_3置位:0000\ 0111=07H PC3置位:0000 0111=07H
P C 4 复 位 : 0000 1000 = 08 H PC_4复位:0000\ 1000=08H PC4复位:0000 1000=08H
M O V D X , F B C 3 H MOV\ DX,FBC3H MOV DX,FBC3H
M O V A L , 07 H MOV\ AL,07H MOV AL,07H
O U T D X , A L OUT\ DX,AL OUT DX,AL
M O V A L , 08 H MOV\ AL,08H MOV AL,08H
O U T D X , A L OUT\ DX,AL OUT DX,AL
8255的端口A、端口C均工作在方式0,以端口A作为输出控制8个LED灯,端口C作为输入口,连接8个开关 k 0 ∼ k 7 k_0\sim k_7 k0∼k7
(1)8255的端口地址和方式控制字
(2)编程控制:检测开关状态,若全闭合,PA端口口控制使灯亮起,否则使灯熄灭
(1)
端口地址8080H~8083H
方式控制字:10001001=89H
(2)
M O V D X , 8083 H ; 控 制 口 地 址 \qquad MOV\ DX,8083H\qquad\color{DeepSkyblue}{;控制口地址} MOV DX,8083H;控制口地址
M O V A L , 89 H ; 方 式 控 制 字 \qquad MOV\ AL,89H\qquad\color{DeepSkyblue}{;方式控制字} MOV AL,89H;方式控制字
O U T D X , A L ; 写 入 控 制 字 , 初 始 化 \qquad OUT\ DX,AL\qquad\color{DeepSkyblue}{;写入控制字,初始化} OUT DX,AL;写入控制字,初始化
L 2 : M O V D X , 8082 H I N A L , D X } ; 间 接 寻 址 , 将 端 口 C 数 据 传 入 A L \color{DeepSkyblue}{\left. \begin{matrix} \color{black} {L_2:MOV\ DX,8082H}\\ \color{black} { IN\ AL,DX} \end{matrix} \right\};间接寻址,将端口C数据传入AL} L2:MOV DX,8082HIN AL,DX};间接寻址,将端口C数据传入AL
C M P A L , 0 J Z L I G H T } ; 端 口 C 开 关 闭 合 / 端 口 A 熄 灭 状 态 跳 转 L I G H T \color{DeepSkyblue}{\left. \begin{matrix} \qquad\color{black} {CMP\ AL,0}\\ \qquad\color{black} {JZ\ LIGHT} \end{matrix} \right\};端口C开关闭合/端口A熄灭状态跳转LIGHT} CMP AL,0JZ LIGHT};端口C开关闭合/端口A熄灭状态跳转LIGHT
M O V D X , 8080 H \qquad MOV\ DX,8080H MOV DX,8080H
M O V A L , 0 \qquad MOV\ AL,0 MOV AL,0
O U T D X , A L ; 让 8080 H 端 口 A 都 等 于 0 , 使 灯 熄 灭 \qquad OUT\ DX,AL\qquad\color{DeepSkyblue}{;让8080H端口A都等于0,使灯熄灭} OUT DX,AL;让8080H端口A都等于0,使灯熄灭
J M P L 1 \qquad JMP\ L_1 JMP L1
L I G H T : M O V D X , 8080 H LIGHT:MOV\ DX,8080H LIGHT:MOV DX,8080H
M O V A L , 0 F F H \qquad MOV\ AL,0FFH MOV AL,0FFH
O U T D X , A L ; 让 8080 H 端 口 A 全 是 1 , 使 灯 亮 起 \qquad OUT\ DX,AL\qquad\color{DeepSkyblue}{;让8080H端口A全是1,使灯亮起} OUT DX,AL;让8080H端口A全是1,使灯亮起
L 1 : J M P L 2 L_1:JMP\ L_2 L1:JMP L2
8255的端口A作为输出打印口,工作方式0,PC高四位输出, P C 6 PC_6 PC6产生选通信号,PC口低四位为输入, P C 2 PC_2 PC2接收打印机的“忙”信号(busy),设被打印字符放在数据段有效地址为2000H写存储单元中,8255端口地址为80H~83H,写出8255初始化程序段,打印子程序
方式控制字: 1000 0001 = 81 H 1000\ 0001=81H 1000 0001=81H
PC6=0选通:置位/复位字:00001101=0DH
PC6=1时未选通:置位/复位字:00001100=0CH
M O V A L , 81 H O U T 83 H , A L ; } ; 方 式 控 制 字 初 始 化 \color{DeepSkyblue}{\left. \begin{matrix} \qquad\color{black} MOV\ AL,81H\\ \qquad\color{black} OUT\ 83H,AL; \end{matrix} \right\};方式控制字初始化} MOV AL,81HOUT 83H,AL;};方式控制字初始化
M O V A L , 0 D H O U T 83 H , A L } ; 置 位 / 复 位 字 初 始 化 \color{DeepSkyblue}{\left. \begin{matrix} \qquad\color{black} MOV\ AL,0DH\\ \qquad\color{black} OUT\ 83H,AL \end{matrix} \right\};置位/复位字初始化} MOV AL,0DHOUT 83H,AL};置位/复位字初始化
L 1 : I N A L , 82 H L1:IN\ AL,82H L1:IN AL,82H
T e s t A L , 04 H ; ; P C 2 = 1 忙 其 他 端 口 等 于 0 , 那 么 就 跟 04 H 相 与 \qquad Test\ AL,04H;\qquad\color{DeepSkyblue}{;PC_2=1忙其他端口等于0,那么就跟04H相与} Test AL,04H;;PC2=1忙其他端口等于0,那么就跟04H相与
J N Z L 1 \qquad JNZ\ L_1 JNZ L1
M O V A L , [ 2000 H ] \qquad MOV\ AL,[2000H] MOV AL,[2000H]
O U T 80 H , A L \qquad OUT\ 80H,AL OUT 80H,AL
M O V A L , O C H \qquad MOV\ AL,OCH MOV AL,OCH
O U T 83 H , A L \qquad OUT\ 83H,AL OUT 83H,AL
M O V A L , 0 D H \qquad MOV\ AL,0DH MOV AL,0DH
O U T 83 H , A L \qquad OUT\ 83H,AL OUT 83H,AL
某8255A端口地址范围为03F8H~03FBH,A组和B组均工作在方式0,端口A作为数据输出端口,端口C低四位作为状态信号输入端口,其他端口未用,试画出8255A与系统的连接图,并编号初始化程序。
方式控制字:1000 001B=81H
初始化:MOV DX,03FBH
MOV AL,81H
OUT DX,AL
三、8253(可编程计数器/定时器)的结构、功能和应用
1.结构
2.特点
3
个
独
立
的
16
位
减
一
计
数
器
通
道
:
{
计
数
端
口
0
计
数
端
口
1
计
数
端
口
2
3个独立的16位减一计数器通道:\begin{cases}计数端口0\\ 计数端口1\\ 计数端口2\end{cases}
3个独立的16位减一计数器通道:⎩⎪⎨⎪⎧计数端口0计数端口1计数端口2
2
个
地
址
线
{
A
1
A
0
2个地址线\begin{cases} \pmb{A_1}\\ \pmb{A_0} \end{cases}
2个地址线{A1A1A1A0A0A0
4
个
端
口
地
址
{
0
0
→
计
数
器
端
口
0
0
1
→
计
数
器
端
口
1
1
0
→
计
数
器
端
口
2
1
1
→
控
制
口
(
前
面
是
A
1
,
后
面
是
A
0
)
4个端口地址\begin{cases} 0\ 0\rightarrow 计数器端口0\\ 0\ 1\rightarrow 计数器端口1\\ 1\ 0\rightarrow 计数器端口2\\ 1\ 1\rightarrow 控制口\\ (前面是A1,后面是A0) \end{cases}
4个端口地址⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧0 0→计数器端口00 1→计数器端口11 0→计数器端口21 1→控制口(前面是A1,后面是A0)
2
种
计
数
制
{
二
进
制
计
数
B
C
码
计
数
2种计数制\begin{cases}二进制计数\\ BC码计数\end{cases}
2种计数制{二进制计数BC码计数
3
个
计
数
器
{
C
L
K
0
:
时
钟
输
入
信
号
g
a
t
e
0
:
门
控
输
入
信
号
O
U
T
0
:
计
数
器
输
出
信
号
3个计数器\begin{cases} CLK_0:时钟输入信号\\ gate_0:门控输入信号\\ OUT_0:计数器输出信号 \end{cases}
3个计数器⎩⎪⎨⎪⎧CLK0:时钟输入信号gate0:门控输入信号OUT0:计数器输出信号
6种工作方式
-
方 式 0 : 计 数 结 束 ( 产 生 ) 中 断 方 式 方式0:计数结束(产生)中断方式 方式0:计数结束(产生)中断方式
(软件启动,不重复计数,计数结束OUT输出高电平,可作为中断请求信号)
特 点 { ① 只 计 数 一 个 周 期 , 重 新 写 入 计 数 初 值 后 , 开 始 新 的 计 数 周 期 ② 在 计 数 过 程 中 , G A T E 变 为 低 电 平 , 停 止 计 数 ③ 在 脉 冲 信 号 下 降 沿 , 计 数 器 减 1 ④ 计 数 过 程 中 , 可 修 改 计 数 值 特点\begin{cases} ①只计数一个周期,重新写入计数初值后,开始新的计数周期\\ ②在计数过程中,GATE变为低电平,停止计数\\ ③在脉冲信号下降沿,计数器减1\\ ④计数过程中,可修改计数值\end{cases} 特点⎩⎪⎪⎪⎨⎪⎪⎪⎧①只计数一个周期,重新写入计数初值后,开始新的计数周期②在计数过程中,GATE变为低电平,停止计数③在脉冲信号下降沿,计数器减1④计数过程中,可修改计数值 -
方 式 1 : G A T E 信 号 的 单 稳 负 脉 冲 ( 可 编 程 单 稳 触 发 器 ) 方式1:GATE信号的单稳负脉冲(可编程单稳触发器) 方式1:GATE信号的单稳负脉冲(可编程单稳触发器)
(负脉冲:是一个由高电平跳变到低电平,然后再由低电平跳变到高电平的信号。)
(硬件启动,不自动重复的工作方式)
特 点 { ① 写 入 控 制 字 后 , O U T 输 出 高 电 平 ② 写 入 计 数 器 初 值 后 , 计 数 器 不 开 始 计 数 , 当 G A T E 端 由 低 到 高 跳 变 后 , 在 下 一 个 脉 冲 的 下 降 沿 开 始 计 数 , O U T 端 由 高 变 低 , 计 数 结 束 后 , O U T 输 出 高 电 平 。 ( G A T E 由 低 到 高 才 触 发 计 数 ) 特点\begin{cases} ①写入控制字后,OUT输出高电平\\ ②写入计数器初值后,计数器不开始计数,当GATE端由低到高跳变后,在下一个脉冲的下降沿开始计数,OUT端由高变低,计数结束后,OUT输出高电平。\\ (GATE由低到高才触发计数)\\ \end{cases} 特点⎩⎪⎨⎪⎧①写入控制字后,OUT输出高电平②写入计数器初值后,计数器不开始计数,当GATE端由低到高跳变后,在下一个脉冲的下降沿开始计数,OUT端由高变低,计数结束后,OUT输出高电平。(GATE由低到高才触发计数)
-
方 式 2 : 频 率 发 生 器 ( 分 频 器 ) 方式2:频率发生器(分频器) 方式2:频率发生器(分频器)
(可以软件启动,也可以硬件启动,计数器自动重复计数)
特 点 { ① 在 写 入 控 制 字 和 计 数 初 值 期 间 G A T E 一 直 为 高 电 平 , 则 在 下 一 个 c l k 开 始 计 数 ② 若 写 入 初 值 时 , G A T E 位 低 电 平 , 则 要 等 到 G A T E 由 低 到 高 时 才 启 动 。 ③ 一 旦 启 动 , 可 以 重 复 工 作 。 特点\begin{cases} ①在写入控制字和计数初值期间GATE一直为高电平,则在下一个clk开始计数\\ ②若写入初值时,GATE位低电平,则要等到GATE由低到高时才启动。\\ ③一旦启动,可以重复工作。 \end{cases} 特点⎩⎪⎨⎪⎧①在写入控制字和计数初值期间GATE一直为高电平,则在下一个clk开始计数②若写入初值时,GATE位低电平,则要等到GATE由低到高时才启动。③一旦启动,可以重复工作。
-
方 式 3 : 方 波 发 生 器 方式3:方波发生器 方式3:方波发生器
(可以软件启动,也可硬件启动,计数器自动重复工作,写入控制字后,OUT为高电平,如果GATE为高电平,写入初值后,开始减1 )
当计数器减到 N 2 \frac{N}{2} 2N时(高电平与低电平一样多),OUT变为低电平,直到减为0,接着自动重新装入初值,OUT变为高电平,计数器自动重复工作。
-
方 式 4 : 软 件 触 发 选 通 信 号 发 生 器 方式4:软件触发选通信号发生器 方式4:软件触发选通信号发生器
(软件启动,不自动重复计数)
写入控制字后,OUT为高电平,计数器装入初值后即自动计数,计数结束后,OUT输出一个Tclk宽度负脉冲 -
方 式 5 : 硬 件 触 发 选 通 脉 冲 发 生 器 方式5:硬件触发选通脉冲发生器 方式5:硬件触发选通脉冲发生器
(硬件启动,不自动重复计数)
①GATE上升沿触发计数器,计数结束后,OUT输出一个Tclk宽度负脉冲
②GATE再次出现上升沿,将重新计数
3. 编程
(1)计数初值
N
=
T
o
u
t
T
c
l
k
(
s
)
=
f
c
l
k
f
o
u
t
(
H
z
)
N=\frac{Tout}{Tclk}(s)=\frac{fclk}{fout}(Hz)
N=TclkTout(s)=foutfclk(Hz)
设定时时间为t,通道时钟频率为f,计数初值为N,则:
N
=
t
×
f
N=t×f
N=t×f
二进制:计数值范围:
0000
H
∼
F
F
F
F
H
0000H\sim FFFFH
0000H∼FFFFH
BCD码:计数值范围:
0000
∼
9999
0000\sim 9999
0000∼9999
( 1 H z = 1 0 3 K H z ( 千 赫 兹 ) = 1 0 6 M H z ( 兆 赫 兹 ) = 1 0 9 G H z ( 千 兆 赫 兹 ) 1Hz=10^{3}KHz(千赫兹)=10^6MHz(兆赫兹)=10^9GHz(千兆赫兹) 1Hz=103KHz(千赫兹)=106MHz(兆赫兹)=109GHz(千兆赫兹))
( 1 s = 1 0 − 3 m s ( 毫 秒 ) = 1 0 − 6 μ s ( 微 秒 ) = 1 0 − 9 n s ( 纳 秒 ) 1s=10^{-3}ms(毫秒)=10^{-6}\mu s(微秒)=10^{-9}ns(纳秒) 1s=10−3ms(毫秒)=10−6μs(微秒)=10−9ns(纳秒))
1GHz=1000MHz,1MHz=1000kHz,1kHz=1000Hz
1s=1000ms,1 ms=1000μs,1μs=1000ns
(2)方式控制字 CW
D 7 D_7 D7 | D 6 D_6 D6 | D 5 D_5 D5 | D 4 D_4 D4 | D 3 D_3 D3 | D 2 D_2 D2 | D 1 D_1 D1 | D 0 D_0 D0 |
---|
D
7
D
6
{
0
0
:
计
数
器
端
口
0
0
1
:
计
数
器
端
口
1
1
0
:
计
数
器
端
口
2
D_7\ D_6\begin{cases}0\ 0:计数器端口0 \\ 0\ 1:计数器端口1 \\ 1\ 0:计数器端口2\end{cases}
D7 D6⎩⎪⎨⎪⎧0 0:计数器端口00 1:计数器端口11 0:计数器端口2
D
5
D
4
{
(
读
写
方
式
)
0
1
:
只
写
低
8
位
1
0
:
只
写
高
8
位
1
1
:
先
写
低
八
位
、
再
写
高
八
位
D_5\ D_4\begin{cases} (读写方式)\\ 0\ 1 :只写低8位\\ 1\ 0:只写高8位\\ 1\ 1:先写低八位、再写高八位 \end{cases}
D5 D4⎩⎪⎪⎪⎨⎪⎪⎪⎧(读写方式)0 1:只写低8位1 0:只写高8位1 1:先写低八位、再写高八位
D
3
D
2
D
1
{
(
工
作
方
式
(
六
种
)
)
0
0
0
0
0
1
0
1
0
0
1
1
1
0
0
1
0
1
D_3\ D_2\ D_1\begin{cases} (工作方式(六种))\\ 0\ 0\ 0\\ 0\ 0\ 1\\ 0\ 1\ 0\\ 0\ 1\ 1\\ 1\ 0\ 0\\ 1\ 0\ 1\\ \end{cases}
D3 D2 D1⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧(工作方式(六种))0 0 00 0 10 1 00 1 11 0 01 0 1
D
0
{
0
:
二
进
制
计
数
1
:
B
C
D
码
计
数
D_0\begin{cases} 0:二进制计数\\ 1:BCD码计数 \end{cases}
D0{0:二进制计数1:BCD码计数
(3)程序格式
写
入
控
制
字
C
W
{
M
O
V
A
L
,
C
W
O
U
T
p
o
r
t
(
控
制
端
口
地
址
)
,
A
L
写入控制字CW\begin{cases} MOV\ AL,CW\\ OUT\ port(控制端口地址),AL \end{cases}
写入控制字CW{MOV AL,CWOUT port(控制端口地址),AL
写
入
初
值
N
{
N
为
字
节
(
D
5
:
0
D
4
:
1
)
{
M
O
V
A
L
,
N
O
U
T
p
o
r
t
(
计
数
器
端
口
地
址
)
,
A
L
N
为
字
(
D
5
:
1
D
4
:
1
)
{
{
M
O
V
A
L
,
N
(
低
8
位
)
O
U
T
p
o
r
t
(
计
数
器
端
口
地
址
)
,
A
L
{
M
O
V
A
L
,
N
(
高
8
位
)
O
U
T
p
o
r
t
(
计
数
器
端
口
地
址
)
,
A
L
写入初值N\begin{cases} N为字节(D_5:0\ D_4:1 ) \begin{cases} MOV\ AL,N\\ OUT\ port(计数器端口地址),AL \end{cases}\\ N为字(D_5:1\ D_4:1 ) \begin{cases} \begin{cases} MOV\ AL,N(低8位)\\ OUT\ port(计数器端口地址),AL\\ \end{cases}\\ \begin{cases} MOV\ AL,N(高8位)\\ OUT\ port(计数器端口地址),AL\\ \end{cases}\\ \end{cases} \end{cases}
写入初值N⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧N为字节(D5:0 D4:1){MOV AL,NOUT port(计数器端口地址),ALN为字(D5:1 D4:1)⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧{MOV AL,N(低8位)OUT port(计数器端口地址),AL{MOV AL,N(高8位)OUT port(计数器端口地址),AL
例:计数0,工作方式2,二进制计数,输出的波形的重复周期为1ms,其中负脉冲宽度为200ns,计算初值,并写出初始化程序段。已知8253端口地址为40H~43H
N = T o u t T c l k = 1 m s 200 n s = 1 ∗ 1 0 − 3 2 ∗ 1 0 − 7 = 5000 N=\frac{Tout}{Tclk}=\frac{1ms}{200ns}=\frac{1*10^{-3}}{2*10^{-7}}=5000 N=TclkTout=200ns1ms=2∗10−71∗10−3=5000
( 1 s = 1 0 3 m s = 1 0 6 u s = 1 0 9 n s 1s=10^3ms=10^6us=10^9ns 1s=103ms=106us=109ns)
C W = 0011 0100 = 34 H CW=0011\ 0100=34H CW=0011 0100=34H
{ M O V A L , 34 H O U T 43 H , A L ; 43 H 控 制 口 地 址 \begin{cases}MOV\ AL,34H\\ OUT\ 43H,AL\qquad\color{DeepSkyblue}{;43H控制口地址}\end{cases} {MOV AL,34HOUT 43H,AL;43H控制口地址
{ { M O V A X , 5000 ; 二 进 制 计 数 , 此 处 将 N 写 全 O U T 40 H , A L ; 先 传 低 8 位 { M O V A L , A H ; 二 进 制 计 数 , 此 处 N 写 A H O U T 40 H , A L ; 后 传 高 8 位 \begin{cases} \begin{cases}MOV\ AX,5000\qquad\color{DeepSkyblue}{;二进制计数,此处将N写全}\\ OUT\ 40H,AL\qquad\color{DeepSkyblue}{;先传低8位}\end{cases}\\ \begin{cases}MOV\ AL,AH\qquad\color{DeepSkyblue}{; 二进制计数,此处N写AH}\\ OUT\ 40H,AL\qquad\color{DeepSkyblue}{;后传高8位}\end{cases} \end{cases} ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧{MOV AX,5000;二进制计数,此处将N写全OUT 40H,AL;先传低8位{MOV AL,AH;二进制计数,此处N写AHOUT 40H,AL;后传高8位
改BC码计数
N = 5000 N=5000 N=5000
C W = 0011 0101 = 35 H CW=0011\ 0101=35H CW=0011 0101=35H
{ M O V A L , 35 H O U T 43 H , A L ; 43 H 控 制 口 地 址 \begin{cases}MOV\ AL,35H\\ OUT\ 43H,AL\qquad\color{DeepSkyblue}{;43H控制口地址}\end{cases} {MOV AL,35HOUT 43H,AL;43H控制口地址
{ { M O V A X , 00 H O U T 40 H , A L ; 先 传 低 8 位 { M O V A L , 50 H O U T 40 H , A L ; 后 传 高 8 位 \begin{cases} \begin{cases}MOV\ AX,00H\\ OUT\ 40H,AL\qquad\color{DeepSkyblue}{;先传低8位}\end{cases}\\ \begin{cases}MOV\ AL,50H\\ OUT\ 40H,AL\qquad\color{DeepSkyblue}{;后传高8位}\end{cases} \end{cases} ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧{MOV AX,00HOUT 40H,AL;先传低8位{MOV AL,50HOUT 40H,AL;后传高8位
计数器0,工作方式2, f c l k 0 = 5 m h z , f o u t = 1 k h z f_{clk0}=5_{mhz}, f_{out}=1_{khz} fclk0=5mhz,fout=1khz,二进制计数,计数器1,工作方式0, o u t 0 out_0 out0作为该计数器的计数脉冲,初值为1000,BCD码计数。端口地址为04B0H~04B3H,编初始化程序段。
N 0 = f c l k 0 f o u t 0 = 5 M h z 1 K h z = 5000 N_0=\frac{f_{clk_{0}}}{f_{out{0}}}=\frac{5Mhz}{1Khz}=5000 N0=fout0fclk0=1Khz5Mhz=5000
C W 0 = 0011 0100 B = 34 H CW_0=0011\ 0100B=34H CW0=0011 0100B=34H
N 1 = 1000 N_1=1000 N1=1000
C W 1 = 0111 0001 B = 71 H CW_1=0111\ 0001B=71H CW1=0111 0001B=71H
计数器0:
{ M O V D X , 04 B 3 H M O V A L , 34 H O U T D X , A L \begin{cases} MOV\ DX,04B3H\\ MOV\ AL,34H\\ OUT\ DX,AL \end{cases} ⎩⎪⎨⎪⎧MOV DX,04B3HMOV AL,34HOUT DX,AL
{ { M O V D X , 04 B O H M O V A X , 5000 O U T D X , A L { M O V A L , A H O U T D X , A L \begin{cases} \begin{cases} MOV\ DX,04BOH\\ MOV\ AX,5000\\ OUT\ DX,AL \end{cases}\\ \begin{cases} MOV\ AL,AH\\ OUT\ DX,AL \end{cases} \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧⎩⎪⎨⎪⎧MOV DX,04BOHMOV AX,5000OUT DX,AL{MOV AL,AHOUT DX,AL
计数器1:
{ M O V D X , 04 B 3 H M O V A L , 71 H O U T D X , A L \begin{cases} MOV\ DX,04B3H\\ MOV\ AL,71H\\ OUT\ DX,AL \end{cases} ⎩⎪⎨⎪⎧MOV DX,04B3HMOV AL,71HOUT DX,AL
{ { M O V D X , 04 B 1 H M O V A X , 00 H O U T D X , A L { M O V A L , 10 H O U T D X , A L \begin{cases} \begin{cases} MOV\ DX,04B1H\\ MOV\ AX,00H\\ OUT\ DX,AL \end{cases}\\ \begin{cases} MOV\ AL,10H\\ OUT\ DX,AL \end{cases} \end{cases} ⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧⎩⎪⎨⎪⎧MOV DX,04B1HMOV AX,00HOUT DX,AL{MOV AL,10HOUT DX,AL
四、8259(可编程中断控制器)的结构、功能和工作方式
1. 结构
2. 特点
A
0
,
2
个
端
口
地
址
A_0,2个端口地址
A0,2个端口地址
内部寄存器
(1)中断请求寄存器 IRR
保存 I R 0 ∼ I R 7 IR_0\sim IR_7 IR0∼IR7的中断信号(存放由外部输入的中断请求信号)
(2)中断服务寄存器 ISR
保存正在被8259服务的中断状态
(3)中断屏蔽寄存器 IMR
保存对中断请求信号
I
R
IR
IR的屏蔽状态
功
能
:
功能:
功能:
①管理8088/8086的可屏蔽中断
②一片8259A可管理8级中断,可以多片8259级联(8259A引脚
C
A
S
2
∼
C
A
S
0
CAS_2\sim CAS_0
CAS2∼CAS0的功能),可扩展至64级。
(9片可扩展到64级,9*8-8=64,减的8是8个从片占用的引脚数)
③每一级中断都可单独被屏蔽或允许
④在中断相应周期,可提供相应的中断类型号(向量号)
⑤8259A有多种工作方式,可通过编程选择
3. 工作方式:
(1)优先级方式
- 普通全嵌套方式
- 固定优先级 I R 0 ∼ I R 7 IR_0\sim IR_7 IR0∼IR7
- 禁止低级或同级嵌套
- 特殊全嵌套方式
- 允许同级嵌套。
- 优先级自动循环方式
- 刚服务过的中断优先级最低,相邻高序号的中断优先级最高,依次循环。
- 优先级特殊循环方式
- 指定某个中断其优先级最低。
(2)屏蔽方式
① 普通屏蔽方式
只允许级别高的中断
② 特殊屏蔽方式
屏蔽正在处理的本级中断,开放低级中断
(3) 触发方式
8259的中断请求信号可以是边沿触发和高电平触发
(4)数据连接方式
① 缓冲方式
② 非缓冲方式
(5)中断结束的3种模式
①自动中断结束模式AEOI(在8259初始化写入ICW4的D1位为1)
在中断响应的最后周期的NNA信号后沿,中断源在ISR对应位自动复位零,中断结束。
②非自动中断结束模式EOI(即普通中断结束方式)
(在8259初始化写入ICW4的D1位为0),中断处理完毕,中断服务程序返回之前,CPU向8259发出EOI命令,使中断源在ISR相应位复位零,中断结束。
③特殊中断结束模式
写入OCW2的D7~D5位为011,OCW2的D2~D0位指定某中断源的ISR相应位。中断处理完毕,中断服务程序返回之前,CPU向8259发出特殊EOI命令,使中断源在ISR相应位复位零,中断结束。
3.编程
7
个
字
,
2
个
端
口
地
址
7个字,2个端口地址
7个字,2个端口地址
4
个
初
始
化
命
令
字
{
I
C
W
1
:
确
定
8259
A
的
触
发
方
式
和
工
作
方
式
I
C
W
2
:
确
定
中
断
类
型
码
I
C
W
3
:
确
定
主
片
上
的
信
号
线
连
接
从
片
的
方
式
I
C
W
4
:
确
定
8259
A
的
全
嵌
套
方
式
、
缓
冲
方
式
、
结
束
方
式
4个初始化命令字\begin{cases} ICW_1:确定8259A的触发方式和工作方式\\ ICW_2:确定中断类型码\\ ICW_3:确定主片上的信号线连接从片的方式\\ ICW_4:确定8259A的全嵌套方式、缓冲方式、结束方式 \end{cases}
4个初始化命令字⎩⎪⎪⎪⎨⎪⎪⎪⎧ICW1:确定8259A的触发方式和工作方式ICW2:确定中断类型码ICW3:确定主片上的信号线连接从片的方式ICW4:确定8259A的全嵌套方式、缓冲方式、结束方式
3
个
操
作
命
令
字
{
O
C
W
1
:
中
断
屏
蔽
控
制
字
O
C
W
2
:
中
断
结
束
和
优
先
权
循
环
控
制
字
O
C
W
3
:
设
置
屏
蔽
方
式
,
中
断
查
询
和
读
状
态
控
制
字
3个操作命令字\begin{cases} OCW_1:中断屏蔽控制字\\ OCW_2:中断结束和优先权循环控制字\\ OCW_3:设置屏蔽方式,中断查询和读状态控制字 \end{cases}
3个操作命令字⎩⎪⎨⎪⎧OCW1:中断屏蔽控制字OCW2:中断结束和优先权循环控制字OCW3:设置屏蔽方式,中断查询和读状态控制字
写
入
奇
地
址
{
I
C
W
2
I
C
W
3
I
C
W
4
O
C
W
1
写入奇地址\begin{cases}ICW_2\\ICW_3\\ICW_4\\OCW_1\end{cases}
写入奇地址⎩⎪⎪⎪⎨⎪⎪⎪⎧ICW2ICW3ICW4OCW1
写
入
偶
地
址
{
I
C
W
1
O
C
W
2
O
C
W
3
写入偶地址\begin{cases}ICW_1\\OCW_2\\OCW_3\end{cases}
写入偶地址⎩⎪⎨⎪⎧ICW1OCW2OCW3
1. 初始化命令字
1. ICW1:设定中断请求触发方式的命令字。
D 7 D_7 D7 | D 6 D_6 D6 | D 5 D_5 D5 | D 4 D_4 D4 | D 3 D_3 D3 | D 2 D_2 D2 | D 1 D_1 D1 | D 0 D_0 D0 |
---|---|---|---|---|---|---|---|
x | x | x | 1 | LTIM | x | SNGL | IC4 |
"x"设定为0
- D4=1:作为ICW1的标志
- D3:D3=0,边沿触发;D3=1,电平触发
- D1:
1. D1=1,系统中只有一片8259;
2. D1=0,系统中有多片8259 - D0=1;指出初始化程序中将设置ICW4
2. ICW2:设置中断向量号
D 7 D_7 D7 | D 6 D_6 D6 | D 5 D_5 D5 | D 4 D_4 D4 | D 3 D_3 D3 | D 2 D_2 D2 | D 1 D_1 D1 | D 0 D_0 D0 |
---|---|---|---|---|---|---|---|
T 7 T_7 T7 | T 6 T_6 T6 | T 5 T_5 T5 | T 4 T_4 T4 | T 3 T_3 T3 | 0或1 | 0或1 | 0或1 |
- T 7 ∼ T 3 T_7\sim T_3 T7∼T3为中断向量号的高5位
- 低3位由8259A自动确定,并在CPU读取中断号之前,由8259A自动填写,并且是在第一个 I N T A ‾ \overline {INTA} INTA到来时,写入低3位的。
- I R 0 IR_0 IR0位000、 I R 1 IR_1 IR1为001、… 、IR_7为111(后三位)
例如:
I
C
W
2
=
08
H
ICW2=08H
ICW2=08H,则
I
R
0
∼
I
R
7
IR_0\sim IR_7
IR0∼IR7请求所对应的中断类型码分别为
08
H
、
09
H
∼
0
F
H
08H、09H\sim 0FH
08H、09H∼0FH
I
C
W
2
=
70
H
,
I
R
0
∼
I
R
7
ICW_2=70H,IR_0\sim IR7
ICW2=70H,IR0∼IR7请求对应的中断类型码分别为
70
H
、
71
H
∼
77
H
70H、71H\sim 77H
70H、71H∼77H。
3. ICW3:级联命令字
D 7 D_7 D7 | D 6 D_6 D6 | D 5 D_5 D5 | D 4 D_4 D4 | D 3 D_3 D3 | D 2 D_2 D2 | D 1 D_1 D1 | D 0 D_0 D0 |
---|---|---|---|---|---|---|---|
S 7 S_7 S7 | S 6 S_6 S6 | S 5 S_5 S5 | S 4 S_4 S4 | S 3 S_3 S3 | S 2 / I D 2 S_2/ID_2 S2/ID2 | S 1 / I D 1 S_1/ID_1 S1/ID1 | S 0 / I D 0 S_0/ID_0 S0/ID0 |
- 主片8259A:
S
i
S_i
Si=1对应
I
R
i
IRi
IRi接有从片;否则
I
R
IR
IR没有连接从片。
例如: I C W 3 = 11110000 B ICW3=11110000B ICW3=11110000B ,则主8259的 I R 7 、 I R 6 、 I R 5 、 I R 4 IR_7、IR_6、IR_5、IR_4 IR7、IR6、IR5、IR4上均连有从8259。 - 从片8259A:
I
D
2
∼
I
D
0
ID_2\sim ID_0
ID2∼ID0,编码说明从片INT引脚接到主片哪个有
I
R
IR
IR引脚。
例如∶从片的 I D 2 ∼ I D 0 = 110 ID_2\sim ID_0=110 ID2∼ID0=110,说明从接主的 I R 6 IR_6 IR6。
4. ICW4:中断方式字
2. 操作命令
1. OCW1:屏蔽命令字
2. OCW2
3. OCW3
本文仅供本人学习总结使用,文中观点,均为本人拙见,如有错误或不妥之处,请及时指正。