ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
8 июля
240160 Топик полностью
Андрей83 (21.02.2011 20:57, просмотров: 54) ответил Андрей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) { Делаем ППЦ какую критическую обработку!!! } } Вроде заработало... НО! почему то как только МК сбрасываешь всё начинает работать по-старому (индикация этой хрени выведена на светодиод). Вопрос по поводу глючной работы ВДТ всё еще открыт ПС. Экземпляр менял. Переполнения стека нет.