Arduino的库中本身没有提供操作定时中断的功能,但是我们以可以avr开发库本身的特性来使用Arduino没有提供的功能.
代码如下, 设置一个1ms的中断, 每隔1s输出一个$符号:
- #include <avr/io.h>
- #include <avr/interrupt.h>
-
-
-
-
- void init_time()
- {
- TCCR2A |= (1 <<WGM21) | (1 << WGM20);
- TCCR2B |= (1 << CS22 );
- TCCR2B &= ~((1 <<CS21) | (1 <<CS20));
- 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 );
- }
- }