定时器中断延时程序
定时器中断延时程序
(1)该类型的delay()函数采用的延时是通过对变量进行递减或递增实现的,很难计算精确的延时时间。
(2)由于跑马灯的状态函数和延时函数是和主任务耦合到一起的,因此主任务的执行时间要对延时的时间产生影响。如图6-12所示,假设一个跑马灯的延时函数的延时时间是1s,但是由于主函数可能存在不同的分支,因此当主函数执行不同分支程序时,实际的跑马灯延时时间是不一样的。
情绪管理
图6-12  程序分支对delay()函数的影响
因此,对于某些对定时精度有要求的场合,例如某项工程需要跑马灯1s更换一个状态(最典型的例子就是时钟指示),就不能采用变量递减或递增的延时方法,而要采用更加精确的中断定时方法。
中断的概念在前面的章节已经有过详细讲解,这里不再赘述,与采用递增递减延时函数相比,采用中断来进行跑马灯的状态更换有以下几个优点。
(1)采用中断函数进行延时,可以精确保证延时的精度,即有效地保证跑马灯状态更换的频率;
(2)采用中断函数进行跑马灯状态的更换,在进行延时期间,并不占用单片机资源,单片机可以执行其他的任务。
十大空气能热水器
采用中断延时函数来进行跑马灯状态更换的软件结构如图6-13所示,主程序和跑马灯状态变换程序是独立分开的,当中断发生时,主程序被打断,进行跑马灯状态的变换。
AT89S51单片机里有两个独立的计时器T0和T1,为了得到精确的定时中断,在这里采用T0的模式0来产生定时中断。如图6-14所示为T0工作于模式0时的结构图。
图6-13  采用时间中断函数的程序结构
图6-14  计时器T0的工作模式0
当T0工作于模式0时,相关需要配置的寄存器如下:
(1)TMOD寄存器:TMOD寄存器是管理计时器T0和T1工作模式和相关配置的寄存器,寄存器内各位如图6-15所示,需要配置的功能位如下所示。
·M10-M00:M10-M00用于选择T0的工作模式,工作于模式0时,T0是一个13位的定时器/计数器,如图6-14所示,THx和TLx分别为8bits和5bits长度,共为13位计数器。
·C/T0#:如图6-14所示,C/T0#决定T0的工作方式是计时器还是计数器,当配置为0时,T0工作方式是计时器,T0的计数器由晶振脉冲时钟的6分频进行触发;而当配置为1时,T
秘密的近义词0工作方式是计数器,T0的计数器由来自T0引脚的外部脉冲进行触发,可以用于记录外部输入脉冲数。此处应将C/T0#配置为0。
·GATE0:如图6-14所示,GATE0位决定T0的启动方式,当配置为0时,由TR0启动计时器;当配置为1时,由外部中断启动计时器。此处应将GATE0配置为0。
35秒13分高清
关于蝉的诗句
图6-15  TMOD寄存器
(2)TCON寄存器:TCON寄存器是对T0和T1进行控制的寄存器,寄存器各位如图6-16所示,需要配置和使用的功能位如下:
· TR0:如图6-14所示,TR0控制计数器THx和TLx的停止与启动,该位由软件进行置位与复位,在模式0时,TR0置1为启动T0计数;TR0清零时为停止T0计数。
·TF0:如图6-14所示,当T0计数器溢出时,TF0置1,并向CPU请求中断,当CPU响应时,硬件自动对TF0清零,同时TF0也可以由程序查询或清零。
>性价比高的suv

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。