Лабораторно-практическое занятие №18

Тема: Ввод-вывод, организация условных переходов.

Цель: Исследовать организацию обмена информацией с простейшими устройствами ввода/вывода. Изучить организацию условных переходов.

ХОД РАБОТЫ:

1. Исследовать организацию ввода/вывода «Микролаб».

1.1. Исследовать ввод с тумблеров и вывод на светодиоды.

ПОРТ ВВОДА/ВЫВОДА

"Микролаб" имеет порт ввода/вывода который реализован на программируемом периферийном интерфейсе /микросхема КР580ИК55/. Порты этого интерфейса могут быть либо портами вывода, либо портами ввода, в зависимости от того, как интерфейс запрограммирован. К трем разрядам порта с этого интерфейса подключены тумблеры. Этот порт будет программироваться как порт ввода. А к 8 разрядам порта В подключены светодиодные индикаторы. Этот порт будет программироваться как порт вывода, т.е. МП сможет считывать данные с тумблеров и выводить дан­ные на светодиодные переключатели.

На рис.2. показана структурная схема программы, которая демонстри­рует использование этих портов. Эта программа считывает данные из порта ввода и записывает их в порт вывода.

Листинг программы приведен в табл.3.

Чтобы запрограммировать интерфейс, как было предусмотрено / С - порт ввода, В - порт вывода /, необходимо подать на него код 81 по адресу FB. Первая комманда MVI А,81 означает загрузку аккумулятора кодом 81. Следующая команда OUT FB записывает содержимое аккумулятора в порт по адресу FB, т.е. порт /интерфейс/ программируется. Далее идет команда IN FA, обеспечивающая запись данных из порта с адресом FA, присвоенным порту С, в аккумулятор. Команда OUT F9 означает вывод данных из аккумулятора в порт вывода по адресу F9. Поскольку этот адрес в нашем случае присвоен порту В, происходит вывод данных из аккумулятора в порт В /на светодиодные индикаторы/. Таким образом, программа пересылает данные из порта ввода в порт вывода. Последняя команда - переход /JMP/. Она завершает цикл, который выполняется непрерывно. Следовательно, данные выходного порта будут соответствовать данным порта ввода во время выполнения программы.

МП КР580ИК80 может адресовать до 256 портов ввода и столько же портов вывода. Поэтому для адресации портов достаточно два шестнадцатеричных разряда, а не четыре, как это требуется для памяти.

Проведем эксперимент по выполнению программы для передачи данных из порта ввода в порт вывода.

1. Введите программу, указанную в табл.3.

2. Начните выполнение программы с адреса 8000.

3. Поставьте тумблер порта ввода в любое положение. Верхнее положение соответствует 1, нижнее -0.

4. Посмотрите на светодиоды 2-4, считая справа. Они показывают те же данные, которые установлены на тумблерах порта ввода.

5. Измените положение тумблеров порта ввода. Данные порта вы­вода должны измениться соответственно

6. Нажмите кнопку СБРОС. Программа остановится, управление перейдет к монитору.

7. Измените положение тумбле­ров порта ввода. Данные порта вывода не изменятся, так как введен­ная программа больше не выполняется.

Следует отметить, что, при желании, перед записью данных в порт вывода, можно произвести над ними любые действия, предусмотренные системой команд МП. Например, можно считать данные из порта ввода, проинвертировать их и ввести в порт вывода. Для этого в программу /табл.3/ необходимо добавить команду, обеспечивающую инвертирование данных /СМА/.

1.2. Повторить программы лабораторной работы №17.

1.3. Исследовать ввод с клавиатуры.

КЛАВИАТУРА И ИНДИКАЦИЯ(КЛАВИАТУРА)

Клавиатура представляет собой набор ключей /кнопок/, организованных в виде матрицы 8x3.Каждый ряд из 8 кнопок опрашивается отдельно/аппаратное обеспечение описано в уроке 9/. Считываемые данные преобразуются в код, соответствующий нажатой кнопке, с помощью программы монитора KEYIN /адрес 0216Н/. Эта программа вызывается с помощью команды CALL KEYIN. После возврата из программы KEYIN в аккумуляторе будет содержаться код нажатой кнопки /табл.1/. Эта мониторная программа может использоваться для чтения клавиатуры.

Таблица 1 Коды кнопок микролаборатории

Кнопка Код /Н/ Кнопка Код /Н/
    D OD
    Е ОЕ
    F OF
    ПУСК  
    ВОЗВР.  
    УСТ. АД.  
  О6 АД,-  
    АД.+  
    ЗП  
    ВЫВОД  
А ОА ВВОД  
В    
С ОС    

В табл.2 показан листинг программы, которая вызывает звуковой сигнал, если нажата кнопка 7. Клавиатура читается с помощью вышеописанной программы KEYIN, которая заносит код нажатой клавиши в аккумулятор.

Команда CPI 07 устанавливает нулевой флаг процессора, если содержимое аккумулятора равно 07. Команда JNZ READ вызывает возврат программы на начало, если нулевой флаг не установлен. Если нулевой флаг установлен, то будет вызывааь-ся подпрограмма ВЕЕР. Затем процесс повторяется. Таким образом, звуковой сигнал будет генерироваться при нажатии кнопки 7.

Введите листинг программы в микролабораторию и проверьте пра вильность ввода.Запустите программу.

Таблица 2 Программа вызова звукового сигнала

Адрес Содержимое Метка Команда Комментарии
  CD READ CALL KEYIN Вызов программы, чтение клавиатуры  
           
           
  FE   CPI 07 Сравнение кода ключа с 07  
           
  С2   JNZ READ Возврат, если кнопка 7 не нажата  
           
           
  CD   CALL BEEP Звуковой сигнал, если к  
        7 нажата  
800А          
800В СЗ   JMP READ Повторение программы  
800С          
800D          

Нажмите кнопку 7 - динамик гудит. Нажмите любую другую кнопку -звуковой сигнал отсутствует.Составьте программу, которая генерирует звуковой сигнал, если нажаты в определенной последовательности три определенные кнопки, например 7, 3, 9. Эту программу можно взять за основу при создании электронного замка. Составление программы начните со структурной схемы. Введите программу в микролабораторию и проверьте ее выполнение.

СКАНИРОВАНИЕ КЛАВИАТУРЫ

На рис.1 приведена упрощенная схема клавиатуры. За один цикл считываются данные с одного ряда из восьми кнопок. Для простоты рассмотрим только один ряд, т.е. кнопки О,1,2,7

Чтение ряда ключей представляет собой двухшаговую операцию: запись данных в сканирующий порт для выбора кнопок, чтение байта данных читающим портом.

Чтобы выбрать определенный ряд кнопок, соответствующий бит сканирующего порта /РС4, Рис.1. Упрощенная схема клавиатуры

РС5 или РСб/ устанавливается в лог.1, другие биты остаются равными лог.О. Таким образом, чтобы выбрать ряд кнопок О...7у нужно послать в порт FA код '1010 1111 /9F-H/, чтобы выбрать 8...F - код 1010 1111 /AFH/ и чтобы выбрать кнопки ПУСК... ВВОД, -код (1100 1111) /CFH/. Биты РСО...РСЗ, РС7 не используются при сканировании клавиатуры и устанавливаются.равными лог.1

Итак, чтобы Считать данные с ряда 0... 7, в порт FA выводится байт 9F. Затем производится чтение входным портом для сбора информации о состоянии колонок. При нажатии определенной кнопки соответствующий бит читающего порта будет устанавливаться в 0 /табл.3/. /Обратите

внимание, что коды кнопок, приведенные в табл. 1 и 3, не совпадают/. Кнопка из других рядов при чтении выбранного ряда не влияет на результаты чтения. Табл.4 показывает программу, реализующую только что описанный процесс чтения,

Таблица 3 Коды, читаемые с клавиатуры

Кнопка Читаемый код /двоичный/ Читаемый код /шестнадца-теричный/
Нет нажатыхкнопок     FF
      FE
      FD
      FB
      F7
      EF
      DF
      BF
      7F

Таблица 4 Программа определения состояния кнопок

Команда Комментарии
MVI A, 9F Выбор ряда кнопок 0...7
OUT FA  
IN F8 Чтение состояния кнопок

Программа KEYIN, описанная выше, не только сканирует клавиатуру, но и преобразует коды, читаемые с колонок /в зависимости от выбранного ряда/, в коды, приведенные в табл 1.

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

Программа проверки состояния кнопки 2 Таблица 5

Адрес Содержимое Метка Команда Комментарии
  ЗЕ   MVI А,9F Выбор ряда кнопок 0...7
  9F      
  D3   OUT FA  
  FA      
  DB READ IN F8 Чтение состояния колонок
  F8      
  FE   CPI FB Сравнение аккумулятора с
        с кодом /кнопка 2/
  FB   JNZ READ Читать снова, если кнопка
  С2     2 не нажата
         
800А        
800В CD   CALL BEEP Если нажата кнопка 2,
800С       появляется звуковой сигнал
800D        
800Е СЗ   JMP READ Повторение программы
800F        
         

ковой сигнал. Наберите программу на "Микролаб" и проверьте ее работу

1.4. Исследовать вывод на дисплей.

ИНДИКАЦИЯ

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

Каждому индикатору соответствует ячейка памяти, где хранится семисегментный код, управляющий свечением сегментов индикатора /см.урок 9/. Информация из этихячеек посылается на индикаторы при помощи специальной схемы, которая обеспечивает динамический режим индикации.

Задача матобеспечения сводится к подготовке семисегментных кодов и засылке их в ячейки памяти 83F8...83FF. Ячейка 83F8 соответствует левому индикатору, 83FF - правому. /Динамическая индикация осуществляется в микропроцессорных системах не обязательно с помощью схемы. Сканирование индикаторов можно осуществлять и с помощью программы/.

Монитор микролаборатории содержит программу SEGCG /адрес=01СО/, которая преобразует шестнадцатеричные коды О, 1, 2...4, Е, F в семисегментные и заносит их в ячейки памяти 83F8...83FF. Исходные данные для этой программы должны находиться в ячейках 83F4...83F7. Каждый байт из этих ячеек соответствует паре индикаторов: содержимое ячейки 83F4 после преобразования высветится на двух левых индикаторах, содержимое ячейки 83F7 - на двух правых.

В табл.б приведена программа показа информации, использующая подпрограмму SEGCG. Введите программу и проверьте ее работу. На индикаторах должны последовательно высвечиваться символы 1, 2, 3, 4, А, В, C,D.

Таблица б Программа показа информации

Адрес Содержимое Метки Команда Комментарии
  ЗЕ   MVI А, 12 12-в [A ]
        A-в-[83F4l
      STA 83F4  
  F4      
         
  ЗЕ   MVI А, 34 34-вA
         
      STA 83F A-в[83F5]
  F5      
         
800А ЗЕ   MVI А,АВ АВ –в А
800В АВ      
800С     STA 83F6 A-в[83F6
800D F6      
800Е        
800F ЗЕ   MVI A, CD CD-в- A
  CD      
      STA 83F7 A-в[83F7]
  F7      
         
  CD   CALL SEGC G Вызов SEGC G
  СО      
         
      HLT Останов

Напишите программу,выводящую на два правых индикатора значение нажатой кнопки, а на остальные индикаторы - нули. Используйте при этом мониторные подпрограммы KEYIN и SEGCG.

В предыдущей программе мы использовали подпрограмму SEGCG для получения семисегментного кода. Но эта подпрограмма оперирует только с шестнадцатеричными символами -O...F, т.е. не полностью использует возможности семисегментных индикаторов.

Можно формировать семисегмент-ный код и получать на индикаторах любые символы, которые позволяют получить используемые в микролаборатории индикаторы. Как уже говорилось, семисегментные коды должны засылаться в определенные ячейки памяти. Каждый бит в этих ячейках соответствует определенному сегменту /рис.4/. Если бит равен 1, то соответствующий сегмент будет "гореть", и - наоборот.

БИТ                
СЕГМЕНТ H G F E D C B A
                 
  A    
F G B  
E D C  
      H

Рис.4. Соответствие разрядов и сегментов

В табл.7 приведен листинг программы, которая выводит на индикаторы надпись "СССР 60". Изменяя семи-сегментные коды, вы можете вывести на индикацию любую возможную надпись.

Таблица 7


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: