информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetЗа кого нас держат?Сетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Модель надежности отказоустойчивой... 
 Microsoft выпустила исправление... 
 Microsoft готовит к выпуску Windows... 
 Все дополнения в Firefox поломались... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Если я правильно понял 23.11.03 15:28  Число просмотров: 885
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Уточни, схема твоя, или ты можешь менять только программу?

> предположим к PORTB подцеплены несколько клавиш.
Если менять можно все, то цеплять лучше не сами клавиши, а обвесить небольшой логикой и отсылать только фронты и срезы нажатий (не помню подробностей, но мы сто процентов рисовали такие схемки на "Цифровой схемотехнике" - элементов там не очень много). При этом неплохо бы делать прерывание. В этом случае хорошо видно как нажатие так и отжатие

> нажатие можно не обрабатывать. В теории то все хорошо, а
> вот на практике что-то реализовать не получается. Может у
> кого-нить есть небольшой пример на mpasm как избежать
> повторной обработки одного нажатия.
Поллить порт тоже не худший вариант для контроллера, потому как больше-то ему все равно делать не хрен.
<programming>
PIC16F87x - обработка нажатия клавиш 23.11.03 08:02  
Автор: makeworld Статус: Member
Отредактировано 23.11.03 08:07  Количество правок: 2
<"чистая" ссылка>
предположим к PORTB подцеплены несколько клавиш.
нажатие проверяю так: засылаю в соответсвующий бит порта единицу, затем читаю из него. если прочитался ноль - кнопка была нажата, выполняется подпрограмма P1. проблема в том, что пока кнопка не отжата P1 повторяется много раз, как будто кнопка нажимается много раз. Мне подсказали, что для проверки единственной обработки нажатия нужно сразу после чтения бита сделать маленькую задержку и прочитать его снова. если получим ноль - значит кнопка все еще вжата и нажатие можно не обрабатывать. В теории то все хорошо, а вот на практике что-то реализовать не получается. Может у кого-нить есть небольшой пример на mpasm как избежать повторной обработки одного нажатия.
Если я правильно понял 23.11.03 15:28  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Уточни, схема твоя, или ты можешь менять только программу?

> предположим к PORTB подцеплены несколько клавиш.
Если менять можно все, то цеплять лучше не сами клавиши, а обвесить небольшой логикой и отсылать только фронты и срезы нажатий (не помню подробностей, но мы сто процентов рисовали такие схемки на "Цифровой схемотехнике" - элементов там не очень много). При этом неплохо бы делать прерывание. В этом случае хорошо видно как нажатие так и отжатие

> нажатие можно не обрабатывать. В теории то все хорошо, а
> вот на практике что-то реализовать не получается. Может у
> кого-нить есть небольшой пример на mpasm как избежать
> повторной обработки одного нажатия.
Поллить порт тоже не худший вариант для контроллера, потому как больше-то ему все равно делать не хрен.
Если я правильно понял 24.11.03 07:55  
Автор: makeworld Статус: Member
<"чистая" ссылка>
> Уточни, схема твоя, или ты можешь менять только программу?
схема не моя, менять могу только программу

2 Zef: Там же для проверки надо в каждый бит единицу заслать, т.е. самому изменить порт, поэтому так как ты сказал по моему не получится. или я не так понял?
Если я правильно понял 24.11.03 08:53  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
> 2 Zef: Там же для проверки надо в каждый бит единицу
> заслать, т.е. самому изменить порт, поэтому так как ты
> сказал по моему не получится. или я не так понял?

Как в 52-й однокристалке? Дык, потом-то ты из этого порта читаешь. Вот, то, что считал и сохраняй, а потом сравнивай.
Если я правильно понял 25.11.03 07:24  
Автор: makeworld Статус: Member
<"чистая" ссылка>
> Как в 52-й однокристалке? Дык, потом-то ты из этого порта
> читаешь. Вот, то, что считал и сохраняй, а потом сравнивай.
Ну сохраню я, но ведь до тех пор пока кнопка не будет отжата и нажата другая сохраненное значение не изменится. Вопрос в том, как избежать повторного срабатывания обработчика нажатия когда кнопка долгое время вжата. Я не совсем понимаю принцип работы этого контроллера, но там эффект такой: нажимаешь кнопку и подпрограмма реакции на нажатия (обработчика нажатия) начинает выполняться много раз, пока кнопку не отожмешь, как будто в проге цикл. а циклов никаких нет. Прикол в том, у меня в обработчике нажатия ставится один флаг, так вот, пока кнопку не отожмешь он как-бы постоянно меняется 1-0-1-0-1-0 итд
Запоминаешь байт из порта, и при следующем скане сравниваешь. Если 24.11.03 04:06  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
не совпало - есть нажатие/отжатие: запоминаешь новое значение и вызываешь обработчик.
1






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2019 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach