Но пришлось сделать переделку платы, понадобилось ещё прерывание, поэтому завёл прежний сигнал на вход T2EX (P1.1), по которому можно организовать прерывание таймера 2.
Софт в связи с этим претерпел простые переделки.
Обработчик прерывания перенёс на новый адрес, а сам обработчик изменился только добавлением сброса флага прерывания (т.к. аппаратно это не делается):
Код
void int_t2ex() interrupt 5 using 2
{
EXF2 = 0;
// ... то что было раньше ...
}
{
EXF2 = 0;
// ... то что было раньше ...
}
Инициализацию в начале программы изменил так:
Код
// IT0 = 1; // было
// EX0 = 1; // было
EXEN2 = 1; // разрешаю вход T2EX
ET2 = 1; // разрешаю прерывания таймера 2
EA = 1; // было, разрешаю прерывания
// EX0 = 1; // было
EXEN2 = 1; // разрешаю вход T2EX
ET2 = 1; // разрешаю прерывания таймера 2
EA = 1; // было, разрешаю прерывания
В симуляторе если дёрнуть пин порта P1.1, то прерывание возникает и всё симулируется как надо. Однако физический "прогон" показывает, что прерываний при наличии меандра частотой 4800 Гц на входе T2EX нету!
Если программно установить флаг прерывания EXF2, то всё, конечно, прерывается (однократно) и работает как в симуляторе, так и реально.
Чего не хватает? Или контроллер дохлый?
Софт пишу в Keil 8.02.