Режим работы MK с последовательным каналом

|

Режим 1 характеризуется следующими параметрами:

> обмен информацией асинхронный;

^ передаются 10 бит за один акт обмена (старт - бит (0) 8 бит данных и стоп-бит (1));

> скорость приема/передачи программируема и задается таймером. Основные подпрограммы для МК

Основными подпрограммами для микроконтроллера будут являться: считывание данных из АЦП, инициализация УАПП, прием байта и посылка байта. Считывание данных из АЦП

Для того чтобы настроить микроЭВМ на обмен информацией по последовательному каналу, необходимо сделать следующее:

clip_image002

^ запретить все прерывания

так как в их использовании нет необходимости;

^ настроить таймер 1 на

работу в режиме 2 с автоматической перезагрузкой содержимого. Это необходимо для задания скорости обмена информацией и поддержания ее постоянной;

^ загрузить в счетчик

таймера начальные значения;

^ запустить таймер 1;

Пример кода, рассчитанного на скорость обмена 9600 бит/с для кварцевого резонатора с резонансной частотой равной 11,059 Мгц.

Эта подпрограмма вызывается самой первой в основной программе микроЭВМ. В принципе ее можно даже и не оформлять как подпрограмму.

Подпрограмма приема посылки байта по последовательному каналу.

clip_image004

Считывать байт из порта ввода/вывода SBUS можно только при установленном бите RI регистра управления/статуса SCON,

сигнализирующего о наличии байта в буфере приема. После считывания этого байта бит RI необходимо сбросить.

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

Подпрограмма приема байта в аккумулятор:

clip_image006

clip_image008

Алгоритм позволяет программным методом выявлять ошибки ввода/вывода и реагировать на их появление. Диаграмма состояния устройства (рис.22.), на которой

приведены четыре основных состояния устройства с точки зрения обмена информации с ЭВМ.

МикроЭВМ является ведомым, а персональный компьютер ведущим при обмене данных.

Состояние первое - Wait

В этом состоянии устройство оказывается сразу же после включения питающего напряжения. Здесь оно ожидает от компьютера запроса на инициализацию, который выражается в посылке компьютером символа NUL. Устройство же в свою очередь, если требуется, дополнительные модули и ресурсы, а затем, если все прошло нормально, посылать в ЭВМ символ АСК. В случае же ошибки оно должно послать NAK. Таким образом, происходит первое «общение».

При удачной инициализации устройства с последующей посылкой символа АСК, оно автоматически переходит в следующее состояние. Этот переход обозначен стрелкой 1 на диаграмме. Состояние Ready

В этом состоянии наша микро-ЭВМ ожидает запроса ПК на посылку измеренного значения, считанного с АЦП. Запросом является символ XON. По принятии этого символа устройство переходит в новое состояние - Sending. Переходу соответствует стрелка 2. Состояние Sending

Попадая сюда, микроконтроллер считывает двоичное двенадцатиразрядное число из АЦП ранее указанным методом и посылает частями в ЭВМ. В данной реализации происходит преобразование двоичного числа в трехсимвольный шестнадцатеричный эквивалент.

По окончании передачи значения в компьютер микро-ЭВМ переходит в следующее состояние по стрелке 4.

Состояние Sent

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

Тут возможными являются несколько вариантов ответа ПК на посланное число: он может ответить об успешном приеме символом XOFF, который будет означать, что больше пока не требуется других значений, а может ответить символом XON, означающим, что нужно еще одно значение. Если принят XOFF, то устройство возвращается в состояние готовности Ready (переход 7 на диаграмме). Если же принят символ XON, то устройство опять оказывается в состоянии Sending

clip_image010

(переход 5) и повторяет считывание из АЦП с последующей передачей числа в линию. Если ПК не понравилось то, что он получил: например, вместо символов диапазона «0»...»9», «А»...>^», он получил нечто иное, «G» или «,». В этой ситуации он посылает нашему устройству символ NAK, который должен трактоваться как запрос на повторную посылку последнего значения, что и происходит: устройство опять переводится в состояние Sending (переход по стрелке 6).

Остались неописанными переходы, обозначенными стрелками 3 и 8 диаграммы. Если компьютер обнаружит серьезные ошибки ввода/вывода или ему понадобится прекратить обмен с устройством, то он просто пошлет инициализационный NUL, по которому произойдет инициализация устройства и оно окажется в состоянии готовности Ready.

Переходим к ПК. Общая программа для ПК. Диаграмма состояний ПК.

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

Сюда компьютер попадает, когда пользователь нажимает на его клавиатуре клавишу, соответствующую принятию единственного значения. В этом состоянии компьютер посылает символ инициализации NUL в устройство и ожидает ответа на него символом АСК или NAK. Если был получен АСК, значит инициализация прошла нормально и можно продолжить работу - перейти в следующее состояние по стрелке 2 на диаграмме. В случае получения NAK работа должна прекратиться и компьютеру следует перейти в заключительное состояние Done по стрелке 1. Состояние Ready

В этом состоянии компьютер подготавливается к приему символов, из которых будет состоять запрошенное из микро-ЭВМ значение. Запросов на посылку значения существует два. Первый - это обычный запрос значения, ему соответствует символ XON.

Второй же запрос - это запрос на повторную посылку последнего значения. Это необходимо в том случае, если значение не было принято полностью за какое-то объективное время или были приняты неверные символы, не попадающие в диапазоны от «0» до «9» и от «А» до «F». Для запроса на повторную посылку отводится символ NAK.

Далее, после подготовки к приему символов значения происходит один из двух вышеуказанных запросов к нашему устройству, затем компьютер переходит по стрелке 4 в состояние приема значения. Состояние Receiving

Здесь ПК просто считывает три символа значения, измеренного и преобразованного с помощью АЦП. Существует некоторое объективное время ожидания символа компьютером. Если символ не был считан за это время, то такая ситуация интерпретируется как ошибочная, т.е. имела место ошибка ввода/вывода.

При довольно высоких скоростях обмена информацией (больше 19200 бит/с) или при работе в операционной системе MS-Windows (любой версии) часто бывает, что компьютер из посылаемых ему трех символов принимает только два, а иногда и того меньше - один. Чтобы компьютер «не висел» - ожидал бесконечно долго недостающего или пропущенного символа - вводится некоторое время, ограничивающее это ожидание. К сожалению, эти пропуски аппаратным методом никак не выявляются.

В данной реализации определено два типа времени ожидания, которые могут быть заданы пользователем с клавиатуры. Первый тип это время ожидания 1-го из 3-х символов. Он позволяет устройству спокойно, ни куда не торопясь, измерить, оцифровать необходимое нам число и преобразовать его в символьный эквивалент. А второй тип - это временной лимит на посылку второго и третьего символов.

Перейдем теперь к возможным переходам из состояния Receiving в другие состояния.

Если так и не было принято всех 3-х символов значения за отведенное время, то компьютер должен попросить наше устройство послать ему значение повторно. Этой ситуации соответствует переход по стрелке 5, т.е. компьютер делает запрос символом NAK и переходит обратно в состояние Ready.

Если в процессе приема компьютером была зафиксирована ошибка ввода/вывода (а у ПК есть такая возможность достаточно проанализировать регистр состояния последовательного порта), то лучше привести и компьютер и микро-ЭВМ в исходное состояние, т. е. повторить инициализацию. Поэтому на диаграмме также присутствует и стрелка 3.

И, наконец, если компьютер получил от устройства все три символа, то он переходит в состояние анализа полученного значения - в состояние Received по стрелке 8.

Состояние Received

Тут компьютер проверяет полученные символы на принадлежность к диапазону «0»... «9», «А»...«Е». Если хотя бы один из них не попадает в указанный диапазон, то ПК в праве потребовать от микро-ЭВМ повтора посылки, что он и делает, отвечая символом NAK. Затем он возвращается в состояние Ready (стрелка 6).

Если же символы удовлетворяют наложенному ограничению на диапазон их значений, то компьютер подтверждает удачный прием значения, посылая в линию символ XOFF, и переходит на заключительную стадию приема значения. Это состояние Done, и переход в него обозначен стрелкой 7. В этом состоянии можно сохранить или отобразить полученное от устройства значение.

Предлагаю ознакомиться с аналогичными статьями: