СОВРЕМЕННАЯ ЭЛЕКТРОНИКА №4/2012
разрешения (т.е. установка приёмни ком линии RxD передатчика в низкий уровень) происходит где то в середине интервала передачи байта. Если пере датчик проверит свою линию RxD на предмет сброса разрешения (т.е. её пе реключения в низкий уровень), то этот факт для передатчика будет означать, что приёмник начал принимать пере даваемый байт и поэтому сбросил раз решение. Другими словами, дополни тельная проверка сброса разрешения позволяет передатчику определить, что приёмник работает правильно и переключает линию RxD передат чика из высокого уровня в низкий (и обратно). Следует отметить, что во время пе редачи байта, т.е. от начала старт бита и до конца последнего стоп бита, ни процессор передатчика, ни процессор приёмника не принимают никакого участия в непосредственном обмене данными, поскольку и в компьютере, и в микроконтроллере этим занимается UART, т.е. аппаратные средства. Поэто му все проверки состояния линий, переключения их из одного состо яния в другое, организация задержек и т.п. не оказывают влияния на ско рость передачи. Например, задержка в 25 мкс и проверка передатчиком сбро са разрешения проводятся во время пе редачи и приёма байта и не замедляют обмен. Если посмотреть ещё раз на вре менную диаграмму и осциллограммы (рис. 1 и 2 соответственно), то можно заметить, что график зависимости напряжения от времени на линии RxD представляет собой почти сим метричный меандр. Длительность им пульса составляет примерно полови ну времени передачи одного байта (при скорости обмена в 115 200 бод частота меандра составляет около 9 кГц – реальное значение часто ты отражено в правом верхнем углу рисунка 2 «8.87687kHz» и рисунка 3 «9.44705kHz»). Такой импульс легко воспринимается преобразователем интерфейса. Теперь несколько слов о том, каким образом компьютер может анализиро вать линию разрешения. Дело в том, что в интерфейсе RS 232 компьютера непосредственное чтение и анализ состояния самой линии RxD (т.е. лог. 1 или лог. 0) не предусмотрены. Но если соединить эту линию RxD с какой ли бо входной линией квитирования (например, DSR), состояние которой поддаётся чтению, можно считывать состояния линий DSR и RxD. Когда же линия RxD используется для передачи данных, состояние линии DSR не тре буется считывать и анализировать. На рисунке 1 это подчёркнуто обозначе нием RxD(DSR). Ф ОРМИРОВАНИЕ МАШИННОНЕЗАВИСИМЫХ ВРЕМЕННЫХ ЗАДЕРЖЕК Из рисунка 1 видно, что микрокон троллер формирует временную за держку, равную 25 мкс. Программиро вание такой временной задержки в микроконтроллере не представляет труда, поскольку всегда известна его тактовая частота. В компьютере для формирования короткой, аппаратно независимой задержки в Windows 98/XP ранее [1] автор использовал так называемый «счётчик производительности» – QueryPerformanceCounter, который постоянно работает с определённой частотой F – QueryPerformanceFre quency. Эта частота различается для ОС Windows 98 и Windows XP и со ставляет около 2 и 7 МГц соответ ственно (для компьютера на базе Intel P4/1,7 ГГц). Частота счёта жёстко привязана к временной базе систем ного таймера. Для получения необхо димой временной задержки точное значение частоты F выяснять не обя зательно – достаточно разделить эту частоту на 1 000 000, чтобы получить временную базу для счётчика в 1 мкс. Умножив это значение, например, на 25 и заставив счётчик считать до это го значения, можно получить аппа ратнонезависимую временную за держку в 25 мкс. Для получения временной задержки автор применил более простой способ. Он заключается в использовании до статочно стабильного по времени вы полнения команды ввода из порта RS 232, соответствующего регистру состо яния модема (адрес порта 3feh). С этой цельюна языке Clarion была написана нижеприведённая подпрограмма за держкиDEL, использующая ввод с пор та 3feh (который часто требуется ана лизировать): ! ! Подпрограмма задержки ! DEL routine loop 15 times !times=15,Tзад.=20мкс |times=20,Tзад.=26.6мкс A=INP(3feh) !times=75,Tзад.=100мкс |26.6/8.68 ≈ 3бита(115200 бод) . ! Вставив в программу меандра под программу DEL, автор проверил им пульсы осциллографом и был обрадо ван стабильностьюих длительности и чистотой фронтов. Подобный экспе римент был проведён, помимо Win dows XP, и в Windows 98, и даже в DOS. Для точной оценки длительности автором была написана программа на турбо бейсике DOS (TB.EXE фирмы Borland), mtimer.bas, предназначенная для определения числа N , записав ко торое в регистр cx процессора ком пьютера (счётчик цикла), можно по лучить задержку длительностью в 1 мс. Хотя операторы бейсика и не отлича ются высокой скоростью выполнения, в TB есть полезный оператор/функ ция – микротаймер (mtimer), исполь зующий аппаратный таймер компью тера и позволяющий оценить время выполнения какой либо программы или подпрограммы в микросекун дах. Как оператор, mtimer запускает аппаратный таймер компьютера, как ПРОГРАММИРОВАНИЕ 66 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 4 2012 Рис. 3. Осциллограмма приёма байта – символа 'Q' (уровни RS 232) а) развёртка 10 мкс/дел., б) развёртка 20 мкс/дел. а) б) © СТА-ПРЕСС
RkJQdWJsaXNoZXIy MTQ4NjUy