接上篇的问题,还有两问没有解决。
第二个是定时器的函数只能在定时器中书写吗?
第三个是定时器还有其他用途吗?
电气控制与可编程自动化控制器应用技术GEPAC京东好评率97%无理由退换京东配送¥21.1购买这两个问题,其实是在说明定时器的作用,就是定时器中断,除了常规的用法,有没有其他用法,这些用法又是什么,怎么用。接下来一个一个的梳理。
定时器中的函数不是只能在定时器中书写,在中断函数中书写是为了方便理解。有助于学习中断。让我们知道,当时间到了,就会转移到中断函数中了,去执行中断中的事情。当然中断函数中的一些程序,我们也可以写到主函数中,这就要提到一个已经定义好的寄存器参数了。
我使用的是T0,之前用了TR0去打开定时器,那么,在T0的设置参数中,还有一个TF0,既然列出来了,就说明也是很重要的参数,手册中说明的比较详细。
TF0,定时器溢出标志,当定时器溢出时,就是加到时,TF0就会被硬件置一,相当于,只要加到,TF0就自动等于1了。如果程序继续运行,TF0又会自动清0,这个参数是什么意思呢,就是你可以监控这一位,通过这一位的变化,来判断中断是不是触发了。
先来看一个简单的程序。
从原来的进入中断执行程序,到现在的,我们在主程序中,来执行这些操作,这样就可以把中断变成一个函数外的程序了,像是延时一样,不过不用引用,只用判断TF0就可以了,把TF0当成一个延时来用就好。而且很精确的延时。不过有一点就是,当这些运行到主程序中时,由于判断TF0需要时间,所以就会消耗中断的进入时间,无形中就降低了定时的准确性,把时间延迟了一丝丝,但是时间有累积效应, 会被放大到很大的误差。如果为了长时间准确额定时,建议时间的相关函数,还是放在中断函数中来做。其他的可以在主函数中进行。注意好分配。
新的程序,通过仿真来测试一下效果。
现象与之前中断中的运算是一样的。如果需要将函数写到中断外部,那么就需要对溢出标志位TF0进行判断,TF0=1,就是溢出了,判断完之后,记得,把TF0=0复位。同时需要对TH0和TL0进行赋值。
这是第二个问题,第三个问题是,定时器还有其他用途吗?
显然,是有的,除了定时,定时器还可以进行一些简单的测量。比如可以测量占空比信号的脉宽。
先介绍下原理。
我是这么来做的,让显示和计时分开来中断了,T0计算方波的高电位时间,T0刷新数码管。
为了让T0可以检测到方波的信号,并同步变化,需要把方波信号接到INT0/P3.2针脚上,然后让控制位GATE=1,这样,当INT0/P3.2=1时,计时器才会打开计时,INT0/P3.2=0时停止计时。如上图。
首先把定时器模式和工作方式设定好,然后设置T0和T1的初始值,打开中断。接着让程序停止,知道检测到INT0/P3.2=0,此时中断是关闭的,但是我们需要把软件中的中断开关TR0=1,打开中断,准备随时到来的高电位。当INT0/P3.2=1时,高电位到来,定时器开始计时,当INT0/P3.2=0再次到来,此时经过了二分之一周期,中断关闭,为了便于控制,此时切断定时器中断,TR0=0。接着把定时器中的累计数值看成是时间,因为,累加数累加一,就是一个机器周期,所以累加数乘以机器周期时间,就是累积时间。不过这个是半周期的时间。
计算出时间,然后使用数码管,将其显示出来即可。
下篇会介绍下编程。
转载请注明地址:http://www.abmjc.com/zcmbhl/1843.html