第七集 定时器和中断
本集开始学习51单片机内部最重要的功能之一:定时器。
在实际应用中,经常会碰到需要延时的应用,如时钟等。如果采用软件延时(也就是让单片机执行空指令,消耗一定时钟周期来等待)的话,将增加CPU开销,降低CPU的工作效率,并会使其他操作响应延缓。这时,片内定时器就能发挥作用了。
翻阅数据手册,可知 Ai8051U 片内有6个定时器。

定时器的本质就是从设定值数到溢出之后置位一次标志位,如果使能ET0就可以进入中断!
片内定时器可实现精准的定时,这里涉及到时时长的计算,见下图:

范例代码
if( P32 == 0 ) //判断P32按钮是否按下
{
Delay20ms(); //延时20ms消抖
if( P32 == 0 )
{
Run_State = !Run_State; //运行状态取反
if( Run_State==1 ) //运行
{
Timer0_Init();
}
else
{
TR0 = 0; //关闭定时器
P20 = 1;
P21 = 1;
}
while( P32 == 0 ); //等待P32松开
}
}
}
运行效果

以上是本集的学习体会。