TIMER0 код инициализации:
Код: Выделить всё
// Таймер 0
// TIMER 0 for interrupt frequency undefined Hz:
cli(); // stop interrupts
TCCR0A = 0; // set entire TCCR0A register to 0
TCCR0B = 0; // same for TCCR0B
TCNT0 = 0x83; // 0x83 to 16 mS B, 9C to 100 uS A
// set compare match register for undefined Hz increments
//OCR0A = 0x63; // to 100 uS A
OCR0B = 0x53; // 16 mS B
TCCR0A |= (1 << WGM01); // turn on CTC mode
TIMSK0 |= (1<<OCIE0B); // enable timer compare interrupt OCIE0B to 16 mS (1 << OCIE0A)|(1<<OCIE0B)
// Set CS02, CS01 and CS00 bits for 1 prescaler
TCCR0B |= (1 << CS02) | (0 << CS01) | (1 << CS00); // CS02|CS00 1024 /16mS/, CS01 8 /100 uSПрерывания:
Код: Выделить всё
ISR(TIMER0_COMPA_vect)
{
flag_SEND_BIT = _ON;
// 100 uS
}
ISR(TIMER0_COMPB_vect)
{
flag_BUTTON = _ON;
TCNT0 = 0x83; // было ошибочно TCNT2, после исправления ничего не поменялось
}Если тот же таймер перестраиваю на прерывания по совпадению OCIE0A,
Код: Выделить всё
// Таймер 0
// TIMER 0 for interrupt frequency undefined Hz:
cli(); // stop interrupts
TCCR0A = 0; // set entire TCCR0A register to 0
TCCR0B = 0; // same for TCCR0B
TCNT0 = 0x83; // 0x83 to 16 mS B, 9C to 100 uS A
// set compare match register for undefined Hz increments
OCR0A = 0x63; // to 100 uS A
//OCR0B = 0x53; // 16 mS B
TCCR0A |= (1 << WGM01); // turn on CTC mode
TIMSK0 |= (1<<OCIE0A); // enable timer compare interrupt OCIE0B to 16 mS (1 << OCIE0A)|(1<<OCIE0B)
// Set CS02, CS01 and CS00 bits for 1 prescaler
TCCR0B |= (1 << CS02) | (0 << CS01) | (1 << CS00); // CS02|CS00 1024 /16mS/, CS01 8 /100 uSглобальное разрешение прерываний sei в коде есть само-собой.
Ткните пальцем, где туплю


