知乐空间

自动定时开关(定时器中断)

定时器中断(自动定时开关)

今天我就来说说单片机定时器中断,这是难点中的难点。边肖第一次放弃自学单片机是中断,第二次是定时器中断。

首先你要知道什么是中断,可以在前一章读到,或者叫“中断”——嵌入的灵魂直接去。

了解了中断,让我们来看看这个特殊的中断计时器中断。

它有什么特别之处?

1.它的中断请求是“内部”的,我们感觉不到,这也是很多人困惑的地方。

2.它的机制通常是多次自动循环,有时候你会因此崩溃(作为小白自学,它真的崩溃了)

话虽如此,我们应该如何学习?说实话,我不建议小白从51单片机开始,直接去Arduino,然后慢慢了解底层是最好的选择,甚至不知道(真的,没必要)。

Arduino写了很多关于定时器中断的库,我们可以直接使用。这里我将介绍两个:

灵活定时器2.h和定时器2.h

这两个库基本相同,我们可以归入一类。

void set(unsigned long ms, void (*f)())  --这个函数设置定时中断的时间间隔和调用的中断服务程序。  --ms表示的是定时时间的间隔长度,单位是ms,  --void(*f)()表示被调用中断服务程序,只写函数名字就可以了。void start()--开启定时中断void stop()--关闭定时中断

注:以上三项功能均在MsTimer2范围内执行。使用它们时,应增加范围,如mstimer 2::start();您可以通过以下示例了解更多关于定时中断的信息。

//定时器库的 头文件#include //中断处理函数,改变灯的状态void flash(){                         static boolean output = HIGH;   digitalWrite(13, output);   output = !output;}void setup(){   pinMode(13, OUTPUT);   // 中断设置函数,每 500ms 进入一次中断   MsTimer2::set(500, flash);   //开始计时   MsTimer2::start();}   void loop(){}

相对来说,Arduino降低了很多难度,适合速度学习和初学者。当然,要想在这个领域有所提升,就需要学好底层驱动,底层驱动就是噩梦。。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 ZLME@xxxxxxxx@hotmail.com 举报,一经查实,立刻删除。

留言与评论(共有 0 条评论)
验证码: