Arduino的库中本身没有提供操作定时中断的功能,但是我们以可以avr开发库本身的特性来使用Arduino没有提供的功能.
代码如下, 设置一个1ms的中断, 每隔1s输出一个$符号:
#include <avr/io.h>
#include <avr/interrupt.h>
/*
* 将定时器中断设为1ms
*/
void init_time()
{
TCCR2A |= (1 <<WGM21) | (1 << WGM20);
TCCR2B |= (1 << CS22 ); //by clk/64
TCCR2B &= ~((1 <<CS21) | (1 <<CS20)); //by clk/64
TCCR2B &= ~((1 << WGM21 ) | (1 << WGM20));
ASSR |= ( 1 << AS2 );
TIMSK2 |= ( 1 << TOIE2 ) | ( 0 << OCIE2B );
TCNT2 = 6;
sei();
}
int count = 0;
SIGNAL(SIG_OVERFLOW2)
{
TCNT2 = 6;
++count;
if( count == 1000 )
{
Serial.print("$ ");
count=0;
}
}
/*
*/
void setup(void)
{
Serial.begin(115200);
init_time();
}
void loop( void )
{
Serial.println("start ... ...");
while( 1 )
{
delay( 100 );
}
}