“第二十课--Microduino 中断的使用/zh”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
(Created page with "{{Language|Lesson_20--Microduino_"Use_Interrupt"}} {| style="width: 800px;" |- | ==目的== 本教程为了了解microduino定时器中断,用定时器中断让13引脚 led灯...")
 
 
(未显示另一用户的1个中间版本)
第6行: 第6行:
 
本教程为了了解microduino定时器中断,用定时器中断让13引脚 led灯每500ms变化一次
 
本教程为了了解microduino定时器中断,用定时器中断让13引脚 led灯每500ms变化一次
 
==设备==
 
==设备==
'''[[Microduino-Core]]'''
+
*'''[[Microduino-Core/zh]]'''
'''[[Microduino-FT232R]]'''
+
*'''[[Microduino-USBTTL/zh]]'''
 
*其他硬件设备
 
*其他硬件设备
 
**面包板跳线  一盒   
 
**面包板跳线  一盒   
第13行: 第13行:
 
**LED发光二极管  一个
 
**LED发光二极管  一个
 
**220欧姆电阻  一个   
 
**220欧姆电阻  一个   
**USB数据连接线  一根  
+
**USB数据连接线  一根
  
 
==实验一==
 
==实验一==
第64行: 第64行:
 
{
 
{
 
     unsigned long nowtime=millis(); //获取当前的系统运行时间长度
 
     unsigned long nowtime=millis(); //获取当前的系统运行时间长度
     if(ledStatus==HIGH)            //如果当前lled灯状态为高电平,则执行该程序
+
     if(ledStatus==HIGH)            //如果当前led灯状态为高电平,则执行该程序
 
     {
 
     {
 
       if(nowtime>ledOn)            //检测系统运行时间长度是否到500ms
 
       if(nowtime>ledOn)            //检测系统运行时间长度是否到500ms

2015年8月6日 (四) 05:52的最新版本

Language English

目的

本教程为了了解microduino定时器中断,用定时器中断让13引脚 led灯每500ms变化一次

设备

实验一

使用MsTimer2库

  • 示例程序:
// led灯接UNO的13管脚
#include <MsTimer2.h>               //定时器库的 头文件

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

void loop()
{
}

结果

led灯每500ms变化一次。

实验二

使用millis()函数

  • 示例程序
unsigned long ledOn=500,ledOff=500; //定义led灯变化的时间长度,每500ms变化一次
int ledStatus;                      //定义LED灯的状态,HIGH or LOWm
void setup()
{
	pinMode(13,OUTPUT);
	digitalWrite(13,HIGH);
	ledStatus=HIGH;
}
void loop()
{
    unsigned long nowtime=millis(); //获取当前的系统运行时间长度
    if(ledStatus==HIGH)             //如果当前led灯状态为高电平,则执行该程序
    {
      if(nowtime>ledOn)             //检测系统运行时间长度是否到500ms
      {
        ledOn=nowtime;              //记录当前时间长度,第一次为500ms,赋值给ledOn
        ledOff=nowtime+500;         //计算出下一次led灯变化的时刻,第一次运行程序时应该在1000ms时关灯
        digitalWrite(13,LOW);       //关掉led灯
        ledStatus=LOW;              //记录当前led灯状态,下一次使用     
    }
}

else{      
	if(nowtime>ledOff)
	{   
		ledOff=nowtime;
		ledOn=nowtime+500;
		digitalWrite(13,HIGH);
		ledStatus=HIGH;
	}
}
}

结果

  • 使用mills()函数也能让led灯每500ms变化一次。
  • 利用mills()函数同样可以实现中断的功能。mills()函数功能是获取系统运行的时间长度,单位ms。最大为9小时22分,如果超出时间将从0开始。函数的返回值为unsigned long型。
  • 玩家可根据实际情况使用mills()函数,使用mills()函数的好处在于占用的整个程序运行时间短,如果用用延时函数,在延时的时间内,CPU不能干别的事儿。