//используем 16-ти битный таймер Counter1 - захват обороты
OCR1A=0x4E2; // значение для сравнения делитель 256
OCR1BL=OCR1BH=0xff; // настраиваем регистры таймера
TIMSK=0xE0; //прерывания по переполнению и сравнению таймера
PORTB.4=0; //выключаем КЗ
PORTB.3=1; //вкл. светодиод
TCNT1=0x00; //сбрасываем счётчик 1 в 0
TCCR1B=0x04; //делитель 256
while(1)
{ };
interrupt [EXT_INT0] void ext_int0_isr(void) я так понял что это прерывание работает по входу и это замена while(PIND.2==0), как таким прерыванием управлять ?
я вот думал использовать такое interrupt [TIM1_COMPA] void timer1_compa_isr(void) прерывание по сравнению
interrupt [EXT_INT0] void ext_int0_isr(void)
{
int oborot;
//- остановить Timer1
TCCR1B=0x00;
//- прочитать значение oborot = TCNT1H‹‹8 +TCNT1L;
oborot = TCNT1H‹‹8+TCNT1L; //(TCNT1L|((int)TCNT1H‹‹8 ));
//- занулить таймер
TCNT1L=TCNT1H=0x00;
//- стартовать Timer1 да а как можно стртовать если я делитель обнулил или снвоа включать делитель
TCCR1B=0x04; //делитель 256
//- проверить, не вышла ли переменная за пределы
// if(oborot›Length(Tabl)) oborot = Length(Tabl)-1;
i=60000/oborot; //вычисляем ячейку таблицы об в минуту
if(oborot›tablica[i]) oborot = tablica[i]-1; //вычисляем задержку
// - записать в регистр сравнения значение Tabl[oborot]
OCR1AH=(char)(tablica[oborot]››8 ); //заносим задержку
OCR1AL=(char)tablica[oborot]; //в счётчик
// - сбросить ножку OC1A в ноль
PORTB.3=0;
}
чет я совсем запутался, у меня есть таблица записанная в памяти МК flash char tablica[i] ={} где i изменяется от 1 до 105 т.е tablica[i] 1=100 оборотов, 2=200 оборотов ... 105=10500 оборотов. В флеш мне нужно заносить маленькие значения т.к обем флеш памяти мал.
Наверное я тут ошибся