Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

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

Читайте также:
  1. Аспектно-ориентированное программирование
  2. Аспектно-ориентированное программирование
  3. Аспектно-ориентированное программирование
  4. Визуально-ориентированное программирование
  5. Визуально-ориентированное программирование
  6. Визуально-ориентированное программирование
  7. ГЛУБИНА ПОРТА И ОТМЕТКА ПОРТОВОЙ ТЕРРИТОРИИ

Программирование работы с портами ЦВВ состоит в том чтобы задать направление ввода/вывода записью нужного кода в регистр 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.

 

2.3. Последовательное выполнение операций записи - чтения с портами ввода/вывода

Запись в порт ввода/вывода фактически происходит в конце машинного цикла, а чтение данных выполняется в начале цикла (см рис. 9-12). Поэтому требуется некоторая осторожность при записи в порт ввода/вывода, если перед записью выполняется чтение состояния этого порта. Последовательность команд должна быть такой, чтобы установилось напряжение на выводе порта прежде, чем будет выполнена команда записи в порт, сопровождаемая чтением состояния выводов (иначе вместо нового значения может быть считано предыдущее). Если возможна описанная ситуация, разделите команды записи инструкциями NOP или любыми другими командами, которые не обращаются к порту ввода/вывода.

Рис. 2. Операции с портом ввода/вывода

 

На рисунке показан пример чтения из PORTB сразу поле записи в него. Время установления данных на PORTB равно Т=0,25Tcy-Tpd- Где Tcy -длительность машинного цикла микроконтроллера, Tpd - задержка распространения Следовательно, при высокой тактовой частоте микроконтроллера, чтение с порта ввода/вывода непосредственно после записи может возвращать неверные значения.

На рис. 3 показана модель канала ввода/вывода с описанной ситуацией. С увеличением емкости (С) увеличивается длительность нарастания/спада уровня напряжения на выводе. При увеличении тактовой частоты микроконтроллера, усиливается влияние емкости на выполнение команд "чтение - модификация - запись" с регистром порта ввода/вывода PORTX. В состав емкости (С) входит паразитная емкость проводника и выводов компонентов, подключенных к выводу порта ввода/вывода.

Использование команд NOP между последовательными обращениями к регистру PORTX "чтение - модификация - запись" является наиболее дешевым, но имеет существенный недостаток число команд NOP зависит от значения емкости и тактовой частоты микроконтроллера

Рис. 3

 

 


Дата добавления: 2015-08-26; просмотров: 58 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Типовой порт ЦВВ| Благодарности

mybiblioteka.su - 2015-2024 год. (0.008 сек.)