(一)arduin进阶:定时器中断的使用

使用定时器有很多种方式,这里的话就拿其中的一种来讲

在学习这篇教程之前,需要在库管理里面下载一个库,搜索TimerOne下载下图第二个即可:

image https://bbs.qutaojiao.com/assets/images/1-0TuDL2pbIF8wJQFK.png

这节课不需要准备材料,就直接给大家讲如何使用了,首先就是加载上面下载的那个头文件到程序里,

然后就可以进行变编程了,例程如下:

#include "TimerOne.h"    //加载的头文件

void setup ( )
{
  pinMode ( 10 , OUTPUT ) ;
  Timer1.initialize(500000);                // 初始化timer1,并设置0.5秒周期
  Timer1.pwm(9512);                        // 在引脚9上设置pwm,占空比为50%
  Timer1.attachInterrupt(callback);  // 将callback()作为定时器溢出中断
}

void callback ( )   //中断函数,0.5s执行一次
{
  Serial.print("bbs.qutaojiao.com");
}

void loop ( )
{
  // your program here...
}

上面是一个简单的程序,可以试着编译运行一下,可以发现串口监视器没半秒打印一个bbs.qutaojiao.com;

其它函数使用及其注意方式:

在使用的过程中,定时器1和定时器3是不一样的:

定时器Timer1 :

刚刚下载的那个库是ATmega168 / 328 上配置称为Timer1的16位硬件定时器的例程集合。芯片上有3个硬件定时器,可以通过多种方式进行配置,以实现不同的功能。这个库的开发始于需要一种快速方便地设置PWM周期或频率的方法,但已经发展到包括定时器溢出中断处理和其他功能。它可以很容易地扩展或移植到其他计时器。

定时器Timer3 :

要注意,timer1可以在Mega上使用,但不是全都支持,三个输出引脚OCR1A,OCR1B和OCR1C中,只有A和B被支持。OCR1A和和OCR1B连接到Mega的引脚分别为11 引脚和引脚12.

常用函数:

void initialize(long microseconds=1000000);

void start();

void stop();

void restart();

unsigned long read();

void setPeriod(long microseconds);

void pwm(char pin, int duty, long microseconds=- 1);

void setPwmDuty(char pin, int duty);

void disablePwm(char pin);

void attachInterrupt(void (*isr)(), long microseconds=-1);

void detachInterrupt();

重要的函数讲解:

当前内容已被隐藏,您需要登录才能查看

这是初始化函数,你必须先调用这个方法来才能再使用任何其他的方法。您可以选择在此指定计时器的周期(以微秒为单位),默认情况下设置为1秒。请注意,这会干扰Arduino上数字引脚9和10的analogWrite()。

当前内容已被隐藏,您需要登录才能查看

以微秒为单位设置周期。该库支持的最小周期或最高频率为1微秒或1 MHz。最大周期为8388480微秒或约8.3秒。请注意,设置周期将同时改变所连接的中断和pwm输出的频率和占空比。

当前内容已被隐藏,您需要登录才能查看

在指定引脚上产生一个PWM波形。Timer1的输出引脚是PORTB引脚1和2,因此您必须在这两者之间进行选择,其他任何操作都将被忽略。在Arduino上,这些是数字引脚9和10,所以这些别名也工作。Timer3的输出引脚来自PORTE,对应于Arduino Mega上的2,3和5。占空比被指定为一个10位的值,因此介于0和1023之间的任何值。注意,如果在调用它时包含一个以微秒为单位的值作为最后一个参数,则可以选择使用此函数设置周期。

当前内容已被隐藏,您需要登录才能查看

以指定的时间间隔(以微秒为单位)调用函数。在频率太高的情况下要小心地尝试执行太复杂的中断,否则CPU可能永远不会进入主循环,程序将“锁定”。请注意,如果在调用它时包含一个以微秒为单位的值作为最后一个参数,则可以选择使用此函数设置周期。

当前内容已被隐藏,您需要登录才能查看

如果您已经通过先前调用pwm()来设置它,则可以快速设置给定引脚的pwm占空比。这样可以避免为引脚启用pwm模式,设置数据方向寄存器,检查在调用pwm()时必需的可选周期调整等的开销。

当前内容已被隐藏,您需要登录才能查看

禁用附加的中断。

当前内容已被隐藏,您需要登录才能查看

将指定引脚的PWM关闭,以便您可以使用该引脚作为别的。

当前内容已被隐藏,您需要登录才能查看

读取自上次翻滚到微秒的时间。

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
2 条回复 A 作者 M 管理员
  1. 写的不错,学习了

  2. 不错

欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论