单发定时器包括:
n位二进制计数器
由输入时钟源驱动并由CP
启动输入复位。每个时钟脉冲都会增加其值。复位输入应连接到定时器启动信号。
n 位 LATCH 寄存器
存储计时器间隔值(您的每个通道持续时间D0..D3
)
n位比较器
比较计数值和间隔值。相等位的异或为零,因此如果您或所有异或位在一起,结果是0
LATCH寄存器值和计数器值是否相同。
输出触发器
记住定时器到期(对于非脉冲模式操作)输出是你TA.TB,TC,TD
的启动脉冲也应该重置电路上的RS我通过WR执行此操作,但我怀疑你将单独使用启动信号......
像这样的东西:

您需要考虑使用过的 IC 的否定和辅助输入,以使其正常工作(有些否定了 WR,有些则没有......所有引脚都是如此,因此请务必检查数据表)。所以不要忘记将片选和输出使能信号添加到它们的工作条件。
多通道定时器
好吧,您只需为每个连接到同一计数器的每个通道添加LATCH和比较器。棘手的部分是频道选择和启动部分。您需要添加解码器以1 from 4
在设置. 要为该部分绘制电路,我需要了解更多关于此目的的信息......此外,如果您仅手动设置间隔,那么您可以使用 DIP 开关而不是LATCH和选择电路,使其变得更加简单。D0..D3
以上所有内容都可以仅由NAND或NAND门而不是具体的IC实现来实现。为此,您需要使用卡诺图和布尔代数。
有一段时间我用原始门做了一些事情,因为现在使用MCU/FPGA更容易更便宜更快,所以要小心我可能会错过一些微不足道的东西(比如某处的否定门)......无论如何,即使这样也应该得到计时器背后的想法
顺便说一句,C++ 的表示是:
int cnt=0,D=?;
bool TA=0;
for (;;)
{
if (cnt==D) TA=1;
cnt=(cnt+1)&15;
}
[Edit1] 4 通道版本

这是基于上面的文字。还有另一种组件较少的选项,它使用 4 个半字节 RAM 模块而不是 LATCH 寄存器和由单个定时器组成的解码器以 4 倍 CP 倍频时钟连续循环通过所有通道(例如,通过 XORing 延迟的 CP 信号)。
