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 );
- }
复制代码
|