Андрей83 (21.02.2011 20:57, просмотров: 64) ответил Андрей83 на Еще попытка...
Вроде немного разобрался. Исходный код примерно такой:
bit cond1,cond2;
unsigned int A;
void timer0_ISR (void) interrupt 1 using 1{
cond1=(A>5);
cond2=(A<15);
if (cond1&cond2) {
Делаем ППЦ какую критическую обработку!!!
}
}
void timer1_ISR (void) interrupt 3 using 2{
A++;
}
Вообщем прикол был в том что если при рассчете cond1 или cond2 вызывался таймер1 и при этом происходил перенос из младшего байта в старший,
то после RETI рассчет condx продолжается над нулевым значением.
Решил переписать обработчик таймера-0 так:
void timer0_ISR (void) interrupt 1 using 1{
ET1=0;
cond1=(A>5);
ET1=1;
ET1=0;
cond2=(A<15);
ET1=1;
if (cond1&cond2) {
Делаем ППЦ какую критическую обработку!!!
}
}
Вроде заработало... НО! почему то как только МК сбрасываешь всё начинает работать по-старому (индикация этой хрени выведена на светодиод).
Вопрос по поводу глючной работы ВДТ всё еще открыт
ПС. Экземпляр менял. Переполнения стека нет.