|
论坛上有写
注意事项
当中断函数发生时,delya()和millis()的数值将不会继续变化。当中断发生时,串口收到的数据可能会丢失。你应该声明一个变量来在未发生中断时储存变量。
volatile unsigned long count;
volatile unsigned long time;
void setup()
{
pinMode(2,INPUT_PULLUP);
pinMode(13,OUTPUT);
attachInterrupt(0,test,FALLING);
}
void loop()
{
}
void test()
{
for(count=0;count<100000;count++);
if(millis()-time>10000)
digitalWrite(13,HIGH);
}
我写了上面测试程序,然后用插针碰触2脚,(插针另一脚接地)。
发现可以与“当中断函数发生时millis()的数值将不会继续变化”吻合。
不知我的测试程序是否科学。
按照我的理解,如果用寄存器的方式(IAR ICCAVR等)来编写avr的程序,外部中断程序执行时,不应打断定时器0继续计数的。millis()是怎么玩的,还没搞懂。
|
|