第 8章 通用可编程接口芯片本章学习目标
了解可编程接口芯片的基本概念
掌握并行接口芯片 8255A的编程结构与使用方法
掌握串行接口芯片 8251的编程结构与使用方法
掌握定时 /计数器芯片 8253的编程结构与使用方法第 8章 通用可编程接口芯片
8.1 并行接口芯片 8255A
8.2 可编程串行输入 /输出接口芯片 8251
8.3 可编程定时器 /计数器接口芯片 8253
8.1 并行接口芯片 8255A
8.1.1 内部结构及引脚
8.1.2 8255A的工作模式
8.1.3 8255A的编程及应用
8.1.1 内部结构及引脚
1,8255A内部结构
8255的内部结构如图 8-1所示。
各部分功能概括如下:
( 1) 数据输入输出端口
( 2) A组控制器和 B组控制器
( 3) 数据缓冲器:双向 8位缓冲器,用于传送计算机和
8255A间的控制字,状态字和数据字 。
( 4) 读写控制逻辑:接收计算机的读写命令和选择端口地址,用于控制 8255A的读写 。
端 口 A
数 据缓 冲器读 / 写控 制逻 辑端 口 C
上 半 部端 口 C
下 半 部端 口 B
A 组 控制 器
B 组 控制 器
D 0 - D 7
RD
WR
0A
1A
RE SE T
CS
P A 0 - P A 7
P C 4 - P C 7
P C 0 - P C 3
P B 0 - P B 7
内 部 数 据 总 线
2,8255A引脚功能
8255A有 40条引脚,如图 8-2所示。引脚功能如下:
D7~D0:数据总线,用于传送计算机和 8255A间的数据、
命令和状态字。
RESET:复位线,高电平有效。
CS:片选线,低电平有效。
RD:读命令线,低电平有效。
WR:写命令线,低电平有效。
A0,A1:地址线,用于选择 A口,B口,C口。
PA7~PA0,A端口输入 /输出线,双向 I/O总线。
PB7~PB0,B端口输入 /输出线,双向 I/O总线。
PC7~PC0,C端口输入 /输出线,双向 I/O总线。
1
2
3
4
5
6
7
8
9
1 0
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
2 0
3 1
3 0
2 9
2 8
2 7
2 6
2 5
2 4
2 3
2 2
2 1
4 0
3 9
3 8
3 7
3 6
3 5
3 4
3 3
3 2
8 2 5 5
RD
3PA
2PA
1PA
0PA
WR
CS
G N D
0A
1A
7PC
6PC
7PB
6PB
5PB
4PB
3PB2PB
1PB
0PB
0PC
1PC
2PC
3PC
4PC
5PC 5D
4D
VCC
R E S E T
1D
6D
2D
7PA
5PA
6PA
3D
7D
0D
4PA
图 8-2 8255引脚图
8.1.2 8255A的工作模式
1,8255A控制字和状态字
8255A通过控制字用来设定 8255A有 3种工作模式。控制字有两个,一个是工作方式控制字,用于 8255A的初始化;
另一个是 C口位控制字,用于 C口的位操作。这两个控制字使用同一口地址,由最高位 D7区分,若 D7为 1,此控制字为
8255A的工作方式控制字;若 D7为 0,此控制字为 8255A的 C
口的位控制字。
( 1) 方式控制字
8255A的方式控制字用来设定 8255A三个端口的工作方式及输入 /输出状态 。 控制字的位定义如下:
D7 D6 D5 D4 D3 D2 D1 D0
A组 B组
D7:控制字标志位 。
D7为 1,则本控制字为方式控制字; D7为 0,则本控制字为 C
口控制字 。
l D6~D3,A组控制位 。 其中:
D5,D6,A组方式选择位,D6D5为 00时,A组设定为方式 0;
D6D5为 01,A组设定为方式 1;若 D6D5= 1×,A组设定为方式 2。
D4,A口输入/输出控制位,D4为 0,则 PA7~PA0用于输出数据; D4
为 1,则 PA7~PA0用于输入数据 。
D3,C口高四位输入/输出控制位; D3为 0,则 PC7~PC4为输出数据方式; D3为 1,则 PC7~PC4为输入方式 。
lD2~D0,B组控制位 。 其中:
D2:方式选择位,D2为 0,B组设定为方式 0; D2为 1,B组设定为方式 1。
D1,B口输入 /输出控制位,D1为 0,则 PB7~PB0用于输出数据;
D1为 1,则 PB7~PB0用于输入数据 。
D0,C口低四位输入 /输出控制位,D0为 1,则 PC3~PC0用于输出数据; D0为 1,则 PC3~PC0用于输入数据。
( 2) C口位控制字该控制字可以使 C口各位单独置位或复位,以实现特殊的控制功能 。 控制字格式如图 8-4所示 。
D7 D6 D5 D4 D3 D2 D1 D0
无效位 位选择 控制位
D7:控制字的特征位,0有效。
D3~D0:用于控制 PC7~PC0中某一位置位和复位。
D0:置位 /复位的控制位。
当 D0为 0时,控制 C口的某位复位;当 D0为 1时,控制 C口的某位置位。
( 3) 8255A状态字
8255A设定为方式 1和方式 2时,读 C口便可读得相应状态字,可以了解 8255A的工作状态 。
当 8255A的 A口,B口工作在方式 l,则为输入时的状态字格式如下所示 。 在这个状态字中,INTEA和 INTEB分别为 A组和 B组的中断允许触发器状态,其余各位为相应引脚上的电平信号 。
IBFB
D7 D6 D5 D4 D3 D2 D1 D0
I / O I / O I B F A I N T E A I N T R I N T E B I B F B I N T R
A 口 B 口当 8255A的 A口,B口工作在模式 l,则为输出时的状态字格式如下所示。
D7 D6 D5 D4 D3 D2 D1 D0
O B F A I N T E A I /O I N T R I N T E B O B F B I N T R
A 口 B 口
8255A在方式 2下的状态字格式如 下 所示。在这个状态字中,INTEl,INTE2和 INTR为 8255A的允许中断触发器状态。其中 INTEl和 INTE2受 C口的置复位控制字决定,其余各位为同名引脚上的电平信号。 D2~D0由 B组工作方式决定。
D7 D6 D5 D4 D3 D2 D1 D0
O B F A I N T E I B F A I N T E A I N T R
A 口 B 口
2,8255A工作方式
( 1) 方式 0
方式 0是一种基本的输入 /输出工作方式,8255A的 A
口,B口和 C口均可由程序设定为输入 /输出口 。 其中输出可被锁存,输入不能锁存 。
【 例 8.1】 设 8255A的控制字寄存器地址为置 9BH,则令 A口和 C
口高四位工作在方式 0输出方式以及 B口和 C口低四位工作于方式 0输入方式,指令序列如下:
MOV AL,83H ;方式控制字 83H送 AL
MOV DX,9BH
OUT DX,AL ; 83H送控制字寄存器
( 2) 方式 1
方式 1是选通输入 /输出工作方式,A口和 B口皆可独立地设置成这种工作方式。在方式 1下,既需要数据信号也需要选通联络信号,选通联络信号与输入 /输出数据一起传送,其中 A组为数据口,
可定义为输入或输出方式,以 C口的 PC5,PC4,PC3
为选通联络线; B组为数据口,可定义为输入或输出方式,以 C口的 PC2,PC1,PC0为选通联络线。当
A口工作于方式 1输入状态时见图 8-3。
D 7,控 制 字 标 志 位
1 有 效
D 6 D 5 D 4,A 口 选 通 输 入
D 3,P C 6,P C 7 状 态
0,输 出
1,输 入
1 0 1 1 I / O P C 4
P C 5
I N T E
A
P C 3
RD
S T B A
2
控 制 字方 式 1,A 口
7PA~0PA
7.6P O/I
I B F A
I N T R A
0D~7D
0D~7D
图 8-3 8255的 A口方式 1输入方式下状态
C口的相应联络线定义如下:
( PC4,PC2) ——选通输入,低电平有效 。 由外设输入数据,
并将数据送到输入锁存器 。 其中 PC4对应 A口,PC2对应 B
口 。
IBF( PC5,PC1) ——输入缓冲器满,高电平有效 。 当它为 1
时,说明 CPU还未读取上次输入的数据,通知外设不应送新数据 。 当它为 0时,通知外设可送新数据 。 其中 PC5
对应 A口,PC1对应 B口 。
INTR( PC3,PC0) ——中断请求,高电平有效 。 当中断允许位 INTR置 1时,若输入缓冲器满,则产生一个,高,有效的中断请求 1NTR至 CPU,对外设送来的新数据以中断方式输入 。 其中 PC3对应 A口,PC0对应 B口 。
当 A口或 B口工作在方式 1输出状态时见图 8-4
1 0 1 0 I / O P C 7
P C 6
I N T E
A
P C 3
WR
O B F A
2
控 制 字
D 7,控 制 字 标 志 位 1 有 效
D 6 D 5 D 4,0 1 0 A 口 选 通 输 出
D 3,P C 5,P C 4 状 态
0,输 出
1,输 入方 式 1,A 口
7PA~0PA
5.4P O/I
A C K A
I NT R A
0D~7D
0D~7D
图 8-4 8255的 A口模式 1输出方式下状态
C口的各位定义如下:
( PC7,PC1) ——输出缓冲器满信号,低电平有效 。 当数据写入该口的数据寄存器时,即启动该信号,以通知外设读取端口数据 。 其中 PC7对应 A口,PC1对应 B口 。
( PC6,PC2) ——外部响应输入信号,低电平有效 。 当外设读取端口数据后,回发 —“低,有效信号作为回答 。 其中 PC6对应 A口,PC2对应 B口 。
INTR( PC3,PC0) ——中断请求信号,高电平有效 。 当中断允许位 INIR置,1”时,若输出缓冲器空 ( = 1),则产生一个,高,有效的中断请求 INTR至 CPU,于是可在其中断处理程序中向该口输出新的数据 。 其中 PC3对应 A口,
PC0对应 B口 。
( 3)方式 2
8255A的另一种工作方式为带选通双向总线 I/ O方式,
且只有 A口可以工作在这一方式下,A口为输入输出数据端,输入,输出均可锁存,既可以发送数据,也可以接收数据,握手联络信号和 A口在方式 1下的输入或输出时的握手联络信号分别相对应,输入输出时的中断请求都共用 PC3。 这是一个,或,逻辑,即 PC6置,l”时,输出缓冲器,空,可引起中断,PC4置,l”时输入缓冲器
,满,也能引起中断 。
当 A口工作于方式 2时,B口可工作在方式 0或者方式 1; C口的高 5位为 A口的握手联络信号,低 3位可用于 B口在方式 1时的握手联络信号 。 由 8255A的控制字选择 。
方式 2状态如图 8-5所示。
1 1 I / O
控 制 字
D 7,控 制 字 标 志 位 1 有 效
D 6 D 5,1 * A 口 双 向 方 式
D 2,B 组 方 式,0,方 式 0
1,方 式 1
D 1,B 口 状 态,0,输 出
1,输 入
D 0,P C 2 - 0 状 态,0,输 出
1,输 入
7~0 PAPA
0~7 DD
P C 3
P C 7
P C 6
P C 4
P C 5
I N T E 2
I N T E 1
RD
WR
2~0 PCPC
O B FA
AC KA
S TBA
IB FA
I NT R A
I / O I / O
图 8-5 8255模式 2方式下状态其中:
INTRA( PC3) ——中断请求信号,高电平有效。
( PC7) ——输出缓冲器满信号,低电平有效。
( PC6) ——外部响应信号,低电平有效。
INTE1:输出缓冲器的中断允许触发器,由 PC6置位 /复位控制。
( PC4) ——选通输入信号,低电平有效。
IBFA( PC5) ——输入缓冲器满信号,高电平有效。
INTE2:输入缓冲器的中断允许触发器,由 PC4置位 /复位控制。
8.1.3 8255A的编程及应用
8255A是计算机外围接口芯片中典型的一种,主要用于接口扩展,外设扩展应用等 。 对 8255A编程,首先应对 8255A进行初始化,即向
8255A写入控制字,规定 8255A的工作方式,A口,B口,C口的工作方式等 。 然后,如果需要中断,则用控制字将中断允许标志置位 。
再以后就可以按相应的要求向 8255A送入数据或从 8255A读出数据 。
【 例 8.2】 要求 8255A工作在方式 0,A口,B口输入,C口输出 。
其硬件电路如图 8-6,片选端接译码电路输出(译码端由地址线 A7、
A6,A5译码输出),按要求 8255A的控制字为 92H( D7~D0对应的数据为 10010010)。
图 8-6 8255基本应用其工作程序如下:
PORTK EQU 1FH ; 8255A控制口地址
PORTA EQU 1CH ; 8255A的 A口地址
PORTK EQU 1DH ; 8255A的 B口地址
PORTK EQU 1EH ; 8255A的 C口地址;初始化 8255A
MOV AL,92H ;控制字方式 0,A,B输入,C输出
MOV DX,PORTK ;控制寄存器地址
OUT DX,AL ;控制字送控制寄存器; A口,B口,C口读写
MOX DX,PORTA ; A口地址
IN AL,DX ;从 A口读数据
MOX DX,PORTB ; B口地址
IN AL,DX ;从 B口读数据
MOX DX,PORTC ; C口地址
MOV AL,DATA
OUT DX,AL ;向 C口输出数据 DATA
【 例 8.3】 要求 8255A工作方式 1,A口输入,B口输出,PC6、
PC7输出,禁止 A口中断 。
按要求 8255A控制字为 0B7H,程序如下:
PORTK EQU 1FH ; 8255A控制口地址
PORTA EQU 1CH ; 8255A的 A口地址
PORTK EQU 1DH ; 8255A的 B口地址
PORTK EQU 1EH ; 8255A的 C口地址;初始化 8255A
MOV AL,0B7H ;控制字方式 1,A输入,B输出
MOV DX,PORTK ;控制寄存器地址
OUT DX,AL ;控制字送控制寄存器
MOV AL,09H
OUT DX,AL
MOV AL,04H
OUT DX,AL
8.2 可编程串行输入 /输出接口芯片 8251
8.2.1 串行通信的基本概念
8.2.2 可编程串行接口芯片 8251结构
8.2.3 8251的初始化和编程应用
8.2.4 PC机串行异步通信接口
8.2 可编程串行输入 /输出接口芯片 8251
8.2.1 串行通信的基本概念
1,半双工和全双工串行通信是一位接一位地顺序通过一条信号线进行传输的方式。它的通路可以只有一条,此时发送信息和接收信息不能同时进行,只能采用分时使用线路的方法,
如果在 A发送信息时,B只能接收;而当 B发送信息时,
则 A只能接收。这种串行通信的工作方式称为半双工通信方式;如果在两个通信站之间有两条通路,则发送信息和接收信息就可以同时进行。如当 A发送信息,B接收,B同时也能利用另一条通路发送信息而由 A接收。
这种工作方式称为全双工通信方式 。
2,数据传输率数据传输率是指每秒钟传送的二进制位数,通常称为波特率 ( Band Rate) 。 国际上规定了标准波特率系列,
最常用的标准波特率是,110波特,300波特,600波特,
1200波特,l800波特,2400波持,4800波特,9600波特和
19200波特 。
时钟频率= n× 波特率式中的 n叫做波特率系数或波特率因子,它的取值可以为 1、
16,32或 64。
3,串行通信的方式串行通信按通信约定的格式分为两种:异步通信方式和同步通信方式 。
( 1) 同步通信所谓同步通信是指在约定的数据通信速率下,发送方和接收方的时钟信号频率和相位始终保持一致 ( 同步 ),这就保证了通信双方在发送数据和接收数据时具有完全一致的定时关系 。 在有效数据传送之前首先发送一串特殊的字符进行标识或联络,这串字符称为同步字符或标识符 。 在传送过程中,发送端和接收端的每一位数据均保持同步 。
( 2) 异步通信异步通信是指通信中两个字符之间的时间间隔是不固定的,而在一个字符内各位的时间间隔是固定的 。 异步通信规定字符由起始位 ( start bit),数据位 ( data bit),奇偶校验位 ( parity) 和停止位 ( stop bit) 。 起始位表示一个字符的开始,接收方可以用起始位使自已的接收时钟与数据同步 。 停上位则表示一个字符的结束 。 这种用起始位开始,停止位结束所构成的一串信息称为一帧 ( frame) 。
异步通信在传送一个字符时,由一位低电平的起始位开始,接着传送数据位,数据位的位数为 5~ 8位 。 在传送时,
按低位在前,高位在后的顺序传送 。 奇偶校验位用于检验数据传送的正确性,也可以没有,可由程序来指定 。 最后传送的是高电平的停止位,停止位可以是 1位,1.5位或 2位,
两个字符之间的空闲位要由高电平 1来填充 。
8.2.2 可编程串行接口芯片
1,8251的内部结构和引脚功能
8251的内部结构如图 8-12所示主要包括:
( 1)数据总线缓冲器
( 2)发送器
( 3)接收器
( 4)读写控制电路
( 5)调制解调控制电路数据总线读/写控制电路调制解调器发送缓冲器发送控制接收缓冲器接收控制







TxRDY
TxD
TxC
TxEMPTY
RxD
RxRDY
RxC
SYNDET/BRKDET
发送器接收器
RTS
CTS
DTR
DSR
CS
WR
RD
C/D
CLK
RESET
D— D
7 0
2,8251的编程控制
8251是可编程串行接口,在使用前必须由程序对其工作状态进行设置(称为初始化),其中包括:同步方式还是异步方式、
传输波特率、字符代码位数、校验方式、停止位位数等。
8251的控制字分为方式控制字和命令控制字。
( 1)方式控制字此控制字决定 8251A是工作在同步方式还是异步方式。
控制字格式如下:
S2 S1 EP PEN L2 L1 B2 B1
其中:
B2,B1:波特率系数控制位
L2,L1:字符位数控制位
PEN:校验位允许位
S2,S1:停止位位数或同步字符个数控制位
( 2)操作命令控制字是使 8251处于发送数据或接收数据状态,通知外设准备接收或是发送数据。
格式如下:
EH IR RTS ER SBRK RxE DTR TxEN
8.2.2 可编程串行接口芯片
1,8251的内部结构和引脚功能
8251的内部结构如图 8-12所示主要包括:
( 1)数据总线缓冲器
( 2)发送器
( 3)接收器
( 4)读写控制电路
( 5)调制解调控制电路
8.2.3 8251的初始化和编程应用
1,8251的初始化在传送数据前对 8251进行初始化,才能确定发送方与接收方的通信格式 。 以及通信的时序,从而保证准确无误地传送数据 。 由于三个控制字没有特征位,
且工作方式控制字和操作命令控制字放入同一个端口,
因而要求按一定顺序写入控制字,不能颠倒 。
【 例 8-5】 编写一段程序,通过 8251采用查询方式接收数据的程序。要求 8251A定义为异步传输方式,波特率系数为 64,采用偶校验,1位停止位,7位数据位。设 8251的数据端口地址为
04A0H,控制 /状态寄存器端口地址为 04A2H。
程序如下:
MOV DX,04A2H
MOV AL,7BH ; 写工作方式字
OUT DX,AL
MOV AL,14H
OUT DX,AL ;写操作命令字
LP,IN AL,DX ;读状态控制字
AND AL,02H ;检查 RxRDY是否为 1
JZ LP
MOV DX,04A0H
IN AL,DX
2,8251和 CPU的通信方式
( 1) 查询方式发送数据的程序在初始化程序之后 。
【 例 8.6】 若采用查询方式发送数据,且假定要发送的字节数据放在 TABLE开始的数据区中,且要发送的字节数据放在 BX中,则发送数据的程序段如下所示 。
START:MOV DX,3FDH
LEA SI,TABLE
WAIT,IN AL,DX
TEST AL,20H ;检查 THR是否空
JZ WAIT ;若为空,则继续等待
PUSH DX
MOV DX,3F8H
LODSB
OUT DX,AL ;否则发送一个字节
POP DX
DEC BX
JNZ WAIT
同样,在初始化程序后,可以用查询方式实现接收数据。
【 例 8.7】 下面是一个接收数据程序,假设接收后的数据送入 DATA
开始的数据存储区中 。
RECV,MOV SI,OFFSET DATA
MOV DX,3FDH
WAIT,IN AL,DX ;读入线路状态寄存器
TEST AL,1EH ;检查是否有任何错误产生
JNZ ERROR ;有,转出错处理
TEST AL,01H ;否则检查数据是否准备好
JZ WAIT ;未准备好,继续等待检测
MOV DX,3F8H
IN AL,DX ;否则接收一个字节
AND AL,7FH ;保留低 7位
MOV [SI],AL ;送数据缓冲区
INC SI
MOV DX,3FDH
JMP WAIT
( 2) 中断方式利用中断方式可实现 8251和 CPU的串行通信 。 现设想系统以查询方式发送数据,以中断方式接收数据 。 波特率系数为 16,1位停止位,
7位数据位,奇校验 。
程序如下:
MOV DX,04A2H
MOV AL,01011010B ;写工作方式控制字
OUT DX,AL
MOV AL,14H ;写操作命令控制字
OUT DX,AL
当完成对 8251A的初始化后,接收端便可进行其他工作,接收到一个字符后,便自动执行中断服务程序 。
【 例 8.9】 中断服务程序如下:
RECIVE:PUSH AX
PUSH BX
PUSH DX
PUSH DS
MOV DX,3FDH
IN AL,DX
MOV AH,AL ;保存接收状态
MOV DX,3F8H
IN AL,DX ;读入接收到的数据
AND AL,7FH
TEST AH,1EH ;检查有无错误产生
JZ SAVAD
MOV AL,'?' ;出错的数据用 ‘? ’ 代替
SAVAD,MOV DX,SEG BUFFER
MOV DS,DX
MOV BX,OFFSET BUFFER
MOV [BX],AL ;存储数据
MOV AL,20H
OUT 20H,AL ;将 EOI命令发给中断控制器 8259
POP DS
POP DX
POP BX
POP AX
STI
IRET
8.2.4 PC机串行异步通信接口
1,串行异步通信适配器串行异步适配器结构如下:
+5V
TXD
RXD
RTS
CTS
DSR
CD
DTR
RI
SOUT
SIN
RCLK
CS0
CS1
DISTR
DOSTR
2CS
RT S
C TS
DS R
RL SD
DT R
RI
B AU DO UT
AD S
7D~0D
D IS T R
DO STR
2A~0A
3
1OU T
2O UT
INTRPT
MR
XTAL1
8250
RS232C
+5V
10分 频
OSC
18.423MHZ
RESET
IRQ3
IRQ4
A8
9A,7A~3A
6
AEN
2A~0A
I O W
I OR
7D~0D
DIR G
74LS245
J9
J10
J11
J12
2,EIA RS-232串行通信总线标准
RS-232是一种串行通信总线标准,1969年由美国电子工业协会 ( EIA) 从 CCITT远程通信标准中导出的一个标准 。 9针,25
针 RS-232标准接口引脚排列如图所示 。
25脚引脚号( 9脚) 符号 方向 功能
2( 3) TXD 输出 发送数据
3( 2) RXD 输入 接收数据
4( 7) RTS 输出 请求发送
5( 8) CTS 输入 清除发送
6( 6) DSR 输入 数据通信设备准备好
7( 5) GND 信号地
8( 1) DCD 输入 数据载波检测
20( 4) DTR 输出 数据终端准备好
22( 9) RI 输入 振铃指示两台计算机的连接方法如下图所示:
计算机
1
2
3
4
5
8
6
22
20
7
1
2
3
4
5
8
6
22
20
7
计算机计算机
1
2
3
4
5
8
6
22
20
7
1
2
3
4
5
8
6
22
20
7
计算机
3,BIOS串行异步通信方式接口的功能调用
IBM PC及兼容机提供了一种有较强的硬件依赖性,但却比较灵活的串行口 I/O的方法,即通过 INT 14H调用
ROM BIOS串行通信口例行程序 。 下面给出串行异步通信接口功能调用的具体情况:
( 1) 初始化串行通信口 ( AH=0)
入口参数,AL=初始化参数,DX=通信口号出口参数,AH=通信口状态,AL=调制解调器状态初始化参数据可以用来设置串行口的波特率,奇偶性,
字长和终止位 。 8位数据具体含义如下:
设置波特率,设置校验位 设置终止位 设置字长
D7 D6 D5 D4 D3 D2 D1 D0
l 位 7,6,5:设置波特率
000=110波特 001=150波特 010=300波特 011=600波特
100=1200波特 101=2400波特 110=4800波特 111=9600波特
l l 位 4,3:设置校验位
01=奇校验 11=偶校验 × 0=无校验
l l 位 2:设置终止位
0=1位 1=2位
l l 位 1,0:设置字长
10=7位 11=8位例如指令序列:
MOV AH,0
MOV AL,0A3H
MOV DX,0
INT 14H
完成的功能是将 0号通信口的波特率设置为 2400波特,字长为 8位,1位终止位,无奇偶校验位 。
( 2) 向串行通信口写字符 ( AH=1)
入口参数,AL=所写字符,DX=通信口号出口参数:写字符成功 AH=0,AL=字符写字符失败 ( AH) 7=1,( AH) 0~ 6=通信口状态
( 3) 从串行通信口读字符 ( AH=2)
入口参数,DX=通信口号出口参数:读字符成功 ( AH) 7=0,AL=字符读字符失败 ( AH) 7=1,( AH) 0~ 6=通信口状态
( 4) 取串行通信口状态 ( AH=3)
入口参数,DX=通信口号出口参数,AH=通信口状态,AL=调制解调器状态
3号功能用来读串行口的当前状态,调用时,只需给出被查询的串行通信口是 COM1或是 COM2,调用返回时,
其状态信息放入 AX中,( AL) = MODEM状态,
( AH) =线路状态 。
4,BIOS串行异步通信接口的功能调用应用接口通过前面的介绍,已经知道串行通信的编程方式有 I/O指令方式,DOS功能调用方式和 BIOS中断调用方式,在这里选择 BIOS中断调用方式 。 编程的关键首先确定串行通信的基本方式 。
【 例 8.11】 在下面的程序中设置串行通信的传输参数为:
1200波特,7个数据位,1个奇偶校验位,2个停止位 。
两台计算机机可互发数据,即在程序开始首先检测是否有数据要接收,若没有则检测是否有键按下,若有数据发送,否则重新检测 。
程序清单如下:
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX ;数据段基值装入 (通过 AX)
LEA DX,SHOWMESS ;字符串有效地址装入 DX寄存器
MOV AH,09H
INT ; DOS显示字符串功能调用;初始化串口 COM2; 串行口初始化为 1200波特,数据位
MOV AH,0
MOV DX,1
MOV AL,8EH
INT 14H ;初始化 COM2口
FORE,MOV H,03H
MOV DX,1
INT 14H ;读串口 2状态字
TEST AH,01H ;数据准备好?
JNZ RECE ;准备好转接收程序
TEST AH,20H ;发送移位寄存空?
JZ FORE ;不空转 FORE继续检测
MOV AH,1
INT 16H ;否则利用 BIOS键盘中断调用,输入字符
JZ FORE ;没有按键,继续
MOV AH,0
INT 16H ; BIOS键盘输入
CMP AL,1BH
JZ QUIT ;是否是 ESC键,是退出
MOV AH,1
MOV DX,1
INT 14H ;否则发送字符
CMP AL,0DH
JNZ RECE
MOV AH,02H
MOV DL,0AH
INT 21H ;若发送的为回车符,显示换行
MOV DL,0DH
INT 21H
rece,MOV AH,3
MOV DX,1
INT 14H ;读串口 2状态字
TEST AH,01H ;数据准备好?
JZ FORE ;数据未准备好转 fore继续检测
MOV AH,2
MOV DX,1
INT 14H ;否则读入字符
MOV DL,AL
AND DL,7FH
MOV AH,02H ;屏蔽校验位
INT 21H ; DOS中断显示字符
JMP FORE ;接收方发送字符
QUIT:MOV AH,4CH ;退出程序,返回 DOS
INT 21H
CODE ENDS ;代码段结束
END START ;程序结束
8.3 可编程定时器 /计数器接口芯片 8253
8.3.1 定时的基本概念
8.3.2 可编程接口芯片 8253结构和引脚功能
8.3.3 8253的编程
8.3.4 8253的工作方式
8.3 可编程定时器 /计数器接口芯片 8253
微型计算机经常要用来对外部事件进行定时控制或记录外部事件产生次数,即定时或计数控制 。 如函数发生器,计算机中的系统日历时钟,DRAM的定时刷新,定时采样和控制系统等,都要用到定时信号 。
定时信号可以利用软件编程或硬件的方法得到 。 串行异步适配器结构如下:
8.3.1 定时的基本概念可编程计数器/定时器 8253就是用软,硬技术相结合的方法实现定时和计数控制 。 其主要有以下特点 。
( 1) 有 3个独立的 16位计数器,每个计数器均以减法计数;
( 2) 每个计数器都可按二进制计数或十进制 ( BCD码 )
计数;
( 3) 每个计数器都可由程序设置 6种工作方式;
( 4) 每个计数器计数速度可达 2MHZ;
( 5) 所有 I/O都可与 TTL兼容 。
1,内部结构
8253内部包含合 3个 16位计数器,每个计数器可按二进制或十进制计数,有 6种工作方式,可通过编程选择 。
8253采用单一 +5V电源供电,NMOS工艺制造,24引脚 DIP封装,其内部结构如图所示 。
主要包括:
( 1) 数据总线缓冲器
( 2) 读 /写逻辑电路
( 3) 控制字寄存器
( 4) 计数通道
8.3.2 可编程串行接口芯片 8253结构和引脚功能计数器0
计数器1
计数器2
数据总线缓冲器读/ 写逻辑电路控制寄存器内部总线
CLK0
GATE0
OUT0
CLK1
GATE1
OUT1
CLK2
GATE2
OUT2
D A T A 7 ~D A T A 0
RD
WR
A1
A0
CS
2,引脚功能
D7~ D0,8位双向数据线 。
CS:片选信号,输入,低电平有效 。
RD:读有效信号,输入,低电平有效 。
WR:写有效信号,输入,低电平有效 。
A1,A0:地址信号线 。
CLK0~ CLK2:每个计数器的时钟信号输入端 。
GATE0~ GATE2:门控信号,用于控制计数器的启动和停止 。
OUT0~ OUT1:计数器输出信号 。
8253内部端口地址和操作
CS RD WRA1 A0 功能
0
0
0
0
0
0
1
1
0
1
0
1
1
1
1
1
0
0
0
0
写计数器 0
写计数器 1
写计数器 2
写方式控制字
0
0
0
0
0
0
1
1
0
1
0
1
0
0
0
0
1
1
1
1
读计数器 0
读计数器 1
读计数器 2
无效
1,写控制字
8253在工作之前,必须对它进行编程,以确定每个计数器的工作方式和对计数器赋计数初值 。 CPU通过写控制字指令,将每个计数通道分别初始化,使之工作在某种工作方式之下 。
8253的控制字格式如下:
8.3.3 8253的编程
D7 D6 D5 D4 D3 D2 D1 D0
SC1 SC0 RL1 RL0 M2 M1 M0 BCD
各位含义如下:
l SC1,SC0:计数器选择
00——计数器 0 01——计数器 1 10——计数器 2 11——非法
l RL1,RL0:计数长度选择
00——将计数器中的数据锁存于缓冲器 01——只读 /写计数器低 8位
10——只读 /写计数器高 8位
11——先读 /写计数器低 8位,再读写计数器高 8位
l M2,M1,M0:工作方式选择
000——方式 0 001——方式 1
x10——方式 2 x11——方式 3
100——方式 4 101——方式 5
l BCD:计数制选择
0——二进制计数 1——BCD计数
2,写入计数初值对 8253编程时,首先向控制字寄存器写入控制字,以选择计数器的工作方式,然后对相应的计数器输入计数值 。 在计数值送到计数值寄存器后,需经一个时钟周期才能把此计数值送到递减计数器 。 当控制字 D0=0时,
即二进制计数,初值可在 0—FFFFH之间选择;当 D0=l
时,则为十进制计数,其值可在 0一 9999十进制之间选择 。
计数初值的选择和定时长短以及时钟频率有关 。
【 例 8.12】 在一个系统中,8253的 CLK0—CLK2的时钟频率为 2MHZ,端口地址为 200H—203H。要求计数器 0工作在方式 0下,十进制计数,定时 100μs后产生中断请求;计数器 1工作在方式 3下,二进制计数,用于产生周期为
10μs的对称方波;计数器 2工作在方式 2下,二进制计数,
每隔 1ms产生一个负脉冲。
根据上述要求和已知条件,可知 CLK的时钟周期为 0.5μs 。 则可计算出计数器 0的初始值为 100μs/0.5μs=200,计数器 1
的计数初始值为 10μs/0.5μs=20,计数器 2的计数初始值为
1ms/0.5μs=2000。
MOV DX,203H ;控制字地址送 DX
MOV AL,10110100B ;控制字内容送 AL
OUT DX,AL ;写控制字
MOV AX,2000 ;计数初始值送 AX
MOV DX,202H ;计数器 2地址 202H送 DX
OUT DX,AL ;写低 8位
MOV AH,AL
OUT DX,AL ;写高 8位若计数器 2工作在十进制计数方式,则应把 2000H送 AX中 。 计数器 2的初始化程序段可改为下列指令序列:
MOV DX,203H
MOV AL,10100101B
OUT DX,AL
MOV DX,202H
MOV AL,20H
OUT DX,AL
8253有 6种不同的工作方式,在不同的工作方式下,计数过程的启动方式,OUT端的输出波形都不一样。自动重复功能和 GATE的控制作用以及写入新的计数初值对计数器的工作过程产生的影响出不一样。下面借助工波形来分别说明这 6种工作方式的计数过程。
8.3.4 8253的工作方式
1,方式 0——计数结束,产生中断
2.方式 1—可重复触发的单稳态触发器
3,方式 2—分频器
4,方式 3—方波发生器
5,方式 4—软件触发的选通信号发生器
6,方式 5—硬件触发的选通信号发生器
1,8253的初始化对 8253的初始化,也可称为对 8253的编程 。 完成初始化后,8253即开始自动按设置好的工作方式工作 。 初始化程序包括两部分,一是写各计数器的控制字,二是设置计数初始值 。
【 例 8.13】 假设 8253的计数器 0工作在方式 5,按二进制计数,计数初始值为 100;计数器 1工作在方式 1下,
BCD码计数,计数初始值为 4000;计数器 2工作在方式 2,按二进制计数,计数初始值为 600。 8253占用的端口地址为 200H到 203H。 以上情况的初始化程序如下:
8.3.5 8253的应用
MOV DX,203H ;控制寄存器地址送 DX
MOV AL,00011010B;计数器 0,写低字节,方式 5,二进制计数
OUT DX,AL ;写控制字寄存器
MOV DX,200H ;计数器 0的地址送 DX
MOV AL,100 ;计数初始值为 100
OUT DX,AL ;写入计数初始值
MOV DX,203H ;控制寄存器地址送 DX
MOV AL,01100011B ;计数器 1,写高字节,方式 1,十进制计数
OUT DX,AL ;写控制字寄存器
MOV DX,201H ;计数器 1的地址送 DX
MOV AL,40H ;计数初始值为 4000H,只写高 8位即可
OUT DX,AL ;写入计数初始值
MOV DX,203H ;控制寄存器地址送 DX
MOV AL,10110100B ;计数器 2,16位初始值,方式 1,二进制计数
OUT DX,AL ;写控制字寄存器
MOV DX,202H ;计数器 2的地址送 DX
MOV AX,600 ;计数初始值为 600
OUT DX,AL ;先写低 8位
MOV AL,AH
OUT DX,AL ;再写高 8位
2,8253与系统的连接
IBM PC/XT机使用一片 Intel8253作为定时 /计数芯片 。 3个计数通道分别用于日时钟计时,DRAM刷新定时和控制扬声器发声 。 8253和系统的连接如图所示 。 IBM PC/ AT使用与 8253兼容的 Intel8254,在 AT 机的连接使用也与 XT机一样 。
从连接图可看出,8253共占用 4个端口地址,地址范围由高位地址信号决定,高位地址的译码输出接到片选端,A0
和 A1分别接到系统总线的 A0和 A1地址信号线上,用来寻址芯片内部的 3个计数器及控制字寄存器 。 系统总线的和分别接入 8253的和,数据总线的低 8位连接至 8253的数据线 D7~ D0。 PC机中只有 A9~ A0参加 I/O地址空间的译码,
所以 PC机中可寻址的 I/O端口的个数最多为 512个 。 下面给出 XT机中系统板上端口片选生成逻辑,如图所示 。
IOR
IOW
A 1
A 0
A 1
A 0
T/CSS
D 7 ~D 0 D 7 ~D 0
PCLK
÷2
CLK 0
CLK 1
CLK 2
GATE 0
GATE 1
GATE 2
+5V
PB 0
PB 1
PB 0,PB 1 来自8255A
OUT 0
OUT 1
OUT 2
IRQ 0
+5V
S
DREQ 0
R
DACK0BRD
接至DMA控制器
D Q
CLK
8
2
5
3
RD
WR
CS
接至扬声器驱动器图 IBM PC/XT机中 8253和 CPU连接图图 系统板上片选生成逻辑
A
B
C
G 2 A
G 2 B
G 1
A 5
A 6
A 7
A 8
A 9
A E N
I O W
Y 0
Y 1
Y 2
Y 3
Y 4
Y 5
Y 6
Y 7
D M A C S 8 2 3 7 片 选
I N T R C S 8 2 5 9 片 选
T / C C S 8 2 5 3 片 选
P P I C S 8 2 5 5 片 选写 N M I 屏 蔽 寄 存 器写 D M A 页 面 寄 存 器
7
4
L
S
1
3
8
3,8253应用实例
【 例 8.14】 现要求利用 8253完成以下工作,8253的通道 2的
OUT2输出接有一发光二极管,要使发光二极管以闪烁形式工作,即点亮 2s,熄灭 2s。 8253的通道地址为 200H到
203H。 画出硬件连接图如图所示 。 分析题目,编写程序 。
图 例 8-14图
A 0
M / I O
G 1
G 2 A
G 2 B
C
B
A
7
4
L
S
1
3
8
Y 0
A 2
A 1
D 7
D 6
D 0
C S
8
2
5
3
A 1
A 0
D 7
D 6
D 0
A 7
A 6
A 5
A 4
A 3
DQ
Q 2 M H z
+ 5 V
C L K 1
O U T 1
C L K 2
O U T 2
G A T E 1
G A T E 2
分析:根据要求 8253的计数器 2应输出一个占空比为 1,1,
周期为 4s的方波 。 从图中可以知道,计数器 1的 CLK1输入的时钟周期为 1μs,若计数器 1工作在定时方式,其最大的定时时间为 1μs× 65536,仅为 65.5ms,因此使用一个通道达不到定时 4s的要求,此时,采用计数器级连的方法,
将计数器 1的输出作为计数器 2的输入 。
根据图中连接方式,可知,应将计数器 1设置为方式 2,完成对 1MHZ频率分频,输出脉冲周欺期为 4ms,则计数器 1的初始值为 4000。 OUT2的输入端为周期 4ms的脉冲,要求输出的波形为方波且周期为 4s,所以计数器 2的计数初始值为 1000。
程序编写如下:
MOV AL,75H
OUT 43H,AL ;写计数器 1控制字
MOV AL,0B7H
OUT 43H,AL ;写计数器 2控制字
TIM,MOV AX,4000H
OUT 41H,AL ;写计数器 1初始值低 8位
MOV AL,AH
OUT 41H,AL ;写计数器 1初始值高 8位
MOV AX,1000H
OUT 42H,AL ;写计数器 2初始值低 8位
MOV AL,AH
OUT 42H,AL ;写计数器 2初始值高 8位
THANK YOU VERY
MUCH
本章到此 结 束,
谢谢 您的光 临 !