Может быть имеет место быть проблема "Чтение-модификация-запись"? Выдержка из ФАКа:
Можно предполагать, что выполняется просто сброс бита, управляющего выводом порта. Фактически происходит чтение состояния всего порта ввода/вывода, затем сбрасывается требуемый бит и новое значение записывается в порт ввода/вывода (или регистр). Любая команда, зависящая от текущего значение регистра является командой со структурой "чтение - модификация - запись" (ADDWF, SUBWF, BCF, BSF, INCF, XORWF и др.). Команды, независящие от текущего значения регистра не являются командами "чтение - модификация - запись" (MOVWF, CLRF и др.).
Рассмотрим одну ситуацию выполнения команд "чтение - модификация - запись" для порта ввода/вывода. Например, все биты регистра TRISB настраивают PORTB на выход, и на всех выводах PORTB установлен высокий логический уровень сигнала. Теперь Вы настраиваете RB3 как вход, на котором присутствует низкий логический уровень. Выполняете команду BCF PORTB,6, чтобы на RB6 установить низкий логический уровень. Если Вы опять настроите вывод RB3 как выход, то на нем будет формироваться низкий логический уровень, хотя ранее Вы устанавливали высокий логический уровень. При выполнении команды BCF для другого вывода порта (RB6) происходит чтение состояния всего порта (включая 0 на RB3). Бит 6 изменяется к требуемому значению, но т.к. на RB3 был прочитан '0', он будет записан в защелку порта. Когда вывод будет настроен на выход, новое значение будет передано на вывод.
|