Параллельные порты ввода/вывода микроконтроллера

 

Цель работы:Изучение принципа работы портов. Получение навыков использования параллельных портов для ввода/вывода данных. Разработка и отладка управляющих программ и программ ввода/вывода данных.

Краткие теоретические сведения.Микроконтроллер ATmega8535 имеет 4 восьмиразрядных параллельных порта ввода-вывода: PA, PB, PC и PD. В состав каждого порта входят 3 регистра ввода-вывода с именами DDRх, PORTх, PINх (где х=A, B, C и D. например, порт A имеет регистры DDRA, PORTA, PINA). Регистр PINх не имеет аппаратной реализации. Это имя используется в командах, по которым выполняется чтение байтов на выводах порта.

Состояния разрядов регистра DDRх определяет направление передачи бита через выводы порта. Если i-й разряд регистра DDRх равен 1, то соответствующий вывод порта работает в режиме выхода, а если равен нулю, то в режиме входа.

Например, следующие две команды настраивают порт PB на вывод данных:

ser r16 ;установить все биты регистра r16 в “1”.

;в r16 записывается число $FF.

out DDRB, r16 ;вывести содержимое r16 в регистр DDRB.

;все 8 разрядов порта B настроены на вывод.

 

Значение входного сигнала на отдельном выводе порта может быть определено с использованием команд условного перехода. Например:

SBIS PINA, 5 ; пропустить следующую команду, если 5-ый бит в порте А установлен

SBIC PINC, 7 ;пропустить следующую команду, если 7-ый бит в порте А сброшен.

При пуске и перезапуске микроконтроллера все разряды регистров DDRх и PORTх всех портов сбрасываются в нулевое состояние и выводы портов работают в режиме входов и находятся в Z состоянии.

Более подробную информацию вы можете найти во второй главе в разделе 2.5. «Параллельные порты ввода/вывода».

Пример программы управления ввод/выводом

по параллельным портам.

Программная реализация 8 разрядного распределителя импульсов (порт РА) с программно изменяемой скоростью (порт РВ).

Порт А настаиваем на вывод, а порт В – на ввод.

.include "m8535def.inc"

;---------------------------------------------------------------

;Инициализация стека

ldi r16,low(ramend) ;загрузить в r16 младший байт RAMEND

out spl,r16 ;вывести значение r16 в SPL

ldi r16,high(ramend) ;загрузить в r16 старший байт RAMEND

out sph,r16 ;вывести значение r16 в SPH

;---------------------------------------------------------------

;Инициализация портов МК

clr r16 ;сброс всех битов в регистре r16

out ddrd,r16 ;настраиваем все биты PORTD на ввод

ser r16 ;устанавливаем все биты в регистре r16

out ddra,r16 ;настраиваем все биты PORTA на вывод

;---------------------------------------------------------------

;Основная программа

ldi r18,$01 ;записываем в r16 1

start:

rol r16 ;команда циклического сдвига влево

out porta,r18 ;вывод содержимого r18 в PORTA

rcall delay ;вызов подпрограммы формирование задержки

rjmp start ;команда безусловного перехода на метку Start

;подпрограмма формирования временной задержки

delay:

in r16,portd ;вводим значения из PORTD в r16

m:

dec r16 ;уменьшаем на 1 содержимое r16

breq m ;если не равно 0 переходим на метку m

ret ;выход их подпрограммы

Индивидуальные задания к выполнению

Лабораторной работы №2

1. Разработать программу для подсчета количества единиц в 8 разрядном слове порта РВ. Результат записать в РС, если РВ0=1, иначе в РА.

2. Разработать программу для реализации 8 разрядного двоичного счетчика (порт РС). Режим суммирования при РВ0=1, режим вычитания РВ0=0.

3. Разработать программу реализации 8 разрядного распределителя импульсов. Сдвиг слева направо, если PD0=1, справа налево, если PD0=0.

4. Разработать программу для реализации 8 разрядного двоичного счетчика в режиме суммирования (порт РD). При РА0 = 1 с шагом +1импульс, а при РА0=0 с шагом +2 импульса.

5. Разработать программу для реализации 8 разрядного двоичного счетчика в режиме суммирования (порт РD) с прогаммно-изменяемой скоростью работы. Скорость определяется значением порта С.

6. Разработать программу для реализации следующих логических условий: если (РА0=1 и РС0=1) или РА3=1, то записать в РD число FF, иначе в РD число 00.

7. Разработать программу для реализации следующих логических условий: если РА0 = 1 или РС0 = 1, то вызов подпрограммы сдвига данных влево и запись их в РА, иначе –вправо.

8. Разработать программу формирования на выводах параллельного порта МК временных диаграмм заданного вида (см. таблицу 3.1).

Таблица 3.1

№ варианта Временная диаграмма № варианта Временная диаграмма
  8.1       8.3
  8.2       8.4  

Контрольные вопросы к лабораторной работе №2

1. Назначение параллельных портов МК.

2. Приведите примеры применения параллельных портов.

3. Как производит настройка параллельных портов на ввод или вывод данных? Приведите пример настройки портов.

4. Какие регистры используются для настройки параллельных портов?

5. В чем отличие регистров DDRx, PORTx и PINx (где x-A, B, С, D и т.д.)

6. Назначение регистров DDRx, PORTx и PINx параллельных портов.

7. Перечислите команды обращения к портам и приведите их форматы.

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

Лабораторная работа №3



ROOT"]."/cgi-bin/footer.php"; ?>