Зачем так разбивать инициализацию? Достаточно только goto INIT, а то ненароком можете залезть и в прерывания на 4-й адрес.
У меня всё под контролем даже еще одно место под инструкцию по адресу 0x03 осталось.
Читаемость и восприятие кода ухудшается. Если бы памяти было под завязку и каждое словоместо на счету, тогда да, можно поизвращаться, но не в этом же случае
CaseBot писал(а):
Когда наступает прерывание (кстати я его использовал для того, чтобы легче было изменять интервал, и заодно реализуется эдакий фильтр дребезга, да и всё равно намеренно нажать и отпустить кнопку за 65 мс не так-то просто)...
Вход в прерывание может совпасть с нажатием на кнопку и тогда никакой фильтрации антидребезга не получится, нарушится пространственно-временной континиум и всё сущее исче... Ну не очень это хорошо на мой взгляд.
Ну как, никто не проверил код на своем Протеусе? Вот чувствую, что уже надо, надо закупиться девелоперской платой, чтобы в реалии испытывать написанное
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Вход в прерывание может совпасть с нажатием на кнопку и тогда никакой фильтрации антидребезга не получится, нарушится пространственно-временной континиум и всё сущее исче...
Вход в прерывание никак не связан с нажатием какой-либо из кнопок, он сам по себе.. А в прерывании читается и сравнивается состояние входов, даже при дребезге может быть только одно состояние: либо 0, либо 1..
Все равно бред получается. Для нормальной работы нужно сохранять состояние порта в регистре состояния, а Протеус не дает этого делать. Надо на реальном железе проверять.
Добавлено чуть позже:
В общем надул я все-таки этот заумный Протеус. Светодиоды тоже подвесил на резисторы и после этого он стал нормально читать порт Автор, паяйте, заливайте, проверяйте, а потом добавлю туда работу с ЕЕПРОМ. Тут выше уже подсобили с готовым кодом. И советую поставить себе МПЛАБ, даже если вы не программируете. Обновленный проект с файлом Протеуса прилагаю.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Открыта удобная площадка с выгодными ценами, поставляющая весь ассортимент продукции, производимой компанией MEAN WELL – от завоевавших популярность и известных на рынке изделий до новинок. MEAN WELL.Market предоставляет гарантийную и сервисную поддержку, удобный подбор продукции, оперативную доставку по России.
На сайте интернет-магазина посетители смогут найти обзоры, интересные статьи о применении, максимальный объем технических сведений.
МПЛАБ у меня стоит. И протеус тоже Год назад сам исправлял чисто логически код в одной программе,но там было все доступно и разжевано,поэтому справился. А тут получается программа с нуля. Я в этом не силен. Кстати, здесь идет управление "-". А можно сделать управление "+"?
Последний раз редактировалось lucifern Пн мар 24, 2014 07:26:56, всего редактировалось 4 раз(а).
Продукция MOSO предназначена в основном для индустриальных приложений, использует инновационные решения на основе более 200 собственных патентов для силовой электроники и соответствует международным стандартам. LED-драйверы MOSO применяются в системах наружного освещения разных отраслей, включая промышленность, сельское хозяйство, транспорт и железную дорогу. В ряде серий реализована возможность дистанционного контроля и программирования работы по заданному сценарию. Разберем решения MOSO
подробнее>>
Добавил в свой код сохранение и загрузку предыдущего состояния выходов, но опять-таки проверить работоспособность не на чем.. Значение OSCCAL не стал записывать (мало ли, может, уже выставлено корректное значение)..
Ваш код работает только для одной кнопки.остальные не реагируют
Может код должен выглядеть так(исправил чисто логически): LIST P=12F629 __CONFIG 0X3F84 INCLUDE "P12F629.INC" ;---------- RESW EQU 0X20 RESS EQU 0X21 GP_PREV EQU 0X22 MEM_WR EQU 0X23 ;---------- ORG 0 BSF STATUS, RP0 ;BANK 1 MOVLW B'00000111' ;PRESCALER VARIABLE GOTO INIT ;---------- ORG 4 ;INTERRUPT MOVWF RESW MOVF STATUS, W MOVWF RESS
МПЛАБ у меня стоит. И протеус тоже Год назад сам исправлял чисто логически код в одной программе,но там было все доступно и разжевано,поэтому справился. А тут получается программа с нуля. Я в этом не силен. Кстати, здесь идет управление "-". А можно сделать управление "+"?
Могу и подкорректировать, только шПрота не перевариваю... Первое - при управлении активной 1 потребуется обязательная процедура защиты от случайного включения при подаче питания на схему. Второе - требуется всеж хороший антидребезг по кнопам (на первое время можно "забыть"). Третье - чего все дружно вцепились в последовательный побитовый опрос входных линий??? - для данной задачи есть и другие варианты решений, гораздо вкуснее...
1. Когда в окончательном варианте добавится сохранение состояний выходов в ЕЕПРОМ, то на выход сперва пойдет это значение, а к тому времени как всё устаканится, входы стабилизируются. Кроме того можно и задержку добавить в начале, после подачи питания. Даже ее правильно будет поставить для любого случая. 3. Изобразите? Интересно посмотреть. Уж не маской ли случайно?
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Последний раз редактировалось AlekseyEnergo Пн апр 07, 2014 01:04:21, всего редактировалось 1 раз.
Нарушение пункта 2.7 правил форума. Подредактировал.
В том числе и маской (как промежуточное значение). В общих чертах стандартный алгоритм: Метод векторной таблицы по захвату состояния линий клавиатуры и сравнения с предыдущим эталоном. По результату (при подтверждении либо нажатия либо отпускания) инверсия соответствующих выходных линий. Затем ожидание стабильного спокойствия и возврат в исходное состояние.
Не знаю, я не вижу в этом особой "вкусности". Для опроса 3-х битов в МК, который ничем не занят, по-моему лучше сделать последовательный опрос. Там всего-то 8 тактов (если не нажато), включая возврат по циклу. Речь идет именно о данной конструкции. Но вполне может быть задача, при которой данный метод будет нерационален.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Допустим, выход из "ленивого" режима после прерывания по изменению состояния выводов далее соовсем малость - считать данные с входного прота и при их подтверждении через задержку антидребезга отработать соответствующие изменения. А ежли без антидребезга всего-то чтение-сдвиг-переход к выполнению. А мож и сдвига не понадобится...
это теоретический набросок (макеткой не проверялся), для схемки с полевичками и батарейки хватит, а силовая с автоподхватом весьма "жирнюче" будет. Ну и относительно кноп - допустима любая из возможных комбинаций, каждое последующее нажатие инвертирует соответствующий выход. Исходно все отключено, туда же попадем, если удержать любое нажатие более 110 секунд.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения