A. 51单片机 利用d触发器检测 外部中断 原理
任意一个D触发器的CP端,在接收到外设送来的正脉冲时,会输出低电平。这归因于它们的D端均接地。
两个二极管和一个电阻构成的电路实际上起到了与门的作用。如果任何一个D触发器输出低电平,INT0端就会检测到低电平。当然,我们也可以使用一个集成电路中的与门来实现这一功能,但这样做不仅显得过于繁琐,而且占用了过多的空间。
当INT0端接收到低电平时,可以触发中断。在中断程序中,我们能够进一步检测P1.2和P1.3,以确定是哪个端口送来了低电平。在程序中,我们可以在P1.0和P1.1输出负脉冲至/S,这将使D触发器置位,从而撤销中断信号。
这种设计巧妙地利用了D触发器和与门的特性,简化了外部中断的检测和处理过程,使得整个系统的结构更加紧凑和高效。通过这种方式,我们可以有效管理和响应来自不同外部设备的信号,从而提升系统的可靠性和响应速度。
此外,这种方法还具有一定的灵活性,可以通过调整D触发器和与门的配置,来适应不同应用场景的需求。无论是在工业自动化、消费电子还是其他领域,这种基于D触发器检测外部中断的原理都能发挥重要作用,为系统设计提供了新的思路和方法。
B. 求助:采用STC2051单片机测量脉冲宽度~~
提供个思路给你
计数器 模式
将脉冲接入定时器0的GATE 和中断0
将脉冲反向接入定时器1的GATE和中断1
让后在中断0里面读取 定时器1的计数器 并清零
让后在中断1里面读取 定时器0的计数器 并清零
这样
定时器1的记数就是 正脉宽
定时器0的记数就是负 正脉宽
C. 三线cpu风扇怎么用单片机测速
除了红、黑线,三线CPU风扇的另一根线是风扇转速输出信号线。这根线输出的是一个周期不变(通常为40~50uS),脉冲宽度随风扇转速改变的信号,脉冲的幅度为2v左右。也就是说,信号的占空比随转速变化。
用单片机测量风扇转速时,可以直接测量正脉冲的宽度(负脉冲宽度则与转速成反向变化)。采用正跳沿开启计数器、捕获甚至查询等都可以达到测量正脉冲宽度的目的,当然,你的晶振频率要足够高。
D. 关于SCT15单片机读IO口状态的问题
首先你的程序中while循环中的程序有明显错误:
“P1=0X00;if(ds==1) //判断ds(P1.0口)是否加高电平”
因为你前面定义端口:“sbit ds=P1^0; //脉冲信号输入口” 已经把P1.0定义为脉冲输入,当“P1 =0X00”时,P1.0至P1.7都变成低电平了, P1.0自然就被单片机内部控制为0电平,你后面的“if(ds==1) //判断ds”判断语句已经没有任何意义了。
单片机不能检测负电压,只能检测高低电平。
这个脉冲要从外部输入,例如用按键代替。不可以用程序本身从内部施加控制,一旦内部控制成低电平,怎么检测都是低电平。
另外,STC15W4K48S4单片机手册提到的“要先锁存为1”,指的就是这个道理,你应该这样写:“ds = 1;”,或者写:“P1 = 0xff;”,然后判断:“if(ds==1)”,就是对外部脉冲的正确判断。
如果只是外部输入脉冲,内部程序不改变端口状态,只写一次“ds = 1 ”就可以。