Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Stenin Lab / C8051F60-67-устройство МК.pdf
Скачиваний:
182
Добавлен:
10.02.2015
Размер:
5.19 Mб
Скачать

C8051F060/1/2/3/4/5/6/7

22.2. Поддержка связи с несколькими МК

Режимы 2 и 3 поддерживают мультимикроконтроллерный обмен данными между ведущим МК и одним или несколькими ведомыми МК, для чего применяется встроенная схема аппаратного распознавания адреса и особым образом используется девятый бит данных. Когда ведущий МК хочет передать данные одному или нескольким ведомым МК, он прежде всего посылает байт адреса, чтобы выбрать конкретное(-ые) устройство(-а). Адресный байт отличается от байта данных тем, что его девятый бит равен лог.1; в байте данных девятый бит всегда равен лог.0. УАПП0 будет считать ”действительными” (т.е. способными вызвать прерывание) два типа адресов: (1) маскированный адрес и (2) широковещательный адрес в любой момент времени. Оба типа адресов описаны ниже.

22.2.1. Установка маскированного адреса

Адрес УАПП0 определяется двумя SFR регистрами: SADDR0 (адрес последовательного порта) и SADEN0 (разрешение адреса последовательного порта). Регистр SADEN0 устанавливает битовую маску для адреса, хранимого в регистре SADDR0: биты, установленные в 1 в регистре SADEN0, соответствуют битам регистра SADDR0, которые участвуют в сравнении с принятым байтом адреса; биты, сброшенные в 0 в регистре SADEN0, соответствуют битам регистра SADDR0, состояние которых «не имеет значения» при сравнении с принятым байтом адреса.

Пример 1, Ведомый №1

 

Пример 2, Ведомый №2

 

Пример 3, Ведомый №3

SADDR0

= 00110101

SADDR0

= 00110101

SADDR0

= 00110101

SADEN0

= 00001111

 

SADEN0

= 11110011

 

SADEN0

= 11000000

Адрес УАПП0

= хххх0101

 

Адрес УАПП0

= 0011хх01

 

Адрес УАПП0

= 00хххххх

Установка в 1 бита SM20 (SCON0.5) настраивает модуль УАПП0 таким образом, что при получении стопового бита УАПП0 будет генерировать прерывание только в том случае, если девятый бит равен лог.1 (RB80 = 1) и принятый байт данных соответствует адресу ведомого УАПП0. После возникновения такого прерывания ведомый сбросит в 0 бит SM20, чтобы разрешить генерацию прерываний при получении следующих байтов данных. После того, как все сообщение получено, адресованный ведомый МК устанавливает в 1 бит SM20, чтобы игнорировать все посылки до получения следующего адресного байта. Пока SM20 = 1, УАПП0 игнорирует все байты, значение которых не соответствует адресу УАПП0 и 9-й бит которых не равен лог. ‘1’.

22.2.2. Широковещательная адресация

Одному ведомому устройству можно назначить несколько адресов и/или один адрес можно назначить нескольким ведомым устройствам, поэтому возможна “широковещательная ” передача данных более чем одному ведомому устройству одновременно. Широковещательный адрес представляет собой логическое ИЛИ содержимого регистров SADDR0 и SADEN0, при этом нули в полученном результате рассматриваются как “не имеющие значения”. Обычно широковещательный адрес 0xFF распознается всеми ведомыми устройствами, принимающими “не имеющие значения” биты за ‘1’. Ведущий процессор можно настроить на прием всех сообщений или протокол обмена можно реализовать таким образом, чтобы временно менять местами ведущего и ведомого, обеспечив тем самым полудуплексный обмен данными между истинным ведущим и ведомым(-и).

Пример 1, Ведомый №1

 

Пример 2, Ведомый №2

 

Пример 3, Ведомый №3

SADDR0

= 00110101

SADDR0

= 00110101

SADDR0

= 00110101

SADEN0

= 00001111

 

SADEN0

= 11110011

 

SADEN0

= 11000000

Широковещательный

 

Широковещательный

 

Широковещательный

адрес

= 00111111

 

адрес

= 11110111

 

адрес

= 11110101

Все нули в широковещательном адресе “не имеют значения”.

 

 

 

Следует отметить, что в приведенных выше примерах 4, 5 и 6 каждый ведомый будет считать адрес 0xFF “действительным”, т.е. широковещательным адресом. Кроме этого, в примерах 4, 5 и 6 используются те же самые значения регистров SADDR0 и SADEN0, что и в примерах 1, 2 и 3 соответственно (ведомые №1, №2 и №3). Таким образом, ведущий мог бы адресовать каждое ведомое устройство индивидуально с использованием маскированного адреса, а также все три ведомых одновременно в широковещательном режиме. Например, если ведущий послал бы адрес “11110101”, то только ведомый №1 распознал бы этот адрес как

271

Ред. 1.2