吉客老白[日答]stc51单片机如何使用定时器0来扩展。

作者:初夏      发布时间:2021-04-13      浏览量:0
学生问:老师,我手里有一台stc 51单

学生问:老师,我手里有一台stc 51单片机,现在的延迟是软件延迟,但实时性不好,缺点已经暴露,所以,我现在打算用定时器0来延迟,但我现在不知道如何更好地实现,

我的选择是将定时器配置为1 ms,配置好,然后在20 ms,50 ms,100 ms,500 ms变量的定义中,表示当变量达到相应的时间时,对应的标志位置1,

我现在想知道该做什么:我不知道如何在主函数中实现这些延迟。

我的原始代码如下所示。我想修改它以延迟计时器,但我不知道如何实现它。实时性较差的代码如下:

y07≤1;

延迟_ms(20);

y01≤0:

if(x01≤0)

y02/0;

延迟_ms(20)。

}

有两种一般解决方案:一是改变定时器中断初始化的值,但使用全局变量,而计时器初始化的值保持不变。但是改变初始化值会涉及很多事情,如果你的单片机运行更多的任务,你也想用计时器来实现时间轮的控制,它会变得非常复杂,所以一般来说,如果我们想实现精确的延迟,我们会采用全局变量+定时固定的方式来实现。另一种想法是,你也可以把延迟看作单片机运行的所有任务之一,它要求人们以时间轮的方式控制不同的任务,最简单的方法是使用一个全局变量数组,数组中的每个元素代表一个任务,然后这个数组可以调整每个任务的时间轮的多少。

B。我们仍然返回到我们的确切延迟问题,我们使用全局变量来实现它们,如下所示:

(1)我们需要两个全局变量:一个全局变量来实现延迟所需的时间,另一个全局变量来查看您的延迟是否结束。

(2)如何实现定时器的中断功能?我们可以这样想,例如,我们应该做些什么来实现ms级的延迟。

a.首先,我们对延迟进行初始化,因为我们必须做ms级延迟,所以我们最好用1ms初始化。

b.然后每次使用延迟函数时,我们都会更改全局变量:

u16全局延迟;//。全局变量

空延迟_ms(u16 ms)

{

global_delay=ms;

while(!)