运行下面的代码,当我从串行监视器向Arduino发送任何字符时,Arduino不打印"a“back。我认为这是timer1代码的问题,但它应该可以工作,因为这段代码是我的老师在C课上给我的。
void setup() {
Serial.begin(115200);
// http://www.instructables.com/id/Arduino-Timer-Interrupts/?ALLSTEPS
noInterrupts();
TCCR1A = 0;// set entire TCCR1A register to 0
TCCR1B = 0;// same for TCCR1B
TCNT1 = 0;//initialize counter value to 0
// set compare match register for 1000000hz increments with 8 bits prescaler
OCR1A = 1;// = (16*10^6) / (1000000*8) - 1 (must be <65536)
// turn on CTC mode
TCCR1B |= (1 << WGM12);
// Set CS11 bit for 8 prescaler. Each timer has a different bit
// code to each prescaler
TCCR1B |= (1 << CS11);
// enable timer compare interrupt
TIMSK1 |= (1 << OCIE1A);
interrupts();
}
void loop() {
if (Serial.available()) {
Serial.println("a");
}
}另请参阅:http://www.instructables.com/id/Arduino-Timer-Interrupts/?ALLSTEPS
发布于 2016-08-09 03:01:54
根据程序需要如何处理如此快速的中断,例如在输出引脚上生成高速时钟,可以在硬件中使用TCCR1A中的COM位(从我的内存中取出4个最高有效位)在与定时器相关的引脚上切换输出,而无需编写任何ISR()回调来在软件中处理定时器中断。
https://stackoverflow.com/questions/28880226
复制相似问题