29.11.2015, 19:24
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,509
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
|
Re: Возможно ли такое в MPASM?
После выполнения действия по нажатой кнопке, установить бит в регистре, отведенном под эти нужды. Бит - общий для всех кнопок, либо отдельно на каждую кнопку. Сбрасывать этот бит при отпускании кнопки. А действие по нажатой кнопке выполнять только в том случае, если этот бит не установлен (проверка бита btfss или btfsc перед выполнением действия).
По схеме - первым делом - нельзя так напрямую соединять кнопки. Иначе при одновременном нажатии двух кнопок получится кз между линиями Q7 - Q6 - Q5. Кнопки соединять между собой в одну точку только через резисторы в несколько килоом. Либо через диоды, включенные так, чтобы не было протекания тока между Q7 - Q6 - Q5 при одновременном нажатии кнопок.
|
|
|
|
29.11.2015, 21:59
|
|
Временная регистрация
Регистрация: 26.10.2008
Адрес: москва
Сообщений: 92
Сказал спасибо: 15
Сказали Спасибо 10 раз(а) в 5 сообщении(ях)
|
Re: Возможно ли такое в MPASM?
Сообщение от NewWriter
|
По схеме - первым делом - нельзя так напрямую соединять кнопки.
|
Схема понятное дело для Протеуса, у меня и транзисторы в катоды не получилось разиестить, хотя и определил как дискретные. А насчет отжатия нужно ли зацикловывать, пока не будет отжатия и потом, если кнопка не нажата RA3 = 1, то как отслеживать отжатие, кроме того как зацикливание после входа по нажатию. Но циклы то разные, не может быть одновременно 2-х нулей на шине считивания RA3.
Последний раз редактировалось Nick19; 29.11.2015 в 23:53.
|
|
|
|
16.12.2015, 03:35
|
|
Гражданин KAZUS.RU
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
|
Re: Возможно ли такое в MPASM?
Поступаю так:
Резервирую регистр, скажем, "key"
Перед! Сменой индикации, опашиваю общий вход - как правильно замечено выше, в жеезе надо делать паузу, иначе емкостя дают ложную информацию, перед сменой разряда, все давно устаканилось и, если нажато, выставляю соотв бит. Обработка в основном теле. Там же и проверка одновременного нажатия и времени удержания. К ста: есть игрушка со смешаным управлением, энкодер + кнопки. После тирзаний, финалка получилась такой:
В прерывании по изменению уровняна одном из каналов, определяю направление, выставляю в том же key соотв флаг ( прибавит / убавит), сбрасываю флаг и запрещаю эти прерывания. Обработка и разрешение прерываний, опять же, в основном теле. Чего дало? В железе достоверность не зависит от скорости вращения да и индикатор не подмигивает, как если в обработке энкодера "тяжелая" математика.
Транзисторы в Proteus заменяю на "примитивный" инвертор - эммулятору легче.
Касаемо стартового вопроса - проще табличного retlw врядли есть.
Можно еще rrf или rlf спроверкой C в цикле на 8 соорудить, если несколько бит одновременно проверять (не совсем в тему) - на вкус и цвет...
__________________
Смотрящий под ноги - звёзды видит в лужах.
|
|
|
|
18.12.2015, 19:14
|
|
Временная регистрация
Регистрация: 26.10.2008
Адрес: москва
Сообщений: 92
Сказал спасибо: 15
Сказали Спасибо 10 раз(а) в 5 сообщении(ях)
|
Re: Возможно ли такое в MPASM?
Закончил свой проект. Все работает. Правда от использования "PCLATH - PCL" пришлось отказаться, благо переходов всего 3. Были проблемы с переводом программы на дисплей с общим анодом, но в конце концов все разрешилось добавлением гашения при смене знакомест. Хотя программа с общим катодом работала без гашения. Проект прилагаю, может кому пригодится. Всех с наступающим!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:29.
|
|