Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metod_MCS11_12.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
805.38 Кб
Скачать

Задание

  1. Составить программу приема 10 данных последовательным портом в асинхронном режиме и размещения их во внутренней памяти данных, начиная с адреса 20H для одной из следующих скоростей приема по указанию преподавателя. Для частоты синхрогенератора микроконтроллера 12 МГц - 62,5 Кбод, 0,110 Кбод, для частоты резонатора 11,0592 МГц – 19,2 Кбод, 9,6 Кбод, 4,8 Кбод, 2,4 Кбод, 1,2 Кбод.

После того как будет создана программа, необходимо установить частоту синхронизации микроконтроллера и активировать модель последовательного порта.

Для установки частоты щёлкните левой кнопкой мыши по опции Выполнение главного меню MCStudio. В выпавшем окне щёлкните левой кнопкой мыши по строчке Опции симуляции. В появившемся окне Опции симуляции в поле Частота контроллера (в Гц) с клавиатуры установить требуемое значение частоты и щёлкнуть левой кнопкой мыши по клавише ОК.

Для работы с моделью последовательного порта щёлкните левой кнопкой мыши по опции Вид главного меню. В выпавшем списке щёлкните левой кнопкой мыши по строчке Последовательный порт (UART). В выпавшем окне Последовательный порт установите буферный режим (рис. 1). Если при открытии окна опция Буфер в левом нижнем углу окна имеет поле белого цвета, то щёлкните по ней левой кнопкой мыши. Опция изменит цвет на цвет фона и произойдёт переход в буферный режим (рис. 1). Затем щёлкните левой кнопкой мыши по клавише ANSI. В результате надпись опции Автоввод станет белого цвета. Затем щёлкните по опции Эхо, что приведёт к тому, что надпись станет белого цвета. Активная опция Эхо позволяет наблюдать принимаемые символы. В поле справа от слова Режим щёлкните левой кнопкой мыши по галочке и в открывшемся окне щёлкните по строчке 1 стоп-бит. Теперь режим буфера установлен. Далее запустите симуляцию программы, щёлкнув левой кнопкой мыши по опции Выполнение главного меню MCStudio. В выпавшем окне щёлкните левой кнопкой мыши по строчке Запустить симуляцию. Затем вновь щёлкните по опции Выполнение главного меню и в выпавшем окне щёлкните по строчке Продолжить выполнение. Затем щёлкните левой кнопкой мыши в белое поле окна Последовательный порт и наберите с клавиатуры текст, например вашу фамилию и номер группы. При этом, если ваша программа работает корректно, то в поле, имеющем цвет фона, синими буквами будет воспроизведено принятое послание.

  1. С оставить программу передачи 10 данных на скорости 9,6 Кбод из резидентной памяти данных через последовательный порт.

Запускать программу передачи можно как в пошаговом режиме, так и в режиме автовыполнения (alt+F7). При использовании буферного режима симуляции последовательного порта информация о скорости передачи и передаваемых данных отражается в строке Передача (см. рисунок).

Контрольные вопросы

  1. Что представляет собой асинхронный режим работы последовательного порта микроконтроллера?

  2. Что входит в состав кадра при асинхронной работе последовательного порта?

  3. Чем отличаются и как устанавливаются режимы работы последовательного порта в асинхронном режиме?

  4. Каким образом изменяется скорость приёмопередачи последовательного порта?

  5. Как обеспечить работу подпрограммы обработки прерывания от последовательного порта?

  6. Изобразите схему многопроцессорного режима работы персонального компьютера и трёх микроконтроллеров.

  7. Каким образом реализуется многопроцессорный режим работы последовательного порта микроконтроллера?

Лабораторная работа № 7

Программная реализация контроллера шины

последовательного интерфейса I2C

Введение

В системах цифрового автоматического управления для последовательной передачи данных широко применяется коммуникационная шина I2C (Inter–Integrated Circuit Bus) фирмы Philips Semiconductor. Она является дешевой заменой последовательного канала RS-232C. Шина состоит из двух сигнальных проводов и провода "земля". Число устройств, подключенных к шине I2C, ограничивается максимальной ёмкостью нагрузки, равной 400 пФ. Стандартный режим работы шины обеспечивает передачу данных со скоростью 100 кбит/с. Скоростной режим поддерживает передачу данных со скоростью до 400 кбит/с. Длина шины может достигать 8 м. Последовательный интерфейс I2C обеспечивает двунаправленную передачу данных между парой устройств, используя два сигнала: данные SDA (Serial Data) и синхронизации SCL (Serial Clok), каждый из которых передается по своей линии. При обмене данными по шине устройство, управляющее шиной, т.е. вырабатывающее импульсы синхронизации (тактирующие импульсы) SCL по шине SCL и инициирующее и завершающее все передачи информации, называется ведущим. Ведомое устройство работает под управлением ведущего, оно не может начать и завершить обмен по шине, но может его задержать. Использование шины дает возможность построения систем различной конфигурации, в том числе и равноранговых, в которых может быть несколько ведущих. В данной работе рассматривается система "Один ведущий и несколько ведомых".

Н а рис. 1 приведена схема подключения микропроцессора и устройств к шине I2C. Линии SCL и SDA являются двунаправленными и подключаются к положительному полюсу питания через специальные резисторы R1 и R2. Такое подключение обеспечивает высокий уровень на шине, когда нет обмена по шине, т.е. шина находится в неактивном состоянии. Устройства, подключаемые к шине, должны иметь выход типа открытый коллектор (сток), либо открытый эмиттер (исток) и допускать объединение выходов по схеме "монтажное И". В обмене участвуют два устройства – ведущее (master) и ведомое (slave). Каждое из этих устройств может выступать как в роли передатчика, помещающего на линию SDA информационные биты, так и приемника в зависимости от типа обмена. Ведущий и ведомый могут быть в одном из следующих соотношений: "ведущий передатчик – ведомый приёмник" или "ведомый передатчик – ведущий приёмник". В протоколе интерфейса I2C каждое устройство имеет адрес. Для инициализации передачи данных ведущий передаёт адрес устройства, с которым будет обмениваться данными. Все остальные устройства принимают и анализируют этот адрес. Адрес содержит разряд, который определяет направление передачи данных (чтение или запись). Протокол обмена иллюстрирует рис. 2. Синхронизацию задает ведущее устройство - контроллер, линия данных - двунаправленная с выходом типа "открытый коллектор" - управляется обоими устройствами поочередно.

Начало любой операции – условие START - инициируется переводом сигнала SDA из высокого уровня в низкий при высоком уровне SCL. Завершается операция переводом сигнала SDA из низкого уровня в высокий уровень при высоком уровне SCL – условие STOP. При передаче данных состояние линии SDA может изменяться только при низком уровне SCL, биты данных стробируются положительным перепадом SCL. Каждая посылка состоит из 8 бит данных, формируемых передатчиком, после чего передатчик на один такт освобождает линию данных для получения подтверждения. Приемник во время девятого такта формирует нулевой бит подтверждения ACK. После передачи бита подтверждения приемник при необходимости может задержать следующую посылку, удерживая линию SCL на низком уровне. Приемник также может замедлять передачу по шине на уровне приема каждого бита, удерживая SCL на низком уровне после его спада, сформированного передатчиком.

Каждое ведомое устройство имеет свой адрес, по умолчанию разрядность адреса составляет 7 бит (используется также и десятиразрядный адрес, но в данной работе его использование не рассматривается). Адрес передается ведущим устройством в битах с первого по седьмой первого байта, бит 0 содержит признак операции R/W чтения или записи (R/W = 1 – чтение, R/W = 0 – запись). 7-битный адрес содержит две части. Старшие 4 бита с четвёртого по седьмой несут информацию о типе устройства, например, для микросхем памяти EEPROM он всегда 1010, для светодиодного индикатора типа SAA1064 – 0111. Младшие 3 бита с первого по третий определяют номер устройства одного типа. Комбинация из 3-х бит позволяет подключить к шине 8 однотипных устройств. Многие микросхемы с интерфейсом I2C имеют три адресных входа, коммутацией которых на логические уровни "единицы" и "нуля" и задается младшая часть адреса. На рис. 3 приведён пример подключения к шине 8 однотипных микросхем. Если это микросхемы памяти EEPROM, то первая микросхема имеет семибитный адрес 1010000, вторая – 1010001, седьмая – 1010110, восьмая – 1010111. Для микросхемы EEPROM типа 24LC16B младшая часть адреса означает номер одного из 8 блоков, ёмкостью по 256 байт каждый. Поэтому к шине можно подключить лишь одну такую микросхему.

Некоторые значения полного адреса зарезервированы для специальных целей.

Рассмотрим операцию записи данных во внешнее устройство с помощью временной диаграммы, представленной на рис. 4, а. Сперва контроллер генерирует условие начала обмена START( на линии SCL высокий уровень, а на линии SDA перепад от высокого уровня к низкому). После этого контроллер передаёт байт, содержащий адрес устройства и признак записи (R/W = 0). Передача любого байта происходит всегда старшим битом вперёд. После этого контроллер освобождает линию SDA (подает на неё уровень логической единицы) и ожидает нулевой бит подтверждения (ACK) от ведомого устройства. После получения подтверждения контроллер передаёт 8-битный адрес записываемой ячейки, освобождает линию SDA и ожидает нулевой бит подтверждения (ACK). Затем передаёт первый байт данных, освобождает линию SDA и ожидает ACK. Далее передаётся следующий байт, освобождается линия SDA и вновь ожидается ACK. Таким образом передаётся вся цепочка байтов. Если ведомое устройство не подтверждает полученный адрес или данные, то ведущий должен прервать обмен данными. После передачи последнего байта данных и получения нулевого бита подтверждения (ACK) контроллер выполняет условие STOP (при высоком уровне на линии SCL на линии SDA осуществляется перепад к низкому уровню). На рис. 4, а показана диаграмма передачи одного байта данных. Напомним, что синхроимпульсы на лини SCL вырабатывает контроллер, смена битов на линии SDA должна происходить при низком уровне на линии SCL. Биты действительны (считываются устройством) при высоком уровне на линии SCL.

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

Существует несколько вариантов выполнения операции считывания. Возможно чтение по заданному адресу, по текущему адресу или последовательное. Текущий адрес хранится во внутреннем счетчике ведомого устройства, он содержит увеличенный на единицу адрес ячейки, участвующей в последней операции.

Рассмотрим операции текущего и последовательного считывания с помощью временной диаграммы на рис. 4, б. Контроллер генерирует условие START, после этого формирует байт, содержащий адрес устройства и признак чтения (R/W=1), освобождает линию SDA и ожидает нулевой бит подтверждения от ведомого устройства. Получив команду чтения, устройство дает бит подтверждения ACK и посылает байт данных, соответствующий текущему адресу. Контроллер на него может ответить подтверждением ACK (установкой нулевого бита на линии SDA), тогда устройство пошлет следующий байт (последовательное чтение). Если на принятый байт данных контроллер ответит условием STOP, операция чтения завершается. Диаграмма на рис. 4, б показывает чтение одного байта контроллером (чтение по текущему адресу).

Для чтения по произвольно заданному адресу в ведомой микросхеме памяти необходимо установить внутренний счётчик микросхемы на адрес требуемой ячейки. Начальный адрес для считывания контроллер задает фиктивной операцией записи, в которой передается байт адреса устройства и байт адреса ячейки, а после подтверждения приема байта адреса снова формирует условие START и передается адрес устройства, но уже с указанием на операцию чтения. Таким образом реализуется считывание произвольной ячейки (рис.4,в).

При операции чтения, как и при записи, контроллер вырабатывает синхроимпульсы на линии SCL.

Протокол I2C позволяет использовать одну шину нескольким контроллерам, определяя коллизии (попытки одновременного доступа к шине со стороны двух и более микроконтроллеров) и выполняя арбитраж. Эти функции реализуются достаточно просто: если два передатчика пытаются установить на линии SDA различные логические уровни сигналов, то "победит" тот, который установил низкий уровень. Передатчик следит за уровнями управляемых им сигналов и при обнаружении несоответствия (передает высокий уровень, а "видит" - низкий) отказывается от дальнейшей передачи. Согласно протоколу устройство может инициировать обмен только при пассивном состоянии сигналов. Коллизия может возникнуть лишь при одновременной попытке начала обмена, но, как только конфликт будет обнаружен, "проигравший" передатчик отключится, а "победивший" продолжит работу.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]