输出比较匹配不会发生 - AVR Atmega32
Output Compare match doesn't happen - AVR Atmega32
我正在尝试计算我在按钮上的点击次数(计算并在 4 个 LED 上模拟它
它必须计数到 9,然后 TCNT0 等于 OCR0,因此触发中断并且 TCNT0 再次变为零,依此类推。但它会在 9 到 255 之后继续。
未设置输出比较匹配标志。 (没有比较匹配发生)。
ISR(TIMER0_COMP_vect){
}
int main(){
DDRC=0xff; //configure PORTC leds
CLEAR_BIT(DDRB,0); //configure T0 Pin as input
SET_BIT(PORTB,0); //enable internal PULL-UP resistance
TCCR0 = 0x4E; //Counter mode(falling edge),CTC mode .
TCNT0=0; //timer register initial value
OCR0=9; //set MAX value as 9
SET_BIT(TIMSK,OCIE0); //Enable On compare interrupt
SET_BIT(SREG,7); //Enable All-interrupts
while (1){
PORTC=TCNT0; //Let Leds simulates the value of TCNT0
}
}
最好避免 "magic numbers":
TCCR0 = 0x4E; //Counter mode(falling edge),CTC mode .
要设置 CTC 位 #6 WGM00 应为 0,而位 #3 WGMM01 应为 1(请参阅第 80 页的 the datasheet、table 38)。
您将两个位都设置为 1,因此计数器在 FastPWM 模式下工作。
使用带有位名称的宏:
TCCR0 = (1 << WGM01) | (1 << CS02) | (1 << CS01); // = 0x0E
我正在尝试计算我在按钮上的点击次数(计算并在 4 个 LED 上模拟它 它必须计数到 9,然后 TCNT0 等于 OCR0,因此触发中断并且 TCNT0 再次变为零,依此类推。但它会在 9 到 255 之后继续。 未设置输出比较匹配标志。 (没有比较匹配发生)。
ISR(TIMER0_COMP_vect){
}
int main(){
DDRC=0xff; //configure PORTC leds
CLEAR_BIT(DDRB,0); //configure T0 Pin as input
SET_BIT(PORTB,0); //enable internal PULL-UP resistance
TCCR0 = 0x4E; //Counter mode(falling edge),CTC mode .
TCNT0=0; //timer register initial value
OCR0=9; //set MAX value as 9
SET_BIT(TIMSK,OCIE0); //Enable On compare interrupt
SET_BIT(SREG,7); //Enable All-interrupts
while (1){
PORTC=TCNT0; //Let Leds simulates the value of TCNT0
}
}
最好避免 "magic numbers":
TCCR0 = 0x4E; //Counter mode(falling edge),CTC mode .
要设置 CTC 位 #6 WGM00 应为 0,而位 #3 WGMM01 应为 1(请参阅第 80 页的 the datasheet、table 38)。
您将两个位都设置为 1,因此计数器在 FastPWM 模式下工作。
使用带有位名称的宏:
TCCR0 = (1 << WGM01) | (1 << CS02) | (1 << CS01); // = 0x0E