Уважаемые знатоки ! Разрешите задать ламерский вопрос. Мне надо генерить прерывание переполнения 8-битного таймера 0 на ATmega8535. Использую пару WinAVR( версия 20030913)+VMLab 3.11 текст такой:
SIGNAL(SIG_OVERFLOW0) { TCNT0=56;
PORTB=!PORTB; }
int main(void) { cli();
DDRB=0xFF; PORTB=0x00;
DDRC=0xFF; PORTC=0xAA;
TCNT0=56; TIMSK=0x01; // Разрешено только прерывание переполнения TCCR0=0x02; // Делитель системного такта на 8
sei();
while(1);
}
Модифицировал Fuses: CKSEL=0x0F CKOPT=0, чтобы 16 МГц кварц можно было поставить (пока тестирую с 6МГц)
В VMLab видно, что прерывание ни разу не вызывается, более того, как только таймер переполняется, в регистре TIFR устанавливается в 1 бит №1 (Output compare) вместо бита №0 (Переполнение) и в таком состоянии TIFR остается вечно, после зашивки в MEGA8535, естественно, железка PB0 не меняет. Если в проекте ".PRJ" заменить контроллер .MICRO "ATmega8535" на .MICRO "AT90S8535" программа требуемые действия выполняет, прерывание с требуемой частотой генерится и после зашивки в 90S8535 устройство работает корректно.
Я раньше с MEGA-ми дела не имел, подозреваю, что дело в каких-то их особенностях. Подскажите, пожалуйста, в чем может быть дело.
С уважением, Анатолий
|