我想设置一个中断和一个计数器/定时器。中断是外部的,从引脚读低逻辑。计时器应该每增加一个100美分并加起来为count
变量。 但是,我设置了中断,但它正常工作,设置定时器后,既不中断也不定时器工作。该代码是这样的:atmega328p中断和定时器设置[C/C++]
volatile boolean allowCount = false, timerFlag = false;
volatile unsigned int counter;
boolean pulseLow = false;
void setup(){
Serial.begin(9600);
// initialize external pin interrupt.
PCICR = 0b00000010; // 1. PCIE1: Pin Change Interrupt Enable 1
EICRA |= bit (ISC10); // set wanted flags (low logic level causes interrupt)
PCMSK1 = 0b00010000; // Enable Pin Change Interrupt for A4
// TODO Interrupt settings not working together
// initialize Timer1
cli(); // disable global interrupts
TCCR1A = 0; // set entire TCCR1A register to 0
TCCR1B = 0; // same for TCCR1B
// set compare match register to desired timer count:
OCR1A = 0x18;
// turn on CTC mode:
TCCR1B |= (1 << WGM12);
// Set CS10 and CS12 bits for 64 prescaler:
TCCR1B |= (1 << CS10);
TCCR1B |= (1 << CS11);
// enable timer compare interrupt:
TIMSK1 |= (1 << OCIE1A);
}
void loop(){
if (allowCount == true)
{ timer100_uS();
if (counter > 50 && pulseLow == false){
DDRC |= (1 << DDC3); // sets bit DDC3 to 1 within register DDRC
//set pin 3(A3) ouput as sourcing Vcc(HIGH)
PORTC |= (1 << PORTC3);
timerReset();
pulseLow = true;
}
if (pulseLow == true){
timer100_uS();
if (counter >= 500){
//set pin3 of port C to LOW (A3);
PORTC &= ~(1 << PORTC3);
pulseLow = false
timerReset();
}
}
// external pin interrupt
ISR(PCINT1_vect){
if (allowCount == false)
allowCount = true;
}
// timer/counter interrupt
ISR (TIMER1_COMPA_vect)
{
if (timerFlag == true){
counter++;
}
}
void timer_100uS(void){
timerFlag = true;
cli();
}
void timerReset(void){
sei();
timerFlag = false;
counter = 0;
}
OCR0A的值来计算基于此公式与分频器64和16 MHz处理器为24(为0x18):
OCRn = [ (clock_speed/Prescaler_value) * Desired_time_in_Seconds ] - 1
如何设置不同的中断以便他们不重叠海誓山盟? 还是更好呢,是否可以设置定时器,使其不使用中断? 感谢您的阅读!
只是不设置中断启用定时器控制寄存器是?然后轮询状态寄存器以查看计时器是否完成了你正在等待它做的任何事情。 –
你可以单独使用它们吗?只做一件事但不是两件事,中断是否适用于每种情况?外部中断的来源是什么(一个按钮或某个其他设备的信号)?如果一个按钮你如何处理反弹? –
@old_timer如何读取状态寄存器中的定时器/计数器值? counterValue = SREG? 外部中断读取零交叉模拟信号,它每次工作。 – flowian