Цитата(jasper @ Feb 3 2010, 07:12)

Возможно, следует объявить глобальные переменные, как volatile.
Ага. Все. Не глядя. Вот объясните - какими мыслями вы руководствуетесь, давая такие советы?
Цитата(ut1wpr @ Feb 3 2010, 07:42)

Для начала попробуй выключить всю оптимизацию. Абсолютно всю.
Тоже совет из серии "закрой окно, по колесу постучи".
Цитата(Savrik @ Feb 3 2010, 02:56)

и есть функция
все операции с SystemBusy можно смело выкинуть - у вас нет разрешения вложенных прерываний, значит этот код не будет прерван. Покажите объявление currSysStatus. Добавьте в его еще конец одно поле и выводите его вместе с остальными данными. Если увидите там не 0 - у вас нехватка стека, надо переделывать программу, сокращая количество глобальных переменных. Какой смысл делать 20 преобразований АЦП, не используя их результат? Добавьте дерганье ногой в начале и конце этой функции, убедитесь, что прерывание таймера вызывает ее именно раз в 2 сек.
Цитата(Savrik @ Feb 3 2010, 02:56)

какие есть варианты.. мне нужно быть уверенным, что функция ТОЧНО вызовется через каждые 50 мс..
Кристалл не указан - у новых мег есть возможность запускать АЦП от событий таймера. Точне вы не получите. А тем более программно.