Микропроцессоры и микроконтроллеры

 
 
 
«Не волнуйтесь, если что-то не работает. Если бы всё работало, вас бы уволили.»
Mosher’s Law of Software Engineering
Русский | Українська


Микропроцессоры и микроконтроллеры :: Каналы ввода-вывода на основе МК51 :: Построение каналов приема-передачи данных в параллельном коде

Построение каналов приема-передачи данных в параллельном коде

Расширение количества портов ввода-вывода данных в параллельном коде для МК51 может выполняться следующим образом:

-         подключение внешних регистров – непосредственно к портам МК51 и размещение как элементов ВПД через системный интерфейс МК51;

-         подключение специализированных БИС портов ввода-вывода – непосредственно к портам МК51 и размещение как элементов ВПД через системный интерфейс МК51;

-         подключение сдвигающего регистра к последовательному порту («медленный» параллельный порт).

17.3.1. Подключение внешних регистров к МК51

Для расширения количества линий ввода-вывода удобно использовать
8-разрядные регистры с раздельными входами синхронизации и разрешения выдачи данных. Такие регистры имеют выходные тристабильные буферы.

Непосредственное подключение регистров к портам МК51

Реализуется в случае, когда МК51 используется без внешней памяти данных. При этом группа внешних (однотипных) регистров своими линиями D0…D7 параллельно подключаются к одному из портов МК51. Подключение должно выполняться через буферные усилители-повторители. Через другой порт МК51 программным путем должны выдаваться сигналы управления регистрами.

На схеме рис. 17.2 для примера показано подключение 4-х регистров в режиме выдачи данных из МК51. Пусть порт Р0 служит для передачи байта данных, а порт Р1 – для выдачи сигналов управления.

Рис. 17.2

Линии Р1.0 и Р1.1 используются для задания номера регистра, через который должен быть выдан текущий байт данных. Для выбора одного регистра используется дешифратор, выходы которого являются уникальными сигналами синхронизации для регистров. Линия Р1.2 служит для включения/отключения дешифратора, и, таким образом, всего блока передачи (для установления адреса и синхронизации срабатывания). Линия Р1.3 использована для выдачи сигнала разрешения передачи через регистры.

Для выдачи байта из аккумулятора МК51 через регистр RG1 нужно выполнить такие команды

SETB P1.0 ; формирование номера регистра

CLR P1.1

MOV P0, A ; выдача байта через порт

CLR P1.2 ; включение дешифратора – выдача строба записи в RG1

SETB P1.2 ; отключение дешифратора – снятие строба

SETB P1.3 ; выдача сигнала разрешения выдачи через регистры

Самостоятельно – модифицировать схему и программу для приема данных в МК51, а также обеспечить раздельное управление выдачей через регистры (в базовой и новой схемах).

Подключение регистров как элементов ВПД

В этом случае каждый регистр логически рассматривается как байт в адресном пространстве ВПД. Поэтому выдача байта в регистр должна выполняться при помощи команды MOVX. Физически регистры подключаются к системному интерфейсу МК51. Адрес, выдаваемый из МК через системный интерфейс, должен поступать на адресный селектор (на основе дешифраторов), функцией которого является формирование строба записи в нужный (т.е. адресуемый) регистр. Имеет смысл объединить этот сигнал по «И» с сигналом #WR, формируемым МК при выполнении команды MOVX, т.к. данные выдаются из МК позже, чем адрес, но в момент активности сигнала #WR. Вариант схемы представлен на рис. 17.3.

Для передачи байта из МК через регистр RG1 необходимы такие команды:

MOV DPTR, #<адрес регистра RG1> ; настройка регистра DPTR

MOVX @DPTR, A ; выдача байта в регистр RG1

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

Рис. 17.3

17.3.2. Подключение специализированной БИС портов ввода-вывода К580ВВ55
непосредственно к МК51

Специализированная БИС портов ввода-вывода К580ВВ55, часто называемая параллельным программируемым интерфейсом (ППИ), представляет собой три независимых канала передачи данных в параллельном 8-разрядном коде с программной настройкой направления и протокола передачи.

С точки зрения программиста ППИ рассматривается как четыре ячейки памяти в ВПД: регистры-фиксаторы каналов А, B, C и регистр настройки режимов ППИ - регистр управляющего слова (РУС).

Электрический интерфейс ППИ с микропроцессорной системой представлен шиной данных D0-D7, линиями А0, А1 для адресации внутренних регистров портов, сигналом #CS разрешения работы ППИ и сигналами стробирования чтения - #RD и записи - #WR.

В рассматриваемом случае принимается программно-управляемый протокол обмена, который инициируется программой микроконтроллера.

Принципы программирования ППИ подробно изложены в литературе.

В случае, если ВП не используют, ППИ может быть подключен непосредственно к портам МК51. При этом управление ППИ осуществляется по сигналам, которые выдаются из МК программным путем.

Можно предложить такое распределение линий портов МК: порт Р0 - ввод-вывод данных, порт Р1 - выдача адресных сигналов и сигналов управления. Возможная схема подключения ППИ к МК51 показана на рис.17.4.

Пусть канал А используется в режиме ввода, канал B – вывода, канал С – вывода. Декларативная часть программы при этом имеет вид

INIT_PPI equ 10010000B

CS bit P1.2

A0 bit P1.0

A1 bit P1.1

RD bit P1.3

WR bit P1.4

OUT_INF data 70H

IN_INF data 60H

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

SETB CS ; CS=1

SETB RD ; RD=1

SETB WR ; WR=1

CLR A0

CLR A1

; Настройка ППИ (загрузка РУС)

SETB A0 ; Адрес РУС "11"

SETB A1

CLR CS ; CS=0

MOV P0, #INIT_PPI

CLR WR ; Запись в РУС

NOP

NOP

ORL P1, #00010100B ; снятие сигналов управления

; Вывод через порт В ; Ввод байта из порта А

SETB A0 ; Адреса CLR A0 ; Адреса

CLR A1 ; канала В CLR A1 ; канала А

CLR CS MOV P0, #0FFH ; порт Р0 на

MOV P0, #OUT_INF CLR CS ; ввод

CLR WR CLR RD

NOP NOP

NOP MOV INF_IN, P0

ORL P1, #00010100B ORL P1, #00001100B

17.3.3. Подключение ППИ как элемента ВПД

В этом случае каждый регистр канала ППИ логически рассматривается как ячейка ВПД с соответствующими принципами обращения к ней. Обмен между МК51 и ППИ будет осуществляться под управлением МК51 по команде MOVX. При этом выдача адреса канала и сигналов управления #RD и #WR выполняется автоматически.

Вариант подключения ППИ к системному интерфейсу МК51 показан на рис. 17.5. Системный интерфейс предоставляет в распоряжение внешним устройствам демультиплексированные, физически раздельные шины адреса
А0-А7(А15) и данных D0-D7. Сигналы #RD и #WR, которые генерируются в МК51, подаются непосредственно на одноименные входы ППИ. Сигналы на входах ППИ А0 и А1 определяют внутренний адрес канала А, B, C или РУС, эти выводы подключаются непосредственно к адресным линиям А0, А1. В случае использования малого количества БИС ППИ для упрощения схем дешифрации адресов порты ППИ логически размещают по старшим или младшим адресам системного адресного пространства. Таким образом, старшие адресные линии (А2-А7) подключаются к схемам дешифрации для формирования сигнала #CS разрешения работы ППИ. В данной схеме подключение сделано в соответствии с таким распределением адресов: канал А - 0FCH, канал В - 0FDH, канал С - 0FEH, регистр РУС - 0FFH.

Пусть надо обеспечить такое распределение линий портов: каналы А и В - на вывод информации, канал С - ввод. Все каналы работают в режиме 0 - программно-управляемого синхронного обмена.

; Код настройки ППИ:

INIT_PPI equ 10001001B

; Символические имена для адресов портов и РКС

SA_A equ 0FCH

SA_B equ 0FDH

SA_C equ 0FEH

SA_R equ 0FFH

; Ячейки РПД для данных, которые выдаются и принимаются

OUT_INF1 data 70H

OUT_INF2 data 71H

IN_INF data 60H

; Инициализация ППИ

MOV A, #INIT_PPI

MOV R0, #SA_R

MOVX @R0, A

; Выдача байта через порт А ; Выдача байта через порт В

MOV R0, #SA_A MOV R0, #SA_B

MOV A, OUT_INF1 MOV A, OUT_INF2

MOVX @R0, A MOVX @R0, A

; Прием байта через порт С

MOV R1, #SA_C

MOVX A, @R1

MOV IN_INF, A

Сравнительный анализ схем на рис.17.4 и 17.5 показывает, что при непосредственном подключении ППИ к портам МК51 (т.е. логическом размещении в ППИ в АПВВ) применяется минимум аппаратных ресурсов для подключения ППИ к МК51, но возникают трудности в программной поддержке обмена за счет «ручного» формирования сигналов управления. Размещение ППИ в пространстве внешней памяти требует построения системного интерфейса МК51 и блоков дешифрации адреса, но при этом достигается простота программирования. Кроме того, подобное размещение имеет практически неограниченные возможности увеличения количества портов ввода-вывода. При этом программная реализация практически не усложняется. Аппаратная реализация требует построения каскадных схем дешифрации адреса. Следовательно, в случаях использования большого количества ППИ или необходимого наличия внешней памяти в системе подключение ППИ как элемента ВПД является единственно возможным вариантом построения системы.