微计算机在工作中经常要求系统能实现定时或延时控制,往往也要求系统能对外部过程计数。这些任务可以通过计数/定时电路(Counter Cimer Tircu缩写为CTC)来完成。Z80-CTC可为Z80-CPU提供计数和定时功能。它是一种很有用的器件。
Z80-CTC的结构如图1所示:Z80-CTC电路是一种具有四个独立通道的可编程器件。它占有四个连续的外设地址,在系统中可作为8位可编程计数器或定时器使用,也可把几个通道串连起来作为8×(n=1~4)计数器或定时器使用。CTC内部有CPU总线接口、内部控制逻辑、中断控制逻辑和四个计数/定时器通道。CPU总线接口通过8条数据线和7条控制线与CPU相连接,并经CTC内部数据总线与其它各功能块相连。内部控制逻辑使所有功能块工作同步协调。中断控制逻辑管理三条中断控制线(I-NT、IEI、IEO)。四个通道都可独立提出中断请求,其中0号通道具有最高优先权,然后依次为1,2,3通道。每个通道各有一个CLK/TRG输入端,0~2三个通道各有一个ZC/TO输出端。在程序安排下任一通道的计数器回零时,均可按方式2产生中断请求。

四个独立的计数/定时器通道逻辑电路结构都一样,其逻辑框图示于图2。每个通道都有自己的减1计数器、时间常数寄存器和通道控制寄存器和定标器。(1)通道控制寄存器是决定通道工作方式的8位寄存器,它接受CPU写入控制字,可藉编程选择通道的工作方式和参数。控制字写入那个通道的控制寄存器,由通道的地址CS\(_{0}\)和CS1(与CPU的地址总线A\(_{0}\)1相连)来决定。通道控制寄存器的内容:决定通道处于计数方式还是定时方式;CTC是否允许中断;在计数方式时用脉冲正沿还是负沿触发计数;在定时方式时系统用256还是16分频;用脉冲正沿还是负沿触发定时等。(2)时间常数寄存器也是8位,它存放定时及计数数值参数。CPU送出控制字后,可将一个1~256之间的整数输至该寄存器作为初值,当CTC处在初始状态时,该值被送到减1计数器,作为计数器的初值决定计到零的脉冲数量。当减到零时,时间常数寄存器的内容能自动地再装入减1计数器作为新的初值。(3)定标器是8位计数器,仅用于定时器工作方式。定标器实际上是个分频器,它在接受系统时钟脉冲后,每隔16个或256个脉冲才向CTC的减1计数器输出一个脉冲,其结果是使计数器以系统时钟频率的1/16或1/256进行计数。(4)减1计数器是工作于减法方式的8位计数器,每输入一个脉冲置入的初值减1。它的初值由时间常数寄存器赋予,工作在计数方式时,减1脉冲由外部直接送入;工作在定时方式时,由定标器的输出脉冲使它减1。每当减到零时该通道ZC/TO端都有脉冲输出,通过I-NT向CPU请求中断。CPU在任何时候都可以用输入指令来读取它的值。

Z80-CTC工作方式:有计数和定时两种方式,四个通道都可以独立地选定其中的一种。(1)作定时方式时,通道定标器定时地发出脉冲,由于系统时钟的频率是个不变的已知数,所以该计数值就对应为一定的时间,也就是CTC能在规定的时刻对CPU发出中断请求,起到定时的作用。设系统时钟周期为t\(_{c}\)(若系统的φ是2MHz时tc为0.5μS),定标器分频系数为P(16或256),时间常数为TC(l~256之间任意整数值),因而回零脉冲的周期T=t\(_{c}\)·P·TC。而P和T\(_{C}\)的数值可由编程决定,于是T便可改变,相当一个可调的脉冲产生器。定时器开始计时的方式可以由程序启动,也可以由外界送给CLK/TRG端脉冲的有效沿后的下一个时钟的上升沿启动定时(因外脉冲的出现是异步的)。(2)用作计数方式时,主要用于对外界事件进行计数。在输入初值后计数器开始工作,时间常数寄存器将初值送入减1计数器。每当CLK/TRG输入一个外脉冲,计数器即减1,在减到零时ZC/TO端输出一个正脉冲,同时向CPU发出申请中断信号INT。Z80-CTC能和CPU并行工作,它不占用主机时间,正由于它有这种特点,所以得到了广泛的应用。(李士功 俞士良)