目前共有4篇帖子。 内容转换:不转换▼
 
点击 回复
427 3
【方法】跳过单个时钟脉冲的方法
一派护法 十九级
1楼 发表于:2017-1-25 21:39

【问题】
如图所示,某器件CNT2在计数器CNT=……、7、8、10……时都要执行相应的操作,当CNT=7时,执行操作7,当CNT=8时,执行操作8,CNT=9时不执行任何操作,CNT=10时执行操作9。
CLK上升沿到来后,经过延迟时间t,计数器CNT的值加1。

一派护法 十九级
2楼 发表于:2017-1-25 21:42

【解决方法】
引入屏蔽信号R,当CNT=8时R=1,其余时间为0。用一个二输入的或门将R和CLK连接起来,形成CLK2(=CLK+R)信号作为器件2的时钟,从而推迟使计数器从7跳变到8的脉冲(脉冲8)下降沿的出现时间。
因为在脉冲9上只有当CLK从0完全跳变到1后,定时器CNT才会从8跳变到9(由边沿触发的特点可知,CNT不可能在CLK=0或者非0非1(如2.5V)期间跳变),所以不会出现或门的竞争-冒险现象导致器件2出现误动作。
对于CNT=8,其二进制数为1000,因此R=Q3·Q2'·Q1'·Q0'。(加一个四输入的与门和三个非门)
若CNT=9,那么其二进制数为1001,此时R=Q3·Q2'·Q1'·Q0。
若CNT=11(二进制1011),则R=Q3·Q2'·Q1·Q0。


如果只能使用与非门(74HC00)的话,就先把CLK取反(通过74HC04反相器),屏蔽信号R改为使用与非门R'=(Q3·Q2'·Q1'·Q0')',最后把这两个信号接到另一个与非门上,其输出端就是CLK2。
若R是单个变量,比如R=Q0,则R'=Q0',此时只需要使用一个非门。

一派护法 十九级
3楼 发表于:2017-1-25 21:43
若要求CNT=9和10时器件2都不执行操作,那么R信号就是CNT=8或9,8的二进制是1000,9的二进制是1001,合起来就是100X,因此R=Q3Q2'Q1'。
一派护法 十九级
4楼 发表于:2017-1-25 21:45
这就是用硬件实现if(CNT==9)、if(CNT==9||CNT==10)的方法。

回复帖子

内容:
用户名: 您目前是匿名发表
验证码:
(快捷键:Ctrl+Enter)
 

本帖信息

点击数:427 回复数:3
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2017-1-25 21:45
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。