[an error occurred while processing this directive] [an error occurred while processing this directive]
Без проблем (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Анатоль 14 ноября 2001 г. 13:13
В ответ на: Ответ: (+) отправлено Петруха 14 ноября 2001 г. 12:53

По прерыванию 5мс забираете данные из АЦП и кладете в массив. На каждом 8-мом прерывании - 40мс, проверяете клавиатуру _после_ снятия данных с канала(40мс это время дребезга контакта). Укладываете код клавиши в спец регистр, ставите флаг что было нажатие клавиши и выходите из прерывания. В основном цикле, в фоне смотрите сколько отсчетов было набрано, если 1024 и не было нажатия то обрабатываете. Если было нажатие, то смотрите, если канал переключен, то сбрасываете счетчик отсчетов АЦП, сбрасываете флаг нажатия кнопки в начальное состояние и снова ждете пока не будет 1024 отсчета по текущему каналу. Конечно нужно добавить еще обработку дребезга, обработку отжатия клавиши. Но это все мелочи. Здесь нет объективной необходимости некорректно покидать прерывание, обрабатывать данные в прерывании. В прерывании надо реагировать на событие, сохранять данные связанные с событием и сообщать основному циклу, что событие было. Обрабатывать данные надо в основном цикле.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru