Если вы настраиваете пин на выход, значит хотите выдать на шину 0. Почему вас волнует, что это произошло сразу, а не "через пару команд"? Выдали 0 на нужное время, возвращайте пин обратно на вход.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Вот к примеру еще один из багов. Фрагмент кода: bcf STATUS,RP0 btfss GPIO,0 goto $+7 bcf GPIO,0 call Pause_5s call CheckU btfss UAllow,0 ; Если 1 то есть разрешение на включение goto $+2 goto GlowOn_2 bcf GPIO,4 goto CheckG Вот состояние регистров на начало фрагмента.
После выполнения команды "btfss GPIO,0" рабочая точка переходит на "goto $+7" , а должна на "bcf GPIO,0" На выходах GP0 и GP4 находится светодиоды. Почему так?
Я уже говорил, что перед проверкой битов порта нужно считать порт, т.е. сделать movf GPIO,f btfss проверяет защелку порта, а не реальное состояние пинов. Поэтому и нужно сперва обновить защелку, а потом проверять биты. В более новых МК раздельное управление. Там есть PORTx для входа и LATx для выхода.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Я уже говорил, что перед проверкой битов порта нужно считать порт, т.е. сделать movf GPIO,f btfss проверяет защелку порта, а не реальное состояние пинов. Поэтому и нужно сперва обновить защелку, а потом проверять биты. В более новых МК раздельное управление. Там есть PORTx для входа и LATx для выхода.
Да, пробовал. bcf STATUS,RP0 movf GPIO,F btfss GPIO,0 goto $+7 bcf GPIO,0 call Pause_5s call CheckU btfss UAllow,0 ; Если 1 то есть разрешение на включение свечь goto $+2 goto GlowOn_2 bcf GPIO,4 goto CheckG
После выполнения команды "movf GPIO,F" биты GPIO,0 и GPIO,4 сбрасываются в 0. Ну и соответственно после "btfss GPIO,0" выполняется "goto $+7" . Вот скриншот регистров (слева - до "movf GPIO,F", справа - после)
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Убедились, что Протеус не виноват? Вы судили по состоянию защелки на момент начала btfss, а он ориентировался на реальное состояние портов.
В реальном устройстве это считывание может не всегда и нужно, но я, когда писал на асм, для верности всегда это делал перед любой проверкой состояния пина.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Убедились, что Протеус не виноват? Вы судили по состоянию защелки на момент начала btfss, а он ориентировался на реальное состояние портов.
В реальном устройстве это считывание может не всегда и нужно, но я, когда писал на асм, для верности всегда это делал перед любой проверкой состояния пина.
Извините если я надоел своими, возможно, глупыми вопросами. Все равно не понимаю почему GPIO,0 и GPIO,4 сбросились в 0 после "movf GPIO,F"!? Ведь и в GPIO и на физических портах GP0 и GP4 была 1, т.к. незадолго до этого были отработаны команды: movlw b'00010001' movwf GPIO movf GPIO,F а порты настроены на выход.
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Такое может быть, если на порте висит большая нагрузка. Например - светодиод без ограничительного сопротивления. Причём такое поведение будет и на железе тоже. Но, в таком случае, при любой дальнейшей операции (работающей через Ч-М-З) с портом, физически уровень на этом ПИНе самопроизвольно сбросится в ноль. Т.е. примет состояние защёлки.
btfss проверяет защелку порта, а не реальное состояние пинов.
Скорее, наоборот - проверяет реальное состояние.
Ну, не знаю. У меня бывало, что btfss не читал реальное состояние кнопки, пока я не добавлял перед этим movf.
Kuzya, такое
Код:
movlw b'00010001' movwf GPIO
лучше не делать. Здесь это может приемлемо, а может нет, но вы не всегда можете знать состояние всех пинов порта. Поэтому для изменения используйте маску. Для очистки пина маску с AND, для выставления - OR, для инверсии XOR.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Последний раз редактировалось Zhuk72 Пн ноя 07, 2016 10:48:49, всего редактировалось 1 раз.
лучше не делать. Здесь это может приемлемо, а может нет, но вы не всегда можете знать состояние всех пинов порта. Поэтому для изменения используйте маску. Для очистки пина маску с AND, для выставления - OR, для инверсии XOR.
Да, так и делаю. Упростил фрагмент кода чтоб задать вопрос. Так же в программе использую опрос 2-х кнопок. С ними вопросов таких не возникает
Добавлено after 1 minute 15 seconds:
Аlex писал(а):
Kuzia писал(а):
Светодиоды горят до команды "movf GPIO,F".
А после команды гаснут ?
Kuzia писал(а):
Светодиод с сопротивлением
Опять же - с каким ? Если оно маленькое, то это равносильно тому, что его нет.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения