8253(定时器IC)与8085微处理器的接口
Intel 8253是可编程间隔定时器(PTI),专为微处理器设计,使用三个16位寄存器执行计时和计数功能。每个计数器有两个输入引脚,即时钟和门,还有一个“OUT”输出引脚。要操作计数器,需要在其寄存器中加载一个16位计数。根据指令,它开始递减计数,直到计数器达到0,然后产生一个脉冲,该脉冲可用于中断CPU。
8253 的特性
它具有三个独立的16位向下计数器。
它可以处理从直流到10MHz的输入。
这三个计数器可以编程为二进制或BCD计数。
它几乎兼容所有微处理器。
8254有一个强大的命令,称为读回命令,允许用户检查计数值、编程模式、当前模式和计数器的当前状态。
8253的框图
8253与8085的接口
现在让我们看看如何将这个8253定时器芯片与Intel 8085微处理器接口。从下图可以看出,8085的数据总线D7-0连接到8253的数据引脚D7到D0。因此,高阶地址总线用作解码器输入以选择芯片,而8085的A8和A9分别连接到引脚A1和A0以选择计数器。
在下图中,我们可以得到8253的片选逻辑。在该图中,我们可以很容易地发现,当A3-2和A7-5为逻辑0,A4为逻辑1时,只有8253的片选CS引脚才会被使能。
此表显示了如何使用8253的A1和A0引脚选择计数器。
片选 (CS) | 十六进制地址 | 计数器选择 | |||||||
---|---|---|---|---|---|---|---|---|---|
A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 | ||
0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 10H | 计数器0 |
0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 11H | 计数器1 |
0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 12H | 计数器2 |
0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 13H | 控制字寄存器 |
可以使用IN和OUT指令来完成计数器选择和控制字寄存器(CWR)设置。如果累加器保存要加载CWR的内容,则使用OUT 13H设置CWR。类似地,使用IN指令可以获取计数器的值,例如IN 11H将从计数器1获取值,依此类推。
因此,计数器操作需要以下四个步骤:
初始化8253芯片
使用控制字值加载控制字寄存器
加载低位计数值
加载高位计数值
让我们看一个程序,以模式0在模式1下将计数器2加载为500010计数值。并且在运行时读取计数值。
首先,要初始化8253,控制字将为B2H
计数器2 | 先加载低位字节,再加载高位字节 | 模式1选择 | 0表示二进制 | ||||
---|---|---|---|---|---|---|---|
1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
现在,用于对计数器2进行锁存操作的控制字为80H。
计数器2 | 锁存选项 | 无关紧要 | |||||
---|---|---|---|---|---|---|---|
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
我们将500010加载到计数器中。500010的十六进制等效值为1388H。
MVI A, B2H ;Load B2H as initialization byte for counter OUT 13H ;Write Acc content CWR MVI A, 88H ;Load LS byte of count value OUT 12H ;Send to Counter 2 MVI A, 13H ;Load MS byte of count value OUT 12H ;Send to Counter 2 MVI D, 00H ;clear the register D L1: MVI A, 80H ;Set a with control word 80H of counter 2 OUT 13H ;Write Acc content CWR IN 12H ;Read LS value of counter value MOV B, A ;store LS value to B IN 12H ;Read MS value of counter value ORA B ;OR LS and MS to set Z flag JNZ L1 ;If Z flag is not set, jump to Loop HLT ;Halt the program