Файл: Лаб.раб 1 порты ввода вывода печать.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 24.07.2024

Просмотров: 32

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

Ввод-вывод данных, маскирование данных.

Цель работы – изучить варианты подключения простейших устройств ввода – вывода к МК АТ89S8253, способы маскирования данных.

Теоретическое введение

Порты ввода/вывода. Для подключения периферии МК имеет 4 8‑битных двунаправленных порта ввода/вывода, подключенных к внешним индикаторам и кнопкам как показано на рисунках 1 и 2.

Рисунок 1 схема подключения индикаторов-светодиодов

Рисунок 2 схема подключения кнопок.

В данном МК нет регистра специального назначения, определяющего направление передачи информации, поэтому, направление определяется по сигналу записи, поступающему на фиксатор-защелку (см пример на Рис.3).

Рисунок 3. Схема электрическая порта 0 МК.

Порт Р0 не имеет внутренних подтягивающих резисторов. Транзистор N1 в выходном каскаде выводов порта Р0 открыт только тогда когда через эти выводы выдается «1» при обращениях к внешней памяти. Во всех других режимах работы транзистор N1 заперт. Таким образом, при использования Р0 в качестве выходного порта общего назначения, на его выводы устанавливают внешние подтягивающие резисторы для задания уровня «1». Запись «1» в защелку вывода порта Р0 закрывает транзистор N и при отсутствии внешнего подтягивающего резистора переводит выводы порта в высокоимпедансное состояние и они могут использоваться как входные. Каждый из выводов порта может работать независимо от других.

Все разряды фиксаторов-защелок (D-триггеров) портов Р0-Р3 по сбросу устанавливаются в «1». Если защелка вывода порта содержит «0», порт работает как выходной, если «1», то как входной.

Через Р0:

  • выводится младший байт адреса А0…А7 при работе с внешней памятью,

  • выдается и принимается байт данных,

  • задаются данные при программировании внутреннего ЭСППЗУ и читается содержимое внутренней памяти программ.

Ниже, на рисунках 4-6 приведены принципиальные схемы портов ввода/вывода микросхем серии МК51, построенных по n-МОП технологии. Микросхемы, построенные по КМОП-технологии (AT89S8253) отличаются от них только выходным каскадом (типом выходных транзисторов и способами их подключения), управляющая логика не меняется.


Порт Р1- двунаправленный TTL-совместимый порт ввода/вывода. Р1, как и порты Р2, Р3 имеет внутренние подтягивающие резисторы, подключенные к цепи питания и выполненные в виде транзисторов N2 (рисунки 4-6).

Рисунок 4. Электрическая схема порта Р1

Использование выходных каскадов позволяет снизить время переключения из состояния «0» в состояние «1» (за счет использования N1), увеличить выходной ток и снизить шумы. На рисунке 4 транзисторы N1 и N2 подключены к источнику питания, а N к общей шине.

Через Р1 задается младший байт адреса при программировании внутреннего ЭСППЗУ и при чтении внутренней памяти программ.

Порт Р2. Через этот порт:

  • выводится старший байт адреса А8-А15 при работе с внешней памятью программ и внешней памятью данных,

  • задается старший байт (А8-А14) адреса при программировании внутреннего ЭСППЗУ и при чтении внутренней памяти программ.

Рисунок 5. Электрическая схема порта Р2.

Порт Р3. Каждая линия Р3 кроме универсального назначения (линий ввода/вывода) имеет альтернативную функцию (см таблицу описания МК). Альтернативная функция реализуется, если в соответствующем этой линии разряде фиксатора-защелки записана «1» (см рисунок 6).

Рисунок 6. Электрическая схема порта Р3

Чтение и запись информации

Чтение данных организуется 2 типами команд: командами, считывающими информацию с выходов защелок и командами, считывающими информацию с внешних контактов выводов порта. Команды, считывающие информацию с выходов защелок, реализуют режим «чтение-модификация-запись», заключающийся в том, что команда считывает состояние защелки, если нужно, изменяет его и записывает результат обратно в защелку. Чтение состояния порта с выхода защелки позволяет исключить неправильную интерпретацию уровня напряжения на выводе порта. Например, если порт используется для управления базой n-p-n транзистора и в защелке записана «1» транзистор открывается. Если после того как транзистор откроется МК прочитает состояние внешнего контакта, то получит «0», так как это напряжение базы открытого транзистора. Если же считать состояние вывода из защелки, то получим правильный результат – «1».


Команды, работающие в режиме «чтение-модификация-запись»:

ANL

Логическое И

ORL

Логическое ИЛИ

XRL

Исключающее ИЛИ

CLR

Очистка аккумулятора или бита

CPL

Инверсия аккумулятора или бита

JBC

Переход, если бит установлен и очистка этого бита

INC

Инкремент

DEC

Декремент

DJNZ

Декремент и переход, если не равно нулю

MOV

Пересылка

SETB

Установка бита

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

Маскирование данных.

Очень часто при написании программы требуется маскировать данные (накладывать маску). Маска – управляющий код, разрешающий/запрещающий отдельные разряды основного кода. Таким образом, маскирование – изменение некоторых разрядов (битов) числа.

Наиболее часто маскирование организуют с помощью следующих операций:

  1. логическое «И» - умножение числа (в аккумуляторе) и маски. Очищает бит числа, если в соответствующем бите маски будет записан «0», и не изменяет его, если в бите маски записана «1». Обнуляет отдельные биты числа;

  2. логическое «ИЛИ» - сложение числа (в аккумуляторе) и маски. Устанавливает бит числа в «1», если в таком же бите маски будет записана «1», не изменяет его, если в этом юите – «0». Применяется для установки отдельные битов в «1»;

  3. Логическое «исключающее ИЛИ» числа (в аккумуляторе) и маски. Инвертирует содержание бита числа, если в соответствующем бите маски записана «1» и не изменяет его, если в этом бите - «0».


Пример маскирования чисел приведен в таблице 1:

Таблица 1

Операция

(в 16-м коде)

Число

(двоичный код)

Маска

(двоичный код)

Результат маскирования

комментарий

0x3A & 0xAC

00111010

10101100

00101000

Логическое умножение байтов

0x3A | 0xAC

00111010

10101100

10111110

Логическое сложение байтов

0x3A ^ 0xAC

00111010

10101100

10010110

Логическое «исключающее ИЛИ»

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


Программирование портов мк

Для работы с кнопками порт должен быть сконфигурирован как входной.

Если проект работает с кнопками (то есть использует библиотеку кнопок), должна быть определена внешняя переменная Button_Pin:

extern sbit Button_Pin;

В проекте используется функция Button, имеющая 2 параметра.Она описана в библиотеке Button, которую нужно подключить к проекту – см. «Работа с менеджером проектов».

unsigned short Button (unsigned short time, unsigned short active_state)

параметр time определяет время в миллисекундах;

параметр active_state определяет какое состояние считать активным: лог. «1» или «0».

Функция Button возвращает два значения:

255- если вывод находится в активном состоянии,

0 – если в неактивном состоянии.

Пример объявления переменной в программе:

sbit Button_Pin at P0_0;

приведенная ниже программа демонстрирует использование кнопки 0 порта 3 - P3.0. Программа все время отслеживает состояние кнопки P3.0, при нажатии (подаче 0) на портах Р1, Р2 и Р0 наблюдается одно состояние, если же кнопка не нажата, то другое. Причем, на порты Р1 и Р0 выводятся простые числа, а на порт Р2 – маскированное число.

sbit Button_Pin at P3.B0; //объявление Button_Pin по порту 0, разряду 0.

void main()

{

P3 = 255; // Р3 сконфигурирован как входной – все выключено

do

{

if (Button(1, 1)) //если не нажата кнопка Р0.0

{P1 = 0x00; // на выходе Р1 записано число "0", вывод простой

P0 = 0xaa; // на выходе Р0 записано число "аа", вывод простой

P2=P0 | 0x10; // на выходе Р2 записано число "аа" с маской 0х10 по ИЛИ

}

if (Button(1, 0)) // если нажата кнопка Р0.0 (есть переход из 1 в 0)

{P1 = 0xF0; //режим «запись»

P0 = 0xff;

P2=P2&0x10; //режим «чтение-модификация-запись»

}

} while(1); // конец цикла

}

Порядок выполнения работы

1 Изучить теоретическое введение, описание МК: карты памяти МК АТ89S8253, схем электрических принципиальных портов ввода/вывода, электрическую схему подключения портов ввода/вывода лабораторного стенда. Изучить порядок работы со стендом.

2 Перевести заданные числа из десятичного кода в 16-ричный и двоичный код.

3.1 В соответствии с вариантом задания изменить программный код: при нажатии кнопки вывести на индикаторы байт числа (режим простого вывода) и один байт с маской, если кнопка не нажата, выводить байт с двумя другими масками, причем на одном из портов (любом) организовать режим «чтение-модификация-запись».