Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Асинхронный последовательный обмен

Читайте также:
  1. E Расстройство всех видов обмена веществ
  2. IX Международный асинхронный турнир «Золотая осень» завершен!
  3. А23. Реакции ионного обмена и условия их осуществления.
  4. Асинхронный режим системы энергоснабжения и синхронного двигателя, его опасность.
  5. БИХЕВИОРИЗМ. ТЕОРИИ СОЦИАЛЬНОГО ОБМЕНА
  6. Блоки текста, буфер обмена
  7. Буфер обмена
  8. Буфер обмена
  9. Вы с Джонни Ли Миллером обменивались соображениями относительно исполнения роли Шерлока?

Наиболее распространенная форма последовательной связи — асинхронный обмен, при котором байт данных посылается как пакет, включающий информацию о начале и конце передачи данных, а также информацию для контроля ошибок. Первым передается не бит данных, а старт-бит, указывающий на начало передачи данных (начало пакета). Этот бит используется приемником для синхронизации процесса чтения данных, которые следуют за старт-битом (младший бит данных идет первым). После битов данных может следовать бит четности (контрольный бит), который используется для проверки правильности полученных данных. Существует два типа проверки на четность. Проверка на нечетность (Odd) означает, что число единиц в пакете данных, включая бит четности, должен быть нечетным (например, 0x55 будет иметь бит четности равным 1, чтобы сделать число единичных битов равным пяти, то есть нечетным). Проверка на четность (Even), наоборот, означает что число единичных битов должно быть четным (например, при передаче числа,0x55 бит четности будет равен 0).

Наряду с битами четности («odd») или нечетности («even») возможны другие варианты контрольных битов: «no», «mark» и «space». «No» означает отсутствие бита четности в пакете. «Mark» или «space» означает, что вместо бита четности всегда посылается 1 («mark») или 0 («space»), соответственно. Эти варианты контрольных битов используется достаточно редко — в тех случаях, когда необходимо дать приемнику дополнительное время на обработку пакета.

Количество стоп-битов также может быть различным. Второй стоп-бит может вводиться для той же цели, что и контрольные биты «mark» и «space» — чтобы дать приемнику больше времени для обработки принятого пакета.

Практически все современные устройства используют для асинхронного обмена формат данных «8-N-1», что означает передачу 8 бит данных, отсутствие бита четности и один стоп-бит. Бит четности и дополнительный стоп-бит обычно не требуются для последовательной связи.

Наиболее популярный протокол асинхронной последовательной связи называется «RS-232», который в настоящее время является международным стандартом. Это очень старый стандарт, используемый для связи компьютеров.

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

 

 

Рисунок 1 Формат асинхронной передачи данных

 

Другой распространенный метод асинхронной последовательной передачи данных — это использование кода типа «Манчестер» («manchester»). При этом методе передача каждого бита данных синхронизируется импульсом, а значение бита (0 или 1) определяется промежутком времени до следующего импульса. После передачи заданного числа битов данных следует стоп-импульс, а затем прием данных прекращается. Особенность манчестерского кодирования заключается в том, что старт-бит качественно отличается от I или 0. Это позволяет приемнику определить, являются ли поступающие данные началом или серединой посланного пакета (в последнем случае данные не будут приниматься до прихода старт-бита). Манчестерское кодирование хорошо подходит для использования в случаях, когда поток передаваемых данных может быть легко прерван. Поэтому такой метод передачи данных является основным для связи с помощью инфракрасного излучения, например, в пульте дистанционного управления телевизором.

В моделях AVR данные могут асинхронно передаваться и приниматься по последовательному каналу в полнодуплексном режиме при помощи модуля UART. В AVR этот модуль так же, как в других микроконтроллерах, которые не имеют возможности передавать бит четности. Основной частью UART является генератор синхросигналов обмена, определяющий скорость передачи данных. Это программируемый счетчик, при помощи которого обеспечивается частота, в 16 раз превышающая скорость передачи. Значение, которое надо занести в регистр UBRR, определяющий скорость обмена UART («UART baud rate register»), вычисляется по формуле:

UBRR = f / (16 * Data_Rate)-1,

где Data_Rate — желаемая скорость передачи данных. Как и для других генераторов, задающих скорость передачи данных, необходимо проверить значение получаемой ошибки скорости обмена (отношение фактической скорости обмена к требуемой), прежде, чем использовать определенный кварцевый резонатор и конкретное значение UBRR.

Частота генератора в 16 раз превышает скорость передачи данных, чтобы дать возможность приемнику считывать значение с входной линии примерно в середине каждого бита в потоке поступающих данных. Структура приемника UART приведена на рис. 2.

Рисунок 2 Структура UART

 

В этой схеме имеется специальное устройство — детектор фронта (блок восстановления данных и блок восстановления тактового сигнала), который применяется для того, чтобы определить, что в данный момент времени присутствует на линии: поток передаваемых данных или какие-то помехи. Если передаются данные, то он определяет середину бита и указывает сдвиговому регистру приемника RX, когда надо начинать принимать данные из входного потока. Детектор фронта обеспечивает также обновление содержимого USR - регистра состояния UART в следующих случаях:

1. при окончании приема байта данных – флаг RXC;

2. в случае возникновения ошибки приема, например, переполнения сдвигового регистра приемника, когда новые данные приняты раньше, чем из регистра RX считано предыдущее значение – флаг OR;

3. при ошибке кадра, когда данные идут не с той скоростью, с какой ожидалось, что обычно определяется по отсутствию стоп-бита – флаг FE.

 

 

Рисунок 3. Регистр состояния UCR

 

Прием данных и сброс приемника осуществляется путем считывания содержимого UDR - регистра данных приемника Rx.

Передатчик UART также содержит сдвиговый регистр. Устройство управления выводом позволяет передавать либо данные, либо сигнал режима ожидания (все «1» на линии). Для передачи символа достаточно записать его код в регистр данных UDR передатчика Тх.

Флаг ТХС устанавливается в 1 если символ, преданный в регистр UDR был передан полностью (то есть, включая стоп-бит), и из регистра UDR не ожидается новый байт данных.

Флаг UDRE устанавливается в 1, если содержимое регистра UDR было перенесено в сдвиговый регистр. С его помощью пользователь получает уведомление о том, что приемопередатчик готов к передаче нового байта.

Ниже приведен пример программы для настройки порта, приема и передачи данных.

 

.include "c:\Program Files\Atmel\AVR Studio\Appnotes\m8def.inc"

.def temp = r16; Define temporary variable

.def serial = r17; Данные для передачи в последовательный канал

 

.org 0

rjmp start

 

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

 

start: ldi temp,low(RAMEND)

out SPL,temp; Set stack pointer to last internal RAM location

ldi temp,high(RAMEND)

out SPH,temp

rcall uart_init;Инициализация UART

sei;Разрешение прерывания

; Бесконечный цикл

povtor:

rcall receive

rcall trans

rjmp povtor

 

;***********************************************

trans:

sbis USR,UDRE;если передатчик еще не передал байт

rjmp trans;то вернутся в trans и ждать

out UDR,serial;передача содержимого serial в UART]

ret

;***********************************************

receive:

 

sbic USR,RXC;если флаг RXC в USR сброшен, то пропустить команду

rjmp input;считать байт из приемника

ret

;************************************************

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

;********************************

uart_init:

ldi temp,0b00011000;Инициализация UART

out UCR,temp;TXEN=1,RXEN=1

ldi temp,51;9600 bit/s fclk=8 MHz

out UBRR,temp

ret

 




Дата добавления: 2015-09-10; просмотров: 123 | Поможем написать вашу работу | Нарушение авторских прав

<== предыдущая лекция | следующая лекция ==>
Диагностика аортальной недостаточности| SPI интерфейс

lektsii.net - Лекции.Нет - 2014-2024 год. (0.009 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав