Сразу скажу огромное спасибо Леониду Ивановичу за прекрастную статью
Итак перый вопрос: почему (на сколько я понял) обычно ext_int ставят по фронту
и по первому перерыванию запускают таймер на пол такта, а не так:
Цитата
АЛГОРИТМ ДЕКОДИРОВАНИЯ
1. вычисляем константу для таймера, чтобы получить интервал 1,778 мс
2. unsigned int rc5_reg=0;
3. unsigned char rc5_counter=0;
4. настраиваем внешнее прерывание по спаду
5. ждем внешнее прерывания; что-либо делаем или спим…
6. первое EXT_INT:
1) запускаем таймер
2) переводим внешнее прерывание в режим по фронту
далее по EXT_INT в rc5_reg устанавливаем LSB
по таймеру сдвигаем регистр влево (rc5_reg<<=1;)
и rc5_counter++;
когда rc5_counter==13 останавливаем таймер и переводим EXT_INT в режим по спаду
1. вычисляем константу для таймера, чтобы получить интервал 1,778 мс
2. unsigned int rc5_reg=0;
3. unsigned char rc5_counter=0;
4. настраиваем внешнее прерывание по спаду
5. ждем внешнее прерывания; что-либо делаем или спим…
6. первое EXT_INT:
1) запускаем таймер
2) переводим внешнее прерывание в режим по фронту
далее по EXT_INT в rc5_reg устанавливаем LSB
по таймеру сдвигаем регистр влево (rc5_reg<<=1;)
и rc5_counter++;
когда rc5_counter==13 останавливаем таймер и переводим EXT_INT в режим по спаду