В правильном направлении двигаетесь, Юля.
Если я хорошо понимаю, вы решили измерять временные интервалы
между импульсами на одном и том же входе - INT0 и INT1.
Время между импульсами на входе INT0 измеряете Таймером1 и записываете в переменную tmr1res, а соответственно время между импульсами на входе INT1 - Таймером2 и записываете в переменную tmr2res.
Все правильно сделано, понравилось использование
флагов i и
J. Правда, принято в С обозначать флаги немножко по-другому,
использовать другие имена, начинающие, например на "fl" - fl_tmr1 или fl_tmr2. Но это вопрос синтаксиса.
Также не надо запрещать прерывание:
Код
IFS0bits.INT0IF =0; // обнуляем флаг INT0IF в регистре IFS0
IEC0bits.INT0IE=0; // запрещаем прерывания INT0, чтобы если произойдет второе событие на входе INT0,
// до завершении цикла INT1, оно не сбило счет времени
так как в таком случае, после первого прерывания, второго не будет. Просто удалите строчку IEC0bits.INT0IE=0;. Я это предложил вам сделать,
что бы цикл измерения начинался
только с сигнала на входе INT0 и заканчивался
только по сигналу на входе INT1. Но тогда я вам
предложил разрешить его в конце цикла измерения, а именно в обработчике прерывания INT1.
Зато здесь, если запретите после первого сигнала, второй сигнал не вызовет прерывание и программа "зависнет".
То же самое нужно сделать и во втором обработчике - убрать похожую строчку.
Прокралась синтаксическая ошибка:
Цитата
if (i==0)
{
T1CONbits.TON=1; // старт таймера 1
i=1;
}
else
{
T1CONbits.TON=0; // cтоп таймера 1
tmr1Res = TMR1;
TMR1=0; // обнуляем таймер 2
i=0;
}
В основном - очень хорошо! Давайте дальше - вам нужно написать два (практически одинаковых) обработчика прерываний таймеров (1 и 2).
ПП А вот это:
Цитата(yliya @ Dec 5 2012, 21:06)

...посчитаю правильно в самих обработчиках и там же пошлю на индикацию
в обработчиках не делается. Принцип С - это писать обработчики прерываний как можно короче и не прерывать исполнение кода обработчика
обращениями ко внешним функциям. Когда процессор исполняет код обработчика, он находится в особом состоянии - "исключение". Если в
основной программе его можно прерывать, здесь (в зависимости от приоритета прерывания, конечно) - нельзя. Поэтому можно пропустить
важные события или опоздать с обработкой других данных, если задержатся слишком долго в обработчике. Считается правильнее делать обработку данных в основной программе, а в обработчике прерываний выполнять только служебную работу - сбрасывать/поднимать флаги, запускать/заряжать таймеры, запускать/останавливать/опрашивать периферийные модули и т.д.
EDIT:
volodya меня опередил. Все что он написал
верно, просто вы до этого пока не дошли.