- •Лабораторная работа №6. Последовательные интерфейсы оэвм mc68hc705c8.
- •6.1. Теоретическая часть.
- •6.1.1. Последовательный интерфейс связи.
- •6.1.2. Последовательный периферийный интерфейс.
- •6.2. Практическая часть.
- •6.2.1. Работа с интерфейсом sci.
- •6.2.2. Организация локальной сети на основе
- •6.3. Контрольные вопросы.
- •6.4. Задания.
6.2. Практическая часть.
6.2.1. Работа с интерфейсом sci.
Последовательный интерфейс связи (SCI) использует две линии порта D (PD0 для получения данных и PD1 для передачи), а также ряд регистров (см. теоретическую часть). Каждая из плат имитатора внешних устройств содержит последовательный интерфейс SCI, выполненный в различных модификациях (токовая петля, RS-232C, RS-423A, RS-422A, RS-485). При выполнении данной лабораторной работы необходимо осуществить соединение между двумя одноименными разъемами коммутируемых рабочих мест, причем это касается модификаций интерфейса: токовая петля, RS-232C, RS-423A, RS-422A. Соединение посредством интерфейса RS-485, предназначенного для многоточечного соединения устройств, должно выполняться иначе и в данной лабораторной работе не рассматривается.
Рассмотрим работу SCI на приведенном ниже примере, состоящем из двух программ. Программа 1 предназначена для передачи данных, а программа 2 - для приема. Для обеспечения связи эти программы должны функционировать на разных машинах.
Программа 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.
Поставьте точки останова по адресам $212 в программе 1 и $213 в программе 2. Запустите сначала программу 2, затем программу 1 и убедитесь в их правильной совместной работе (в регистрах A обеих ОЭВМ должно оказаться передаваемое число).
Следующий пример - передача информации с распознаванием предназначенности информации тому или иному устройству (с дешифрацией адреса).
Примечание. В данном случае (при коммутации двух устройств) пример практического значения не имеет и используется исключительно для учебных целей.
Получение информации ведомым от ведущего осуществляется по инициативе ведущего следующим образом:
-ведущий посылает в линию номер устройства, которому он хочет передать информацию;
-эта (командная) посылка отличается от остальных (информационных) каким-либо признаком (в данном случае установленным в 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 установленным для ведомого устройства и в случае совпадения переходим на $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.