Приветствую.
Продолжаю разборки с atmega162. Вот такой кусок кода, использующий прерывание и таймер (использую WinAVR и AVRstudio для отладки):
#include <inttypes.h>
#include <interrupt.h>
#include <io.h>
#include <sig-avr.h>
SIGNAL(SIG_OUTPUT_COMPARE1A)
{
// далее обработка ......
// .........
}
void Timer1_Init(void)
{
SREG = (1 << SREG_I); // enable global interrupt
TCCR1A = 0x00;
TCCR1B = 0x04; // set prescale
TCCR1B = (1 << CS10) | (1 << WGM12);
TIMSK = (1 << OCIE1A);
// load value
TCNT1H = 0xFE;
TCNT1L = 0x7A;
// set compare register for 50ms
OCR1AH = 0x01;
OCR1AL = 0x86;
}
int main(void)
{
Timer1_Init();
// DDRB = 0xFF;
while (1)
;
return 1;
}
На первый взгляд все правильно, но не сдается мне что не получаю я задержки в 50мсек, а проверить в симуляторе, как предложил IgorKossak, не могу (симулятор не позволяет).
Вообщем, я окончательно запутался