Лекция 14. Организация введения и выведения информации в микропроцессорных системах Подсистемы ввода/вывода Подсистемы ввода/вывода (ПВВ) осуществляют передачу данных между микроЭВМ и внешними (периферийными) устройствами. Для построения подсистем ввода/вывода используют различные интерфейсы. Рассмотрим пример реализации подсистемы ввода/вывода с помощью микросхемы параллельного программируемого интерфейса КР580ВВ55. Внешнее устройство, передающее данные в микроЭВМ, представим в виде регистра тумблеров. Замкнутое положение тумблера соответствует подаче логического нуля на соответствующий вход, разомкнутое – логической единицы. Программирование микросхемы КР580ВВ55 Ввод данных в микроЭВМ PPI DIO PA PC 1 A1 A0 RD WR CS RESET +5 В PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0 Для организации передачи, выставленных внешним устройством данных, в микроЭВМ с помощью микросхемы параллельного программируемого интерфейса КР580ВВ55 порт B микросхемы необходимо запрограммировать на чтение. Для приведения микросхемы в исходное состояние, необходимо на вход RESET подать высокий уровень сигнала – произойдет установка режима 0 и все порты установятся в режим ввода. Загрузка слова управления микросхемы КР580ВВ55 PPI 1XXXX01X DIO PA PC 1 1 1 0 0 0 A1 A0 RD WR CS RESET +5 В PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0 Далее в микросхему необходимо загрузить слово управления. Для этого в соответствии с форматом слова управления микросхемы на шину данных необходимо выставить код 1XXXX01X, в соответствии с таблицей истинности на входы A1, A0, RD подать логическую единицу, а на входы CS и WR – логический нуль. Теперь если подать команду чтения из порта B ( RD = A1 = 0, WR = A0 = 1), то выставленные на входе порта B данные будут переданы на шину данных микроЭВМ. Вывод данных из микроЭВМ В качестве устройства, принимающего данные от микроЭВМ, возьмем алфавитно-цифровой индикатор, состоящий из двух семисегментных индикаторов и двух микросхем ПЗУ. В микросхемах ПЗУ запрограммированы коды, необходимые для отображения шестнадцатеричных цифр. Выход микросхем ПЗУ построен по схеме с открытым коллектором, поэтому, если выходной транзистор открыт, на выходе соответствующего разряда ПЗУ будет низкий уровень сигнала. При этом через светодиод (сегмент) индикатора будет проходить ток, и он будет светиться. Организация вывода данных на внешнее устройство A ROM PPI 1000XXXX 1 1 1 0 0 0 DIO A1 A0 RD WR CS RESET PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 DO CS A ROM DO PC CS PB Для программирования порта A на вывод информации в микросхему необходимо загрузить слово управления 1000XXXX (A1 = A0 = RD = 1, CS и WR = 0). Вывод данных на внешнее устройство A ROM PPI 01010011 0 0 1 0 0 0 DIO A1 A0 RD WR CS RESET PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 DO CS A ROM DO PC CS PB Теперь если выдать команду записи в порт A (WR = A1 = A0 = 0, RD = 1), то данные с шины данных микроЭВМ будут переданы через порт A и в шестнадцатеричном формате высвечены на алфавитно-цифровом индикаторе. Ввод данных в микроЭВМ с клавиатуры Для организации ввода данных в микроЭВМ с клавиатуры также можно использовать параллельный интерфейс. PPI 1XXX10X0 1 1 1 0 0 0 DIO A1 A0 RD WR CS RESET PA PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0 C D E F 8 9 A B 4 5 6 7 0 1 2 3 PB Строки подсоединяют к старшей части порта С, столбцы – к младшей. Для распознавания нажатой клавиши используется процедура сканирования клавиатуры. Младшую половину порта C настраивают на вывод, а старшую – на ввод. Для чего в микросхему загружают слово управления 1XXX10X0 (A1 = A0 = RD = 1, CS и WR = 0). Опрос клавиатуры PPI ХXXX0001 ХXXX0010 ХXXX0100 ХXXX1000 1 0 1 0 0 0 DIO A1 A0 RD WR CS RESET PA PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0 C D E F 8 9 A B 4 5 6 7 0 1 2 3 PB Через младшую половину порта С с определенной частотой поочередно выводятся 4-разрядные двоичные слова, такие, что только один разряд равен логической единице, а остальные – логическому нулю. Причем в каждом следующем слове логическая единица смещается в следующий разряд. Опрос клавиатуры PPI 0000XXXX 0100XXXX 0000XXXX 0000XXXX 1 0 0 1 0 0 DIO A1 A0 RD WR CS RESET PA PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0 C D E F 8 9 A B 4 5 6 7 0 1 2 3 PB После каждого вывода кода через младшую половину порта С осуществляется считывание данных со старшей половины (опрос) порта C. Опрос клавиатуры Так как строки через резисторы присоединены к общему проводу, то, если в момент опроса не будет нажата ни одна клавиша, считывание данных даст код 0000. В связи с тем что период опроса в несколько десятков раз меньше времени нажатия на клавишу, при нажатии на клавишу опрос приведет к появлению логической единицы в соответствующем нажатой клавише разряде кода. Например, нажатие клавиши 3 приведет к считыванию старшей половиной порта С кода 0001. Зная этот код и текущий код младшей половиной порта C, программно нетрудно определить нажатую клавишу и выполнить соответствующее действие.