如何判断micros(),delayMicroseconds()或LCD库是否使用中断? (Arduino Uno平台)

时间:2014-05-28 20:07:46

标签: atmega arduino-uno

我在哪里找到代表它使用中断的代码?我在Arduino的子文件夹中经历了wiring.c,但它只导致了这个功能。

问题是,当我为Timer / Comp0启用 CTC模式时,LCD会输出完整的乱码,但当我禁用 CTC模式时,它可以正常工作。

这是定时器初始化代码:

void timerCompare0_ini(void){                               // -Initialization of the Timer Compare 0
    TCCR0A  = 0;                                            // This regulates the menu navigation arrow to show where user is pointing                      
    TCCR0B  = 0;                                                              
    TCNT0   = 0;                                       
    OCR0B   = 256;
    // TCCR0A |= (1 << COM0B0) | (1 << COM0B1); 
    TCCR0A |= (1 << WGM01);                                   // -CTC mode
    TCCR0B |= ((1 << CS02) | (1 << CS00));                    // -1024 prescaler
    TIMSK0 |= (1 << OCIE0B);                                  // -Enable timer compare interrupt

}

1 个答案:

答案 0 :(得分:0)

wiring.c 是个好地方。 delay()使用micros(),它取决于运行timer0和溢出中断。 delayMicroseconds()根据指令执行内部暂停。 BTW但两种方法都有bug,因为当看门狗设置的时间比请求的延迟短时,它会重新启动CPU。即你需要实现自己的功能。