[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
По прерыванию 5мс забираете данные из АЦП и кладете в массив. На каждом 8-мом прерывании - 40мс, проверяете клавиатуру _после_ снятия данных с канала(40мс это время дребезга контакта). Укладываете код клавиши в спец регистр, ставите флаг что было нажатие клавиши и выходите из прерывания. В основном цикле, в фоне смотрите сколько отсчетов было набрано, если 1024 и не было нажатия то обрабатываете. Если было нажатие, то смотрите, если канал переключен, то сбрасываете счетчик отсчетов АЦП, сбрасываете флаг нажатия кнопки в начальное состояние и снова ждете пока не будет 1024 отсчета по текущему каналу. Конечно нужно добавить еще обработку дребезга, обработку отжатия клавиши. Но это все мелочи. Здесь нет объективной необходимости некорректно покидать прерывание, обрабатывать данные в прерывании. В прерывании надо реагировать на событие, сохранять данные связанные с событием и сообщать основному циклу, что событие было. Обрабатывать данные надо в основном цикле.
E-mail: info@telesys.ru