可编程定时计数器8253
- 可编程芯片:可以通过软件命令,控制芯片的工作方式
- 数据传输方向
- 输入/输出方式
- 时钟脉冲由外部时钟电路提供
- 给定计数初值,芯片启动后,开始数脉冲个数
- 功能:定时、计数
外部引线及内部结构
- #CS:片选信号
- 两位片内地址A0,A1,说明片内有4个端口
- GATE:输入信号,启动计数的控制信号
- OUT:输出信号,在定时时间到,或定时过程中,OUT端呈现波形特点
- 三组CLK、GATE、OUT信号,说明芯片内部有三个完全独立的定时计数器
- 三个计数器可以独立工作
- 因为每个计数器内部有2个16位的寄存器,两个寄存器共用一个地址,所以每个计数器占用一个端口地址
- 16位的初值寄存器:用来存初值,不变化
- 16位的计数寄存器:用来计数,一开始是存初值,然后开始递减
- 控制寄存器:8位,占一个端口地址,存放控制命令字
- 综上,8253接口芯片占4个端口地址
- 4个端口的地址是固定的
- A1和A0区分3个计数器和控制寄存器
计数启动方式
- 一般把GATE接到正电源上,表示软件启动
工作方式
- 8253接口芯片有6中工作方式
- 不同的工作方式,OUT端输出波形不同
- 方式0是软件启动,GATE端需要输入高电平
- 不自动重复计数,意味着计数器中的计数寄存器减到0,这一计数过程就结束
- #WR:由图知,有两个写入信号,也就是两条OUT指令被执行
- 第一个OUT指令写入命令字,写完后,OUT端一定变成低电平
- 命令字:告诉IO接口芯片如何工作,其中有一个信息就是工作在方式几,该命令字存到IO接口中的控制寄存器
- 第二个OUT指令写入初值,写完后,OUT端一定变成低电平
- 初值:存到IO接口芯片中的计数器
- 第一个OUT指令写入命令字,写完后,OUT端一定变成低电平
- 必须先写命令字,再写初值
- 当初值写完,开始计数,每过一个CLK脉冲,值减1,直至0,计数结束后,OUT端变成高电平,
- 其输出信号(高电平),可用于外部可屏蔽中断请求信号,方式0也称为计数结束产生中断请求的一种工作方式
控制字
- 0000:将计数器0中的计数寄存器内容读入CPU
- 最大计数初值为0:若选择16位BCD数,则0-1=9999;若选择16位二进制数,则0-1=FFFF
8253的应用
硬件设计
- 与系统的连接
- 每一次启动计数,需有两次写操作:
- 写控制字
- 写计数器初值
- 如果初值为8位字长,则一次写入;若初值为16位字长,由于芯片数据通道只有8位,则需两次写入
- 每个计数器的控制命令字均送入控制寄存器
- 各计数器的计数初值送到该计数器的计数寄存器及初值寄存器
软件设计
- 初始化程序流程
- 写入控制字
- 置计数初值
【例】8253芯片应用
- CNT0:“每”,说明输出连续波形,不是方式2就是方式3,方式3是输出对称方波,方式2是每次计数结束,输出一个低电平,所以是方式2
- CNT1:能输出连续波形的只有方式23,方式3是输出对称方波,所以是方式3
- CNT2:定时时间到,输出高电平,可以是方式01,区别是方式0软件启动,方式1硬件启动,由于题目没有其他要求,所以选择方式0软件启动,线路简单
- 时钟频率2MH=1/2MH=0.5微秒,CNT0要求每10ms输出一个负脉冲,所以,计数初值为10ms/0.5us=20000
- 00:计数器0;11:先读计数器低8位,再读高8位;010:方式2;0:二进制计数
- GATE端高电平:软件启动
- CLK端连接外部时钟电路
- OUT端连接外部设备
- A0和A1区分3个计数器和控制寄存器
- 0123H=0000 0001 0010 0011,说明0123H是控制寄存器的地址
- 0120H=0000 0001 0010 0000,说明0120H是计数器0的地址
- 上面已经得到控制字0011 0100=34H
- 前三句:将控制字写入控制寄存器
- CNT0计数初值:20000
- 第六句:先将低8位写入计数器0
- 第七句:因为OUT指令不需要操作数是AH,所以要先将AH送入AL
可编程并行接口8255
并行接口芯片8255特点
- 8253是一个非通道型的接口,用来控制外部设备
- 8255是一个通道型的接口,用来控制外部设备,可以用来做数据的输入和输出
8255接口芯片结构
引线
- A0和A1是两个低位地址信号,选择3个端口和控制寄存器
- 译码器输入端是高位地址信号,片选
工作方式
基本输入/输出方式(方式0)
- 相当于三个独立的8位简单接口
- 各端口既可设置为输入口,也可设置为输出口,但不能同时实现输入及输出
- C端口可以是一个8位的简单接口,也可以分为两个独立的4位端口
- 常用于连接简单外设,适于无条件或查询方式
方式0的应用:
- 习惯上:
- A端口和B端口作为8位数据的输入或输出口
- C口的某些位作为状态输入
- 注:
- 若使C端口低4位中某一位作为输入口,则低4位中其他位都应作为输入口
- 同时可设高4位作为输出
- 假设外设状态信息(打印机缓冲区是否空闲)连接到PC0
- 若外设当前状态适合传输数据,则通过A端口(PA0-PA7)输出数据到外设
- 同时,B口可作为其他外设的输入
- 若B口连接的外设也可以提供状态信息,则可以用C口的高位读入第二个外设的状态信息
选通工作方式(方式1)
- 利用一组选通控制信号控制A端口和B端口的数据输入输出
- A口、B口作输入或输出口,C口的部分位用作选通控制信号
- A口、B口在作为输入和输出时的选通信号不同
- A端口工作在方式1,输出时,C端口的PC367作为选通信号
- B端口工作在方式1,输出时,B端口的PC012作为选通信号
- 综上,若AB端口同时工作在方式1输出时,C端口只有PC45空余
- IBF信号通知外部设备数据已经准备好,可以取走了
- INTR是外部可屏蔽的中断请求信号,告诉CPU,数据已经被读走,可以继续发来数据
- 方式1的应用:
- 方式1主要用于中断控制方式下的输入输出
- C口的8位除用作选通信号外,其余位可工作于方式0下,作为输入或输出口
双向传送方式(方式2)
-
双向输入输出方式
- 可以既作为输入口,又作为输出口
- 不需要通过软件控制字命令来改变数据传输方向,只需要时钟脉冲就可以改变数据传输方向
-
只有A端口可工作在方式2下
- 因为选通信号有限
- PC34567作为A端口的选通控制信号
- IOW:A口作为输出
- STB信号有效:外部设备将数据写入A口,A口作为输入
方式2的应用:
-
可使A端口作为双向端口所有
-
用于中断控制方式
-
当A口工作于方式2时:
- B口可工作于方式1
- 此时C口的所有位都用作选通控制信号的输入输出
- B口也可工作于方式0
- 此时C口的剩余3位也可工作于方式0
- B口可工作于方式1
-
8255的ABC三个端口都可以工作在方式0,AB端口可以工作在方式1,只有A端口可以工作在方式2
方式控制字及位控制字
- 方式控制字:
- 用于确定3个端口的工作方式及数据传送方向;
- 位控制字
- 仅用于C端口
- 可设置C口某位的初始状态(为高电平或低电平)
- 当其工作于方式0下且作为输出口时,一般需要对作为输出的位设置初始状态(即初始化)
- 方式控制字最高位一定为1
- 最高位后面的4位控制A组,A组中包含A端口,A端口有3种工作方式,所以用高2位进行工作方式选择
- 8255内部的3个端口在控制逻辑上分为A组和B组
- A组:A端口8位和C端口高4位
- B组:B端口8位和C端口低4位
- 由于C端口不能工作在方式12,所以01、1x对C端口无意义
- 8255内部的3个端口在控制逻辑上分为A组和B组
- 低三位控制B组,B组中包含B端口,B端口有2种工作方式,所以用高1位进行工作方式选择
- 8255一个控制字可以控制3个端口
8255芯片的应用
- 芯片与系统的连接
- 芯片的初始化
- 相应的控制程序
【例】8255应用
- 地址信号低2位A0、A1是片内寻址,不参与译码
- 1023H:控制寄存器地址
- 10010000:方式控制字
- 1021H:B端口地址
- 80H:1000 0000,PB7位保证为高电平
- 1020H:A端口地址
- 3:计数,亮灭3次
- 1022H:C端口地址
- 1:0000 0001,PC0为高电平