Последовательный ввод-вывод данных.
Наиболее распространенный вид связи между различными системами (или компьютерами) - это последовательный обмен. В этом случае байт данных передается по единственному проводу бит за битом с обеспечением синхронизации между приемником и источником данных. Очевидное преимущество последовательной передачи данных состоит в том, что она требует небольшого количества линий связи.
Существует множество стандартных последовательных протоколов передачи данных, которые применяются в микроконтроллерах. В некоторых микроконтроллерах эти протоколы реализуются внутренними схемами, размещенными на кристалле, что позволяет упростить разработку различных приложений.
Наиболее распространенная форма последовательной связи - асинхронный обмен, при котором байт данных посылается как пакет, включающий информацию о начале и конце передачи данных, а также информацию для контроля ошибок.
Первым передается не бит данных, а старт-бит, указывающий на начало передачи данных (начало пакета). Этот бит используется приемником для синхронизации процесса чтения данных, которые следуют за старт-битом (младший бит данных идет первым). После битов данных может следовать бит четности (контрольный бит), который используется для проверки правильности полученных данных. Существует два типа проверки на четность. Проверка на нечетность (Odd) означает, что число единиц в пакете данных, включая бит четности, должно быть нечетным (например, 55h будет иметь бит четности равным 1, чтобы сделать число единичных битов равным пяти, то есть нечетным). Проверка на четность (Even), наоборот, означает, что число единичных битов должно быть четным (например, при передаче числа 55h бит четности будет равен 0).
В некоторых микроконтроллерах значение бита четности должно определяться программно, а затем помещаться в регистр.
За битом четности следует стоп-бит, который используется приемником для обработки конца передачи пакета.
Асинхронный пакет данных показан на рис. 2.27. Существует набор параметров, который должен быть известен при реализации обмена. Одним из таких параметров является число передаваемых бит данных, которое определяется типом приемного и передающего устройств. Пакет на рис. 2.27 содержит только 5 бит данных (такое число бит использовалось в телетайпах), но возможны пакеты длиной до 8 бит.
Наряду с битами четности («odd») или нечетности («even») возможны другие варианты контрольных битов: «no», «mark» и «space». «No» означает отсутствие бита четности в пакете. «mark» или «space» означает, что вместо бита четности всегда посылается 1 («mark») или 0 («space»), соответственно. Эти варианты контрольных битов используется достаточно редко - в тех случаях, когда необходимо дать приемнику дополнительное время на обработку пакета.
Рис. 2.27 - Асинхронная последовательная передача данных.
Количество стоп-битов также может быть различным. Второй стоп-бит может вводиться для той же цели, что и контрольные биты «mark» и «space» - чтобы дать приемнику больше времени для обработки принятого пакета.
Практически все современные устройства используют для асинхронного обмена формат данных «8-N-1», что означает передачу 8 бит данных, отсутствие бита четности и один стоп-бит. Бит четности и дополнительный стоп-бит обычно не требуются для последовательной связи.
Наиболее популярный протокол асинхронной последовательной связи называется «RS-232», который в настоящее время является международным стандартом. Это очень старый стандарт, используемый для связи компьютеров.
Асинхронный приемник ждет прихода старт-бита, когда на линии устанавливается низкий уровень. Через половину времени передачи одного бита (длительность этого времени задается синхросигналом) линия вновь опрашивается. Если на линии все еще установлен низкий уровень сигнала, то приемник ждет один период и считывает данные (рис 2.29). Если же на линии оказывается высокий уровень сигнала, то приемник считает, что произошла ошибка, и данные не принимаются. Этот метод используется как при аппаратной, так и при программной реализации асинхронного приема данных. В программно реализованных приемниках используются программные циклы для отсчета задержек времени.
Другой распространенный метод асинхронной последовательной передачи данных - это использование кода типа «Манчестер» («manchester»). При этом методе передача каждого бита данных синхронизируется импульсом, а значение бита (0 или 1) определяется промежутком времени до следующего импульса (рис.2.29). После передачи заданного числа битов данных следует стоп-импульс, а затем прием данных прекращается. Особенность манчестерского кодирования заключается в том, что старт-бит качественно отличается от 1 или 0. Это позволяет приемнику определить, являются ли поступающие данные началом или серединой посланного пакета (в последнем случае данные не будут приниматься до прихода старт-бита). Манчестерское кодирование хорошо подходит для использования в случаях, когда поток передаваемых данных может быть легко прерван. Поэтому такой метод передачи данных является основным для связи с помощью инфракрасного излучения, например, в пульте дистанционного управления телевизором.
Рис. 2.28 - Чтение данных при асинхронном последовательном обмене.
Рис. 2.29 - Последовательный обмен с манчестерским кодированием