Написал такую программу на ICC:
#include <io8515v.h> #include <macros.h>
#pragma interrupt_handler Timer:4 Timer:5
static volatile unsigned long currentTimerTick;
static void Timer(void) { currentTimerTick++; }
void InitTimer(void) { TCCR1B = 0x00; // Stop Timer1 TCNT1H = 0x00; // Clear Timer1 TCNT1L = 0x00;
OCR1AH = 0x01; // Set Compare A to 391 OCR1AL = 0x87; // ((4MHz/1024)/391) = 100ms timer
TIMSK = 0x40; // Compare A Interrupt enable
TCCR1B = 0x0D; // Start Timer1 with clk/1024
SREG |= 0x80; }
currentTimerTick увеличивает своё значение каждые 1/10 сек. С её помошью я (этого кода здесь нет) каждые 3 сек включаю светодиод, потом через 3 сек выключаю, и так по кругу. Так вот интерестно что на классике AT90S8515 это 3 сек, а при прошивке программы в ATMEGA8515 в режиме совместимости с классикой 3 секунды превращаются в почти 12 сек. Тоесть каждых 12 сек светодиод вкл. откл. В обоих случаях используется один и тот же кварц на 4 Мгц. В чём может быть причина такого странного поведения? Ведь программа одна и та же.
|