C51执行延时时怎么执行其他任务

C51执行延时时怎么执行其他任务,第1张

1用中断

2如果你对延时时间要求并非十分精确,将延时函数改为小延时循环(例如10ms,循环100次,也是接近一秒),中间插入按键检测动作。

3如果你对时间要求相对严格,又不想开中断,推荐你一个土办法,在你写好上述循环函数后,在入口处将一个IO口置高,结束处翻转,用示波器测量该IO,微调你的延迟。

根据你自己的需要灵活选择。

这一点都不奇怪, PWM 信号是 CCRx 跟 CNT 寄存器比较匹配后, 波形发生翻转才出现了 PWM 信号虽然程序修改了 CCR 寄存器, 这个是立即完成的, 但是 CNT 是计数器, 并不马上跟上 CCR, 而是要计数到匹配 CCR, 才引起 PWM 的波形, 这段时间还并不确定 另外 PWM 的占空比要等定时器继续计数完成一个周期后, 才能观察出准确变化, 这又是个延迟时间

用1根I/O作输入,再用1根I/O作输出,这是必须的。

方案1,做1个25S的循环延时函数,用查询的方式检测输入信号,当有信号(上升沿或下降沿触发自己看着办)输入时输出翻转,调用延时函数,延时结束后输出翻转回来。

方案2,使用外部中断INT0或INT1,用片内定时/计数器作25S延时。当有输入信号时程序中断,在外部中断函数中翻转输出,关闭外部中断(防止外部中断再次被输入信号触发),启动定时/计数器计时,开放定时器中断,用定时器/计数器对25S作精确延时,达到25S后输出翻转。基本思路就是这样,具体的程序要根据单片机的规格型号和时钟频率才能确定。

STC80C51单片机外部中断只能低用电平或下降沿触发,你要求用信号的高电平触发,所以,只能对输入信号采取查询的方式,结合片内定时器进行输出翻转计时。

阁下可以参考我画的这张图。

1未按动开关

电源通过电阻给电容充电,使电容电压很快被充到电源电压,这样两个输入都是高电平,根据内部RS触发器的真值表,此时输出为低电平0这是一个稳态

2按动开关

此时,电容快速放电,电压迅速降为零,两个输入也变成低电平,根据真值表,此时RS触发器为置位状态,输出为高电平。

3松开开关

当松开开关,电路保持高电平输出,同时电容开始充电,暂稳态开始。

经过一段时间后,电容电压上升到大于2/3电源电压,555的两个输入又变为高电平,这样输出又翻转为低电平,暂稳态结束,恢复到稳态。

555从低电平到高电平这段时间就是单稳态时间t,t=11RC

据此 如果要求延时器为15分钟,可以设置R=2M,C=470uf

如果用作延时器,例如,阁下可以将电路的输出部分接警示灯,在按动开关后警示灯亮15分钟,15分钟后灯灭,再次按动开关后,警示灯同样工作在这种模式。

阁下也可以在输出后面接继电器,用来实现其他控制功能。

不知道你要驱动什么,控制什么

以上就是关于C51执行延时时怎么执行其他任务全部的内容,包括:C51执行延时时怎么执行其他任务、TIM_SetAutoreload(TIM1,led_fx)输出有延时,如何解决、请问各位大神,用51系列单片机怎样才能构成单稳态延时触发电路呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9521136.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存