Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы / Lab_moto / razrab 6_6.doc
Скачиваний:
10
Добавлен:
16.04.2013
Размер:
238.08 Кб
Скачать

1. Последовательный интерфейс связи.

Последовательный интерфейс связи (SCI) применяется для коммуникации между микроконтроллером и подключенными к нему устройствами.SCIиспользует две линии портаD(PD0для получения данных иPD1для передачи), а также регистры статуса, конфигурации и данных (см. теоретическую часть). В данной лабораторной работе платы отладочных модулей (далее ОМ) соединяются по три через последовательный интерфейс связи по схеме, показанной на рис.1.

Рис.1 Схема соединения ОМ по SCI.

RDI - Reciever Data Input;

TDO - Transmitter Data Output.

По схеме видно, что первый микроконтроллер может обмениваться данными с любым из двух других микроконтроллеров, а те, в свою очередь, только с первым. Это накладывает некоторые ограничения на пользование каналом связи. В частности, во время передачи данных первым микроконтроллером прием может вестись как одним, так и двумя микроконтроллерами, в то время, как передача может осуществляться или вторым, или третим микроконтроллером, но не двумя одновременно (при этом информация в линии становится бессмысленной).

Сигналы RDI и TDO ОЭВМ преобразуются на дополнительной плате в уровни, соответсвующие физическому стандарту RS-232C, с помощью схемы, представленной на рис.2.

Рис.2. Схема преобразования уровней сигналов.

В данной лабораторной работе используются прерывания от последовательного интерфейса связи. При выполнении заданий следует учитывать, что адрес подпрограммы обработки прерывания должен заноситься в ячейки $1FF6 (старший байт) и $1FF7 (младший байт).

Рассмотрим работу интерфейса на приведенном ниже примере, состоящем из двух программ. Программа 1 предназначена для передачи данных, а программа 2 - для приема. Для обеспечения связи эти программы должны функционировать на разных машинах (но не на ОМ2 и ОМ3 одновременно, см. рис.1).

Программа 1:

200 LDA #$30 КонфигурируемSCIна нужную

STA $D скорость (9600 бод);

LDA #$0 8 битные

STA $E данные;

LDA #$8 настраиваем

STA $F на передачу.

LDA $10 Сбрасываем флаги.

LDA $0 Передаем значение с переключателей

STA $11 по сети.

212 BRA 212 Организуем бесконечный цикл.

Программа 2:

200 LDA #$30 КонфигурируемSCIна нужную

STA $D скорость (9600 бод);

LDA #$0 8 битные

STA $E данные;

LDA #$4 настраиваем

STA $F на прием.

LDA $10 Сбрасываем флаги.

20E BRCLR 5,$10,$20EЖдем окончания приема.

LDA $11 Загружаем полученные данные в регистрA.

213 BRA $213 Организуем бесконечный цикл.

Программа 1 передает считанный с переключателей дополнительной платы байт данных по сети. При этом микроконтроллер-получатель должен выполнять программу 2. Заметим, что программа 2 может выполняться одновременно вторым и третим микроконтроллерами (см. рис.1), в этом случае передаваемую информацию получит и тот, и другой.

Поставьте точки останова по адресам $212 в программе 1 и $213 в программе 2. Запустите сначала программу 2, затем программу 1 и убедитесь в их правильной совместной работе (в регистрах Aобеих ОЭВМ должно оказаться передаваемое число).

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

-ведущий посылает в линию номер устройства, которому он хочет передать информацию (2 для ОМ2 и 3 для ОМ3, см. рис.1 практической части);

-эта (командная) посылка отличается от остальных (информационных) каким-либо признаком (в нашем случае установленным в 1 девятым битом) и должна быть принята всеми ведомыми устройствами, которые, в свою очередь, сравнивают полученный номер со своим и, в случае совпадения, производят прием информации с линии.

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

Программа 1 (передатчик):

200 RSP УстанавливаемSPв $FF.

LDA #$2 Конфигурируем портD

STA $7 (D1 на вывод, остальные линии на ввод).

LDA #$30 Устанавливаем скорость

STA $D передачи данных 9600 бод.

LDA #50 Устанавливаем длину посылки 9 бит

STA $E и старший передаваемый бит в 1.

LDA #$8 Разрешаем передачу

STA $F данных.

LDA #$2 Загружаем идентификатор устройства.

213 BRCLR 7,$10,$213 Ждем установления режима передачи данных

(флаг TDRE).

STA $11 Посылаем идентификатор по сети.

LDА #$10 Задаем количество пакетов равным $10.

21А BRCLR 7,$10,$21А Ждем окончания передачи очередного пакета

(флаг TDRE).

STА $11 Посылаем следующий пакет.

DECА Декрементируем счетчик.

BNE $21А Возврат на передачу пакета, если переданы не все.

222 BRA 222 Завершаем программу.

Программа 2 (приемник):

Основной блок:

200 RSP УстанавливаемSPв $FF.

LDA #$2 Конфигурируем портD

STA $7 (D1 на вывод, остальные линии на ввод).

LDA #$FF Переключаем портВ

STA $5 на вывод данных.

LDA#$80 Сигнализируем светодиодом

STA $1 о начале работы.

LDA #$30 Устанавливаем скорость

STA $D приема данных 9600 бод.

LDA #18 Выбираем длину посылки 9 бит и метод

STA $E активизирования приемника по единичному биту.

LDA #$26 Разрешаем прерывания по приему

STA $F данных и включаем режим ожидания.

LDA #$10 Устанавливаем счетчик принимаемых пакетов

STA $70 равным $10.

CLR $71 Очищаем вспомогательный флаг.

CLI Разрешаем прерывания.

220 BRA $220 Ждем начала работы приемника.

Подпрограмма обработки прерывания:

800 LDA $10 Сбрасываем флаги

LDA $11 и загружаем полученное значение в регистрА.

LDX $71 Если вспомогательный флаг установлен,

BNE $816 то переход на обработку полученного пакета,

CMP #$2 иначе сравниваем полученный идентификатор с

BEQ $811 верным (2 для ОМ2 и 3 для ОМ3) и в случае совпадения переходим на $811.

LDA #$26 Если идентификатор ошибочен,

STA $F то устанавливаем режим ожидания

810 RTI и возвращаемся из подпрограммы.

811 COM $1 Сигнализируем о получении верного идентификатора,

COM $71 устанавливаем вспомогательный флаг

815 RTI и возвращаемся из подпрограммы.

816 LDX $70 Сохраняем полученный пакет

STA $4F,X по нужному адресу.

DEC $70 Декрементируем счетчик неполученных пакетов.

BEQ $840 Если получен последний пакет, то завершаем

81E RTI программу, иначе возвращаемся из подпрограммы.

Пояснения к программам:

·в программе 2 вспомогательный флаг (ячейка ОЗУ $71) используется подпрограммой обработки прерывания: если флаг в нуле, то принят идентификатор, если в единице, то принят очередной 9-битный пакет;

·если принят неверный идентификатор, то приемник опять переключается в режим ожидания;

·получаемые по сети данные сохраняются по адресам $50..$5F, что дает возможность проверить отсутствие ошибок при передаче.

Запишите в ячейки $1FF6, $1FF7 адрес подпрограммы обработки прерывания ($800), поставьте точки останова по адресам $222 в программе 1 и $840 в программе 2. Запустите сначала приемник, затем передатчик. После того, как программы закончат свою работу, убедитесь в правильности передачи данных, просмотрев содержимое памяти по адресам $50..$5F.

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Мы не исправляем ошибки в тексте (почему?), но будем благодарны, если вы все же напишите об ошибках.

Соседние файлы в папке Lab_moto