Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_09Л_Порты_ЦВВ .doc
Скачиваний:
22
Добавлен:
21.03.2015
Размер:
122.37 Кб
Скачать

2. Программирование портов ввода/вывода

Программирование работы с портами ЦВВ состоит в том чтобы задать направление ввода/вывода записью нужного кода в регистр TRISx, а после этого можно выводить данные по байтам записывая их в регистр PORTx ,например, командой

MOVWF PORTx, F,

или считывая командой в режиме ввода

MOVF PORTx.

Вместо команд пересылки можно применять любые другие команды, которые производят нужную запись или чтение соответственно.

При этом следует учитывать следующие особенности:

- регистры PORTx и TRISx обычно дублированы в нескольких банках памяти данных, но не во всех;

- в режиме ввода данных чтение производится с вывода разряда ЦВВ микроконтроллера, а не из защелки PORT;

- последовательное выполнение операции вывода в порт ЦВВ и чтения из него может происходить неверно вследствие наличия задержек во внешних цепях или за счет паразитных емкостей выводов.

2.1. Инициализация портов

Под инициализацией порта понимается процесс подготовки порта к работе после включения питания микроконтроллера. Процесс инициализации несколько отличается для разных портов. Типичная процедура может быть рассмотрена на примере PORTA.

Пример: Инициализация PORTA

BCF status, rpo ; Выбрать банк О

CLRF porta ; Инициализация защелок PORTA

BSF status, rpo ; Выбрать банк 1

MOVLW 0xCF ; Значение для инициализации

; направления каналов PORTA

MOVWF trisa ; Настроить RA<3:0> как входы,

; настроить RA<5:4> как

; выходы.

2.2. Модификация состояния портов

При необходимости модификации состояния порта надо учитывать, что в режиме ввода данные регистра PORTx берутся с вывода разряда, а не из триггера – защелки. Поэтому для избежания ошибок можно сохранять значение регистра PORTx перед записью. Модификацию можно проводить с копией содержимого PORTx, а в него записывать уже модифицированное значение, которое снова сохраняется.

Подобная процедура требует дополнительного расхода памяти и дополнительных команд. Поэтому применяют часто операции записи в порт по принципу "чтение - модификация - запись". Например, команды BCF и BSF считывают значение в регистр ЦПУ, выполняют битовую операцию и записывают результат обратно в регистр. Требуется некоторая осторожность при применении подобных команд к регистрам портов ввода/вывода. Например, команда BSF PORTB,5 считывает все восемь битов PORTB в ЦПУ, изменяет состояние бита 5 и записывает результат в выходные защелки PORTB Если другой канал PORTB (например, RB0) настроен на вход то сигнал на выводе будет считан в ЦПУ и записан в защелку данных, поверх предыдущего значения Пока RB0 настроен как вход, никаких проблем не возникает. Однако, если RB0 будет позже настроен как выход, значение в защелке данных может отличаться от требуемого.

В приведенном ниже примере показан эффект последовательного выполнения команд "чтение - модификация - запись" с регистром порта ввода/вывода

Пример. Эффект выполнения команд "чтение - модификация - запись"

Начальные установки порта: PORTB<7:4> - входы, PORTB<3:0> - выходы.

Выводы RB7:RB6 являются открытыми, т.е. не имеют верхнего транзистора в буферном усилителе, а к ним подключены внешние подтягивающие резисторы. Другие цепи схемы к выводам не подключены.

Защелка PORTB Выводы PORTB

BCF STATUS, RPO ; Банк 0

BCF PORTB, 7 ; 01pp pppp 11pp pppp

BCF PORTB, 6 ; 10pp pppp 11pp pppp

BSF STATUS, RPO ; Банк 1

BCF TRISB, 7 ;10pp pppp 11pp pppp

BCF TRISB, 6 ; 10pp pppp 10pp pppp

Обратите внимание. Возможно пользователь ожидал, что после выполнения программы на выходах PORTB будет значение 00pp pppp. Однако 2-я команда ВCF установила в '1' RB7.