Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник по МК-МИА-16.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
7.24 Mб
Скачать

Лабораторная работа №2. Параллельные порты ввода/вывода микроконтроллера

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

Краткие теоретические сведения. Микроконтроллер 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 ;выход их подпрограммы