metallic Опубликовано 4 ноября, 2012 Автор Поделиться Опубликовано 4 ноября, 2012 Потому, что несоответствие считается между последним чтением и текущим значением порта. После чтения, соответственно, этой разницы не будет и флаг уже устанавливаться не будет. Т.е. когда я читаю порт Б, не важно куда я его читаю, его состояние при чтении еще сохраняется куда надо и с этого момента начинается новое ожидание изменений? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 4 ноября, 2012 Поделиться Опубликовано 4 ноября, 2012 Да, совершенно верно. По этому нужно прочитать порт, убрав несоответствие, а затем уже сбрасывать флаг. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
IMXO Опубликовано 5 ноября, 2012 Поделиться Опубликовано 5 ноября, 2012 IRQ_PROCESS ; Сохраняем контекст movwf _work ; Сохраняем рабочий регистр в памяти данных swapf STATUS, w ; Считываем регистр STATUS в рабочий регистр не меняя флагов movwf _status ; И сохраняем его из рабочего регистра в память данных ; В зависимости от порта, на котором возникло прерывания, вызываем ; соответствующую подпрограмму (проверяем по низкому уровню, т.е. нажатие кнопки) btfss PORTB, RB4 ; каждый раз выполняя эту команду вы читаете состояние портаВ call IRQ_RB4 btfss PORTB, RB5 call IRQ_RB5 btfss PORTB, RB6 call IRQ_RB6 ; Восстанавливаем контекст swapf _status, w ; Сначала восстанавливаем movwf STATUS ; регистр STATUS swapf _work, f ; Затем рабочий регистр swapf _work, w ; не воздействуя на флаги регистра STATUS ; Вы только что восстановили контекст..... ; А следующими командами его изменили, ; так делать нельзя, ; это может приводить к ошибкам в работе основной программы ; Чтобы сбросить бит RBIF обязательно надо вначале прочитать порт B movf PORTB, w ; Сбрасываем флаг внешнего прерывания, чтобы bcf INTCON, RBIF ; не получился бесконечный цикл retfie ; И возврат из прерывания в программу 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.