|
|
  |
На PICe непонятки с портом, при упр. ножкой сбрасывается и другая... |
|
|
|
Aug 9 2005, 01:49
|
Частый гость
 
Группа: Свой
Сообщений: 82
Регистрация: 3-09-04
Из: Russia, Novosibirsk
Пользователь №: 590

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

Частый гость
 
Группа: Свой
Сообщений: 197
Регистрация: 6-08-05
Пользователь №: 7 409

|
Цитата(afad @ Aug 8 2005, 20:42) На PIC16F819: Выполняю команду установки выхода: BSF PORTA,1 - выход 1 устанавливается в 1. Хочу установить или сбрость выход 4: BCF PORTA,4 или BSF PORTA,4 Сбрасывается 1, вывод 4 управляется нормально. В чем может быть дело? Вродебы должно быть все нормально а если попробавать так: movlw b'00010010' movwf PORTA. ??????????
|
|
|
|
|
Aug 9 2005, 08:49
|
Местный
  
Группа: Свой
Сообщений: 212
Регистрация: 26-08-04
Пользователь №: 545

|
Цитата ... а если попробавать так: movlw b'00010010' movwf PORTA. Так естественно работает. Я разобрался в чем дело. К пину 1 была подключена емкостная нагрузка. Мы записываем в него 1, но фактически емкость еще не зарядилась и там некоторое время (микросекунды) остается 0. Потом меняем состояние пина 4, это, как правильно сказал Daniil, команда типа "чтение-модификация-запись", она читает порт (на пине 1 еще лог.0), модифицирует пин 4 и записывает в порт модифицированный байт, в пин 1 записывается прочитанный сигнал 0. Сделал небольшую задержку между установкой пина 1 и пина 4 и все заработало.
|
|
|
|
|
Aug 22 2005, 07:38
|

Местный
  
Группа: Свой
Сообщений: 482
Регистрация: 5-07-05
Из: Санкт-Петербург
Пользователь №: 6 528

|
Цитата(afad @ Aug 9 2005, 11:49) Цитата К пину 1 была подключена емкостная нагрузка. Мы записываем в него 1, но фактически емкость еще не зарядилась и там некоторое время (микросекунды) остается 0. Вешать ёмкость на порт без ограничителя по току (без последовательного резистора) плохая затея. При больших ёмкостях можно спалить не только сам порт, но и контроллер. Попробуйте уменьшить значение подтягивающего резистора на ra4
--------------------
Для связи email: info собака qbit.su
|
|
|
|
|
Mar 16 2006, 03:41
|
Группа: Новичок
Сообщений: 5
Регистрация: 12-03-06
Пользователь №: 15 164

|
Уже это проходил, проблем не замечан на PIC16F84A, PIC16F876A, PIC16F877A Делал так включаешь первый светодиод: MOVLW B'00000001' MOVWF PORTA а когда нужно будет включить следующий светодиод: MOVLW B'00010000' XORWF PORTA, F
Всегда такое проходило, и не сбрасывало состояние первого.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|