Вы находитесь на странице: 1из 80

НОВЫЕ ПРЕОБРАЗОВАТЕЛИ ИНТЕРФЕЙСА RS232

1
Что касается нестандартных преобразователей интерфейса RS232, то в дополнение к
уже описанным в первой части книги можно отнести новые КМОПтранзисторы с изоли
рованным затвором p и nпроводимости (например BS250, 2N7000 и др.), которые с ус
пехом могут служить приемниками RS232, т. к. их затвор (Uзи =±20 В) без какихлибо
дополнительных резисторов может непосредственно контактировать с выходными ли
ниями RS232 (±10 В).
Рассмотрим новые специализированные микросхемы преобразователей интерфейса
Аппаратные средства RS232 более подробно.

1.2.1. Новые специализированные микросхемы преобразователей


интерфейса RS232 интерфейса RS232
Кратко охарактеризуем свойства новых специализированных микросхем преобразовате
лей интерфейса RS232 (рис. 1.2.1).
1.1. Предварительные замечания
Основная цель настоящей главы — показать на примерах аппаратных средств сопряже
Рис. 1.2.1.
ния микроконтроллеров с компьютером возможности интерфейса RS232 для конструирова Специализированные
ния систем сбора и обработки информации, поступающей с различного рода датчиковпреоб микросхемы
разователей физической (измеряемой) величины в электрический сигнал. преобразователей
интерфейса RS232
В начале главы приводится описание новых специализированных микросхем преобра
зователей уровней интерфейса RS232 (±10 В÷±12 В) в TTL–уровни (±5 В÷±3 В) и обратно,
которые в настоящее время стали широко доступны (они не вошли в первую часть книги [4]).
Помимо специализированных микросхем преобразователей приводятся несколько приме
ров применения некоторых электронных компонентов, которые могут быть использованы в
качестве таких преобразователей (они также не вошли в [4]). Для гальванически развязан
ного интерфейса RS232 приводятся новые микросхемы гальванических развязок, среди ко
торых — совершенно новый тип развязок на основе использования свойств электромагнит
ного поля.
Для иллюстрации применения на практике новых преобразователей интерфейса RS232 во
второй части главы приводятся готовые схемные решения по сопряжению микроконтроллеров
с компьютером по этому интерфейсу. Эти схемы сопряжения в основном предназначены для
программирования микроконтроллеров, а для штатного режима их работы — только для тести
рования самого обмена по RS232. В свою очередь, на эти схемы сопряжения автор будет ссы
латься во второй главе, где будут приведены программные средства для обмена по RS232.

1.2. Новые преобразователи интерфейса RS232


Новые преобразователи интерфейса RS232 обладают несомненными преимуществами
(высокой скоростью обмена, малыми габаритами и потреблением энергии, а также достаточ
но низкой стоимостью) перед использующимися ранее, например: MAX318X, MAX3190,
ADM3202, MAX1406. Кроме того, переход на 3вольтовое питание, которое стало поддержи
ваться многими современными микроконтроллерами, позволил поновому подойти к исполь
зованию стандартных преобразователей интерфейса (например ADM231L).
Другой пример — двунаправленный преобразователь SN75155 (корпус DIP8), кото
рый давно уже не используется, также очень удобно применять в таких приложениях.

16 17
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 НОВЫЕ ПРЕОБРАЗОВАТЕЛИ ИНТЕРФЕЙСА RS232

Микросхема ADM3202 от ф. Analog Devises отличается высокой скоростью работы нала драйвера составляет ±10 В при работе на 2 входа приемника (т. е. на нагрузку в 2,5 кОм).
(до 460 кбод); емкости конденсаторов, требуемых для работы преобразователя, реаль Недостатками микросхемы являются стандартное (не пониженное) потребление энергии и не
но не превышают 0,1 мкФ; микросхема может работать и при Vcc=+3 В, и при Vcc=+5 В. возможность работы с микроконтроллером при питании его от +3 В (при 5вольтовом питании
Размах сигнала драйвера (передатчика) RS232 реально составляет ±10 В (Vcc=+5 В) и микроконтроллера микросхема работает идеально).
±6 В (Vcc=+3 В) при работе на нагрузку в 5 кОм. Сигнал очень чистый, без какихлибо па
разитных искажений. Кроме того, ADM3202 отличается пониженным потреблением 1.2.2. Нетрадиционные преобразователи интерфейса RS232
энергии (особенно при питании от +3 В).
Помимо специализированных микросхем преобразователей интерфейса RS232, о которых
Микросхема ADM231L этой же фирмы также реально работает на скорости 115 кбод
было рассказано выше, существуют электронные компоненты, вообще говоря, не являющимися
(в ее описании указывается, что максимальная скорость обмена составляет 230 кбод),
преобразователями, но которые можно использовать в качестве таких преобразователей. О неко
емкости конденсаторов не превышают 1,0 мкФ. Размах сигнала драйвера повышен и
торых таких компонентах было рассказано в первой части книги [4]. Ниже представлены компонен
составляет ±11,5 В при питании от первого источника питания V+=+12 В при работе на
ты, не вошедшие в первую часть книги. Это КМОПтранзисторы прямой (BS250 от ф. Vishay) и обрат
нагрузку 5 кОм. Уникальной особенностью микросхемы является независимость разма
ной (2N7000 от ф. Fairchild или Vishay) проводимости с изолированным затвором и КМОПкоммута
ха сигнала драйвера от напряжения второго источника питания Vcc, которое может быть
тор (DG419 от ф. Vishay).
и +3 В, и +5 В. Сигнал также имеет высокую чистоту без паразитных составляющих.
Кратко охарактеризуем их свойства, внутреннюю структуру и цоколевку.
ADM231L отличается пониженным потреблением энергии.
Микросхема MAX1406 от ф. MAXIM отличается высокой скоростью работы (до 230 кбод),
повышенным размахом сигнала драйвера (±11,5 В) при работе на нагрузку в 5 кОм, независи
мостью этого размаха от напряжения Vcc и высокой чистотой сигнала. Микросхема питается от
3 источников питания (V+=+12 В, V–=–12 В и Vcc=+3÷+5 В), в связи с чем она не содержит
преобразователей (удвоителей и инверторов напряжения, как, например, ADM3202 и
ADM231) и не требует большого количества конденсаторов для работы. Особенностью микрос Рис. 1.2.2.1.
хемы является наличие 3 приемников и 3 передатчиков, что, как будет видно из дальнейшего Нетрадиционные преобразователи интерфейса RS232
изложения, позволяет сопрячь с ее помощью компьютер с микроконтроллером (который может
Транзисторы выпускаются в корпусе TO92 (см. рис. 1.2.2.1). Сопротивление транзисторов
работать как в режиме программирования, так в штатном режиме) без какихлибо дополни
в открытом состоянии составляет около 10 Ом, максимальный ток стока — чуть более 200 мА,
тельных преобразователей интерфейса RS232. MAX1406 отличается пониженным потреблени
максимальное напряжение стокисток — не более 50÷60 В, время включения и выключения
ем энергии.
— около 10 нс, мощность рассеяния — около 0,5 Вт. Максимальное напряжение затвористок
Микросхема передатчика RS232 MAX3190 от ф. MAXIM отличается повышенной скоростью
(Uзи _max) составляет ±20 В. Последнее свойство позволяет подключать затвор транзистора
работы (до 460 кбод), имеет размах сигнала драйвера до ±10 В при работе на два входа прием
непосредственно к линиям RS232 (напомню, что сигнал передатчика RS232 составляет около
ников (т. е. на нагрузку в 2,5 кОм) при питающих напряжениях V+=+12 В и V–=–12 В. Кроме то
±10÷±12 В), в связи с чем транзисторы могут использоваться в качестве приемников RS232.
го, она потребляет очень мало энергии при работе и может быть переведена в режим сверхниз
Единственное, что необходимо предусмотреть, — это нагрузочный резистор номиналом в
кого потребления — в «спящий» режим. Особенностью микросхемы является уникально малый
5 кОм, который следует подключить между затвором и общим проводом («землей»), т. к. со
корпус SOT236 размером 3×3 мм.
противление (изолированного) затвора транзисторов составляет сотни MOм, а стандарт
Микросхемы приемников MAX3181 и MAX3183 от ф. MAXIM работают на сверхвысокой
RS232 предусматривает входное сопротивление приемника в 5 кOм.
скорости для интерфейса RS232 (до 1,5 Мбод), отличаются сверхнизким потреблением энер
гии и уникально малым корпусом SOT235 размером 3×3 мм. Микросхема MAX3181 являет
ся инвертирующим приемником, как и подавляющее большинство всех микросхем приемни
ков RS232, а MAX3183 — не инвертирующим, что является уникальным свойством, позволя
ющим, как будет видно из дальнейшего изложения, напрямую подключать к нему вход RST
микроконтроллера с активно низким уровнем (например P89LPC9XX).
И наконец последняя микросхема, которую хотелось бы представить, — это микросхема
SN75155 от ф. Texas Instruments, в которой в одном корпусе всего с 8 выводами (DIP8, SOIC8)
размещается и приемник, и передатчик. Микросхема не нова, однако мало где применяется и
особой популярностью не пользуется, а зря. Микросхема реально работает на высокой скорос а) б)
ти (115 кбод), требует всего 2 источников питания (V+=+12 В, V–=–12 В), т. к. источник пита
ния +5 В встроен. В связи с этим для ее работы не требуется дополнительных конденсаторов Рис. 1.2.2.2.
Схемы применения транзисторов 2N7000 и BS250 в качестве приемников
для инверторов и удвоителей напряжения (как, например, у ADM3202 и ADM231L). Размах сиг интерфейса RS232: инвертирующих (а) и неинвертирующих (б)

18 19
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕРЫ ПРИМЕНЕНИЯ НОВЫХ ПРЕОБРАЗОВАТЕЛЕЙ ДЛЯ СОПРЯЖЕНИЯ МИКРОКОНТРОЛЛЕРОВ С КОМПЬЮТЕРОМ ПО ИНТЕРФЕЙСУ RS232

Из приведенных вариантов использования КМОПтранзисторов 2N7000 и BS250 в каче На рис. 1.2.2.3 приведены примеры использования коммутатора DG419 в качестве пре
стве преобразователей интерфейса RS232 — инвертирующих и неинвертирующих приемни образователя интерфейса RS232 — приемника (инвертирующего и неинвертирующего) и пе
ков RS232 (рис. 1.2.2.2) — видно, что транзисторы могут использоваться в ключевом режиме редатчика (инвертирующего). Схемы достаточно просты и в комментариях не нуждаются.
как в схемах с общим истоком (классический ключ) — в таком режиме работают инвертирую
щие приемники, так и с общим стоком (истоковый повторитель) — в таком режиме работают
неинвертирующие приемники. Схемы достаточно просты и в особых комментариях не нужда
ются.
Проверка работы схем заключалась в подаче на затвор транзистора сигнала меандра
частотой 115 200 Гц, сформированного передатчиком микросхемы ADM3202, и наблюдении а) б)
выходного сигнала. Во всех случаях выходной сигнал представлял собой практически прямо
угольный меандр.
***
Рис.1.2.2.3.
Микросхема коммутатора DG419 выпускается в корпусе SOIC8 или DIP8. Напряжения питания Схемы применения коммутатора DG419 в качестве преобразователя
V+, V– и VL лежат в следующих пределах: V+=+10÷+15 В, V–=–10÷–15 В, VL=+3÷+5 В. Сопро интерфейса RS232: инвертирующего (а) и неинвертирующего (б)
приемника и инвертирующего передатчика (в)
тивление коммутатора в открытом состоянии составляет около 20 Ом. Коммутатор управляется нап в)
ряжением, поданным на его управляющий вход (вывод 6). При лог. 1 на управляющем входе выво
ды 1й и 8й замыкаются, на что указывает символ «1», стоящий над контактом 8. При лог. 0 замыка
Практическое применение как специализированных микросхем преобразователей
ются контакты, связанные с выводами 2м и 8м (при этом контакты 1й и 8й размыкаются).
RS232, так и нетрадиционных преобразователей, будет более понятно, когда будут рассмотре
Микросхема DG419 от ф. Vishay по своей структуре и функциям не отличается от микросхем
ны конкретные схемы сопряжения компьютера с микроконтроллерами.
ADG419 от ф. Analog Devices и DG419 от ф. MAXIM, приведенных в первой части книги [4].
Однако есть одно и очень существенное отличие в свойстве управляющего входа. Дело в том,
что коммутатор управляется сигналом, поданным на его управляющий вход (6й вывод), и этот
сигнал в коммутаторах ADG419 (Analog Devices) и DG419 (MAXIM) должен строго соответство
1.3. Примеры применения новых преобразователей
вать TTLуровню ( лог. 0 — от 0 до +0,8 В и лог. 1 — от +2,4 до +5 В при VL=+5 В, V–=–12 В, V+=+12 В). для сопряжения микроконтроллеров с компьютером
При подаче на этот вход управления сигнала ниже 0 В (например –10 В) эти две микросхемы ав по интерфейсу RS232
томатически коммутируют этот сигнал на «землю», т. к. оснащены входными диодами, защища
ющими вход управления от отрицательных напряжений (ниже 0 В). У микросхемы DG419 от 1.3.1. Предварительные замечания
ф. Vishay таких ограничительных диодов нет, поэтому при VL=+5 В уровень напряжения управ
ляющего сигнала Uупр. в состоянии лог. 0 должен находиться в пределах V–<Uупр.<0,8 В, а в Вначале несколько слов по поводу оценочных и «эволюционных» плат, мастерKIT'ов, эму
состоянии лог. 1 — в пределах +2,4 В<Uупр.<V+. Если V+=+12 В, а V–=–12 В, то при Uупр.=±10 В ляторовпрограмматоров и тому подобных устройств, предназначенных для «быстрой» раз
(уровни интерфейса RS232) микросхема прекрасно работает и выполняет свои функции. Кро работки аппаратных и программных средств на базе микроконтроллеров. Эти устройства вы
ме того, вход управления можно смело подключать напрямую к сигналам с уровнями пускаются либо самими производителями микроконтроллеров, либо «третьими» фирмами.
RS232, не боясь что вход будет «закорочен» на «землю». Разработчику любой системы, состоящей из компьютера и устройства связи с объектом (УСО),
Сопротивление открытого канала коммутатора DG419 Vishay (20 Ом) чуть больше, чем у сопряженного с ним по интерфейсу RS232, необходимо помнить следующие моменты по аппарат
DG419 MAXIM (4 Ом) и меньше, чем у ADG419 Analog Devices (35 Ом). Стоимость DG419 Vishay ным и программным средствам сопряжения вышеуказанных устройств с компьютером.
примерно в 2 раза меньше, чем ADG419 Analog Devices и примерно в 3 раза меньше чем DG419 Сначала об аппаратных средствах сопряжения предлагаемых устройств.
MAXIM. Таким образом, DG419 Vishay может работать приемником RS232. Единственно, Аппаратные средства сопряжения этих устройств имеют следующие особенности:
что необходимо предусмотреть — это нагрузочный резистор в 5 кОм (в соответствии со стан
дартом RS232), который необходимо подключить между управляющим входом и общим про  в подавляющем большинстве случаев схемы сопряжения не приводятся или приводят
водом («землей»), т. к. входное сопротивление микросхемы составляет несколько МОм (потреб ся с ошибками;
ление энергии DG419 сверхнизкое). На вход VL можно также подавать не только +5 В,  если схемы и приводятся, разработчик вынужден либо копировать их в своих разра
но и +3 В и даже меньше. При этом просто немного поменяется порог срабатывания. ботках (что не всегда приемлемо, т. к. элементная база, используемая в таких устрой
Кроме того, DG419 может работать и как передатчик RS232. В отличие от «родного» пере ствах, или безнадежно устарела, или, наоборот, состоит из микросхем, которые у нас
датчика, т. е. от специализированной микросхемы передатчика RS232, у DG419 более крутые труднодоступны), либо хотя бы следовать той логике сопряжения, которая приводится,
фронты (намного круче, чем 30 В/мкс). На расстояниях до 10÷15 м (расстояние от компьюте иначе поставляемое программное средство работать не будет, а вот логика сопряже
ра до микроконтроллера) это свойство ни к каким негативным результатам на приводит. ния у разработчика как раз таки должна быть своя;

20 21
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕРЫ ПРИМЕНЕНИЯ НОВЫХ ПРЕОБРАЗОВАТЕЛЕЙ ДЛЯ СОПРЯЖЕНИЯ МИКРОКОНТРОЛЛЕРОВ С КОМПЬЮТЕРОМ ПО ИНТЕРФЕЙСУ RS232

 часто приводимые аппаратные средства сопряжения очень громоздки и в них трудно ра бы побочным продуктом основной специализации. Поэтому автор с легким сердцем «отдает»
зобраться, а разбираться все равно необходимо, иначе, если собственная разработка рабо принципиальные схемы сопряжения и исходные тексты программ.
тать не будет, трудно, либо вообще невозможно, определить причину неисправности; Кроме того, приведенные в книге аппаратные и программные средства сопряжения между
 если схема сопряжения реализована даже по интерфейсу RS232, то различные микроконтроллером и компьютером по интерфейсу RS232 работают ничуть не хуже, а даже лучше
устройства поразному управляют состояниями микроконтроллера: одни, напри «фирменных», если, например, сравнивать не «красоту» и универсальность программных средств
мер, управляют выводом RST микроконтроллера от линии DTR RS232 компьютера, устройств (описанных выше), а характеристики их обмена с компьютером по RS232 — скорость,
другие используют линию RTS, третьи устанавливают микрокнопку, нажав на кото надежность обмена и простоту схемных решений. Все «фирменные» программные средства для
рую можно сформировать сигнал RST и «сбросить» микроконтроллер; иногда для нижеприведенных микроконтроллеров (кроме программных средств для микроконтроллеров от
сопряжения используется сразу два порта RS232 компьютера и т. п. ф. ATMEL) работают на скорости, не превышающей 38 400 бод, и даже на этой скорости програм
мы часто «зависают». Нельзя не убедиться еще и в том, насколько «фирменные» схемы сопряже
Программные средства сопряжения подобных устройств с компьютером по RS232 имеют
ния с компьютером громоздки и часто сконструированы на «допотопной» элементной базе.
еще больше недостатков:
Насколько же просты схемы сопряжения, предложенные автором, читатель сможет убедиться уже
 исходные тексты программ, естественно, не приводятся, а предлагаются уже готовые через несколько страниц. Кроме того, все без исключения аппаратные средства и поддерживаю
программы исполняемого формата (*.exe); щие их программные средства идеально работают на скорости обмена 115 200 бод (разумеется,
 программы используют драйверы, которые необходимо установить в компьютере и на более низких скоростях они также работают).
которые часто конфликтуют с другими программами; Теперь, когда, повозможности, все оговорки сделаны, перейдем к делу.
 скорость обмена по RS232 очень низкая (практически не более 9600 бод); при установ
ке более высокой скорости в подавляющем большинстве случаев обмен срывается. ***
В качестве иллюстраций, показывающих применение новых преобразователей на практи
Вышеуказанные недостатки аппаратных и программных средств сопряжения таких
ке, ниже приведены схемы сопряжения микроконтроллеров MSC121X (ф. Texas Instruments),
устройств не позволяют использовать их даже в достаточно простых разработках, а уж о
ADUC8XX (ф. Analog Devices), P89LPC9XX (ф. Philips semiconductor), AT89C51ED2 (ф. ATMEL) и
серьезных и говорить не приходится.
C8051FXXX (ф. Silicon Laboratories) с компьютером для целей программирования и штатного
Единственное преимущество таких устройств в том, что они позволяют быстро написать и
режима работы. Выбор именно этих микроконтроллеров обусловлен следующими причинами.
проверить работоспособность какойлибо программы для микроконтроллера. Но после этого,
Вопервых, эти микроконтроллеры поддерживают внутрисистемное программирование (ISP)
когда нужно уже разработать собственное аппаратное средство сопряжения для своей разра
и именно по интерфейсу RS232 (кроме C8051FXXX). Напомню, ISP — свойство микроконтролле
ботки и написать программы сопряжения и для микроконтроллера, и для компьютера (не по
ров, заключающееся в том, что загрузка программы в микроконтроллер происходит прямо на
тащишь же какуюлибо оценочную плату заказчику!), «эйфория» от быстрой разработки какой
том же устройстве (точнее — готовом изделии), которое предназначено для использования. Ес
либо программы для микроконтроллера очень скоро проходит, оценочная плата убирается «до
ли устройство (например система сбора) обменивается в процессе своей работы с компьютером
лучших времен», и разработчик вынужден делать все сам и с самого начала.
по интерфейсу RS232 и программируется по этому же интерфейсу в режиме ISP, то никаких до
Вот здесь, по мнению, автора, и могут пригодиться те примеры сопряжения микроконт
полнительных устройств, специально предназначенных для программирования микроконтрол
роллеров с компьютером по RS232, которые приводятся далее. Кроме того, автор «не броса
леров (программаторов, эмуляторовпрограмматоров и т. п.), не требуется.
ет» разработчика только на одних аппаратных средствах схем сопряжения. Для некоторых из
Следует отметить, что режим ISP микроконтроллеров не обязательно должен иметь интер
них во второй главе приводятся тексты программ (с комментариями) как для микроконтролле
фейс RS232. Существует микроконтроллеры, которые могут быть запрограммированы в режи
ра, так и для компьютера.
ме ISP и по другим интерфейсам. Например, микроконтроллеры AT89SXX (ф. ATMEL) поддер
И еще об одном. Вышеуказанные устройства с поддерживающим их программным обес
живают ISP по интерфейсу SPI; микроконтроллеры C8051FXXX (ф. Silicon Laboratories) —
печением, как уже говорилось, достаточно дoроги (десятки и сотни долларов); предлагаемые
по интерфейсу JTAG и C2 и т. п. Поскольку компьютер не имеет этих интерфейсов, необходимо
же автором схемы и программное обеспечение (исходные тексты программ — в книге, испол
приобретать дополнительные устройства, предназначенные для программирования микроко
няемые файлы — на сайте автора) совершенно бесплатны.
нтроллеров и использующие интерфейсы, имеющиеся у компьютера (USB, RS232, принтерный
И наконец последнее. Автор ни в коем случае не отговаривает разработчиков от приоб
параллельный порт). Стоимость таких устройств, как уже говорилась, весьма высока и может
ретения подобных устройств. В конце концов — это дело вкуса и средств. Цель настоящей кни
достигать десятков и сотен долларов.
ги — показать, каким образом сконструировать схемы сопряжения микроконтроллера и
Вовторых, 3 из отмеченных 5 семейств микроконтроллеров (MSC121X, ADUC8XX,
компьютера и написать соответствующее программное обеспечение, и не более того. Автор
P89LPC9XX), помимо ISP по RS232, обладают еще 2 свойствами, которые намного упрощают
никоим образом не специализируется на разработке, производстве и тем более — продаже
конструирование систем сбора на их основе: встроенные прецизионный системный таймер
устройств для программирования микроконтроллеров по интерфейсу RS232. Основная специ
(разрядностью 23÷24 бита) и АЦП (разрядностью 10÷24 бита).
ализация автора — разработка и производство компьютерных систем сбора на базе микро
Выбор микроконтроллера AT89C51ED2, не имеющего в своем составе ни аналогоцифрового
контроллера и компьютера. Проблема, затронутая автором в настоящей книге, является как
пребразователя, ни системного таймера, обусловлен более существенными причинами, чем нали

22 23
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕРЫ ПРИМЕНЕНИЯ НОВЫХ ПРЕОБРАЗОВАТЕЛЕЙ ДЛЯ СОПРЯЖЕНИЯ МИКРОКОНТРОЛЛЕРОВ С КОМПЬЮТЕРОМ ПО ИНТЕРФЕЙСУ RS232

чие этих 2 компонент. Эти причины будут приведены несколько позже, а сейчас несколько слов о Микросхем Σ∆АЦП существует великое множество. Один из них — ADS1210 от ф. BurrBrown
свойствах АЦП, требуемых для конструирования систем сбора. (вошедшей сейчас в ф. Texas Instruments). Этот АЦП показал уникальные результаты и использует
АЦП, который используется в системах сбора, по мнению автора, должен обладать следу ся в системах сбора, сконструированных автором, которые работают уже на протяжении многих
ющими свойствами: лет в нескольких организациях (см. приложение 2). Кроме того, микросхема ADS1210P имеет кор
пус DIP18 удобный для макетирования, что также является его несомненным достоинством.
 точность АЦП должна составлять не менее 16 разрядов,
К какому микроконтроллеру следует подключать такой АЦП? Естественно, к такому, кото
 АЦП должен быть оснащен самокалибровкой «нуля» и полной шкалы,
рый имеет ISP по RS232, обладает возможностью работы с периферийными устройствами по
 метод преобразования должен быть Σ∆, т. к. этот метод не может обойтись без
параллельной шине АДРЕС/ДАННЫЕ (т. е. имеет сигналы ALE, RD и WR), может работать от ис
встроенных цифровых фильтров, которые, помимо своей основной работы
точника питания в 3 и 5 В (т. к. некоторые периферийные устройства, например, таймеры
(фильтрации высокочастотного шума модулятора), прекрасно отфильтровывают и
82C54 работают только при питании 5 В); кроме того, хорошо бы, чтобы такой микроконтрол
низкочастотный шум, присутствующий в трактах измерений сигналов с датчиков.
лер имел бы корпус, удобный для макетирования (например PLCC). Вот здесь как раз и может
Кроме того, цифровой фильтр имеет полюс на частоте питающей сети 50 Гц зна
использоваться микроконтроллер AT89C51ED2 (обладающий всеми вышеперечисленными
чением до –|120÷150| дБ,
свойствами и многими не перечисленными выше).
 скорость АЦП одного канала должна составлять несколько сотен Гц (лучше не менее
В связи с вышеизложенным, автор счел необходимым включить в книгу рассмотрение
1000 Гц) при достаточно многоканальной системе сбора (8÷16 каналов), т. к. поми
сопряжения этого микроконтроллера с компьютером по интерфейсу RS232.
мо собственно аналогоцифрового преобразования АЦП должен еще проводить ка
Теперь несколько слов о микроконтроллерах семейств C8051FXXX от ф. Silicon Labortories
либровку «нуля», полной шкалы, устанавливать цифровой фильтр и, кроме того, «про
(в которую вошла бывшая ф. Cygnal). Автором были опробованы в работе и протестированы
пускать» однодва «холостых» преобразования перед тем, как осуществить рабочее
2 микроконтроллера этой фирмы: C8051F067 и C8051F330D. Почему были выбраны именно
преобразование (а каждое такое действие требует времени в 2÷3 раза больше, чем
эти микроконтроллеры?
собственно аналогоцифровое преобразование). В связи с этим нетрудно подсчитать,
Микроконтроллер C8051F067 имеет в своем составе сдвоенный высокоскоростной 16
что скорость получения рабочего аналогоцифрового преобразования одного канала
разрядный АЦП последовательных приближений («SAR», как его называют), который обладает
примерно на порядок меньше скорости работы самого Σ∆ АЦП (т. е. если частота АЦП
уникальным быстродействием (до 1 МГц), поэтому заманчиво было бы применить такой мик
1000 Гц, то частота рабочего аналогоцифрового преобразования одного канала бу
роконтроллер в системах сбора. Микроконтроллер расположен в корпусе TQFP64 (аналогич
дет составлять не более 100 Гц).
ном корпусу MSC1210). Для таких корпусов автором еще в [4] был предложен переходник
А теперь посмотрим, что мы имеем от встроенных АЦП трех вышеуказанных семейств мик TQFP64PGA64 для удобства ручного макетирования.
роконтроллеров. Микроконтроллер C8051F330D — относительно новый и является одним из всего 2 мик
АЦП микроконтроллеров семейств P89LPC9XX имеют точность только 10 разрядов, роконтроллеров семейства C8051FXXX, имеющих корпус DIP(20 или 24), пригодный для маке
не имеют ни калибровки нуля, ни полной шкалы, ни НЧфильтров, т. к. они являются не Σ∆, а тирования. Кроме того, этот микроконтроллер содержит в своем составе 10разрядный АЦП,
АЦП последовательных приближений. В связи с этим эти микроконтроллеры имеют очень который может быть сконфигурирован как АЦП с несколькими входами (до 16). (Есть, правда,
ограниченное применение в системах сбора. еще один микроконтроллер в корпусе DIP14 (C8051F300P), но у него только 8разрядный АЦП,
АЦП микроконтроллеров семейств MSC12XX хотя и являются Σ∆, но дают приемлемую точность и он относительно нераспространен.)
(около 14÷15 разрядов) на частоте не более 100 Гц, т. е. частота рабочего аналогоцифрового пре Оба микроконтроллера имеют ISP: C8051F067 — по интерфейсу JTAG, C8051F330D — по
образования одного канала составляет не более 10 Гц. В связи с этим эти микроконтроллеры могут интерфейсу C2. Тестирование проводилось с использованием USBDEBUGадаптера.
быть использованы в сравнительно малоканальных системах сбора (не более 2÷5 каналов). В этом При тестировании возникли проблемы, с которыми автор хотел бы поделиться с чи
случае общее время аналогоцифрового преобразования всех каналов будет составлять соответ тателем. Но вначале о проблемах, которые можно почерпнуть из самих описаний на микроко
ственно 2÷5 Гц. Поэтому если от системы сбора требуется оперативная информация каждые, напри нтроллеры (datasheet). Перечислим проблемы вместе с методами их «снятия».
мер, 0,1 с, а каналов 8÷16, то АЦП таких микроконтроллеров просто «не потянут» по скорости. Вопервых, для целей ISP требуется приобретать не оченьто дешевый USBDEBUGадап
АЦП микроконтроллеров семейств ADUC8XX еще медленнее (частота работы их АЦП тер (стоимостью около 2000 руб.).
около 70÷80 Гц). Поэтому они могут быть использованы в еще более «медленных» систе Вовторых, микроконтроллер C8051F067 не имеет средств работы с внешней па
мах сбора. Тем не менее семейства микроконтроллеров MSC12XX и ADUC8XX не следует мятью программ/данных (у него отсутствуют сигналы ALE, WR и RD) и поэтому не может ра
сбрасывать со счетов. ботать автоматически с периферийными устройствами (например с таймерами 82C54).
Что же делать, если требуется многоканальная система сбора (8÷16 каналов), а обнов Данная проблема в принципе легко снимается путем «ручного» программирования подоб
ление информации по АЦП должно проводиться, например, каждые 0,1 с? Ответ напрашива ного сопряжения, тем более что этот микроконтроллер довольно быстрый (инструкция вы
ется сам собой: либо использовать внешний достаточно быстрый Σ∆АЦП, который может полняется за 12 такта).
проводить аналогоцифровое преобразование с частотой не менее 1000 Гц, либо применять Втретьих, микроконтроллер не может работать напрямую с внешними устройствами,
микроконтроллер со встроенным достаточно быстрым АЦП. имеющими 5вольтовое питание (с теми же таймерами 82C54 и с другими устройствами),

24 25
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕРЫ ПРИМЕНЕНИЯ НОВЫХ ПРЕОБРАЗОВАТЕЛЕЙ ДЛЯ СОПРЯЖЕНИЯ МИКРОКОНТРОЛЛЕРОВ С КОМПЬЮТЕРОМ ПО ИНТЕРФЕЙСУ RS232

т. к. питание микроконтроллера производится от источника питания до 2,7÷3,6 В. Эта проб Если бы проблем было немного, то можно было бы вполне использовать микроконтролле
лема решается с помощью использования микросхем двунаправленных преобразователей ры семейств C8051FXX в системах сбора. Наличие же такого количества (хотя частично и «сни
уровней +3 В+5 В (например ADG3300 от ф. Analog Devices). маемых») неудобств делают использование этих микроконтроллеров в многоканальных, доста
Вчетвертых, и это уже существенно, SARАЦП не имеет низкочастотных фильтров. Эта точно универсальных системах сбора весьма проблематичным.
проблема может быть снята двумя способами: аппаратным (с помощью НЧфильтров на опе Тем не менее автор счел необходимым привести схему сопряжения микроконтроллеров
рационных усилителях либо пассивных, например LC или RC) или программным — с по семейств C8051FXX с компьютером по интерфейсу RS232 не для целей программирования,
мощью программирования цифровых фильтров непосредственно в микроконтроллере (при а только для штатного режима работы. Для целей программирования приведена схема соп
его быстродействии это вполне реально; в разделе «Применения» (Application) по этому ряжения этих микроконтроллеров с интерфейсами JTAG (C8051F067) и C2 (C8051F330)
микроконтролеру даже приводятся образцы подобных программ (см. www.silabs.com). USBDEBUGадаптера. В разделе, посвященном программному обеспечению, будут приве
Впятых, эти микроконтроллеры содержат так называемую матрицу соединений, разобрать дены программы обмена информацией с компьютером по интерфейсу RS232, использую
ся с которой не такто просто. Чтобы вывести, например, байт по интерфейсу RS232 нужно сделать щие аппаратную синхронизацию с помощью линий данных TxD и RxD для микроконтролле
массу манипуляций с этой матрицей (в качестве примера в разделе по программному обеспече ров C8051F330D и C8051F067. Надеюсь, эти схемы сопряжения будут интересны читателю,
нию приводятся 2 программы по выводу символа через интерфейс RS232). т. к. они позволяют, по крайней мере, отказаться от покупки дорогостоящих эволюционных
Вшестых (и это уже показало тестирование), все микроконтроллеры семейства или оценочных плат на эти микроконтроллеры (толку от которых, как уже указывалось, нем
C8051FXXX не позволяют управлять портами ввода/вывода, если они заняты альтернативны ного) и ограничиться только приобретением не такого уж дорогого (55–60 долл.) USB
ми функциями. В частности, если, например, выбраны 2 порта ввода/вывода для интерфейса DEBUGадаптера.
RS232 (p0.0TxD, p0.1RxD для микроконтроллера C8051F067 и p0.4TxD, p0.5RxD для микро
контроллера C8051F330D), т. е. выбраны альтернативные функции, то линией TxD для уста 1.3.2. Управление состояниями микроконтроллера
новки ее в произвольное состояние уже управлять нельзя (хорошо еще, что прочитать с помощью компьютера по интерфейсу RS232
состояние линии RXD можно). По этому выводу можно только передавать байты по RS232 Для запуска и внутрисистемного программирования (ISP) на определенные выводы мик
стандартным образом (из SBUF). Для управления этими линиями (т. е. для их установки в 0 или
роконтроллера необходимо подавать два управляющих сигнала. Первым таким выводом явля
1 необходимо отключить альтернативную функцию (в данном случае обмен по RS232). При
ется вход сброса (RESET–RST).
чем, эта функция отключается только одним битом, поэтому, например, нельзя отключить ли
Практически все микроконтроллеры (кстати сказать, и микропроцессоры) имеют вход
нию TxD (для управления, например, синхронизацией) и оставить линию RxD. Это очень суще
сброса (RST), который предназначен для полного сброса микроконтроллера и запуска его в
ственное упущение разработчиков этих микроконтроллеров, которое делает невозможным
работу. В подавляющем числе микроконтроллеров этот вход RST имеет активный высокий уро
(без дополнительных аппаратных средств) обмен по RS232 между микроконтроллерами и
вень, т. е. если подать на вход RST уровень лог. 1, то микроконтроллер будет сброшен и оста
компьютером с помощью нового алгоритма, разработанного автором. Напомню, что подоб
новлен. При подаче на вход RST лог. 0 микроконтроллер включается в работу — «запускается».
ный алгоритм обмена заключается в аппаратной синхронизации каждого байта, но не линия
У микроконтроллеров семейств MSC121X, ADUC8XX и AT89C51ED2(RD2) вход RST как раз и
ми квитирования DTRDSR или RTSCTS, а линиями данных TxD и RxD (более подробно об этом
является таковым, т. е. имеет активный высокий уровень.
алгоритме обмена можно прочитать в [4] и в разделе по программному обеспечению в насто
Семейства же P89LPC9XX и C8051FXXX отличаются тем, что вход RST у них имеет активно
ящей книге). Данная проблема может быть решена аппаратным способом следующим образом.
Предположим, нужно управлять линией TxD (т. е. устанавливать ее в 0 или 1) и одновре низкий уровень, т. е. подача на вход RST лог. 0 останавливает и сбрасывает эти микроконтрол
менно использовать ее в качестве вывода байта по RS232. Если взять дополнительный вывод леры, а подача лог. 1 — запускает.
микроконтроллера, управлять которым разрешено матрицей соединений, и подключить его к Помимо уровня сигналов, вывод RST характеризуется еще и тем, что это именно вход,
одному из входов элемента И, а ко второму — вывод микроконтроллера TxD, то на выходе та т. е. он предназначен для того, чтобы им управлять извне. Как правило, если RST имеет ак
кого элемента И можно получить требуемое (далее будет приведена подобная схема). тивный высокий уровень, то в микроконтроллере он соединен с внутренним подтягиваю
Другое решением этой проблемы — отказаться от такого алгоритма обмена вообще и исполь щим резистором номиналом в несколько сот кOм, подключенным к общему проводу («зем
зовать программную синхронизацию (например известный алгоритм XonXoff). ле»). Так, например, значение этого подтягивающего резистора в микроконтроллерах
И наконец вседьмых: корпус TQFP64 очень неудобен для макетирования. Решение MSC12XX составляет около 500 кOм, в ADUC8XX — около 100 кOм. Если же RST имеет ак
этой проблемы — в использовании платыпереходника, разработанного автором для мик тивный низкий уровень, то подтягивающий резистор подключен к шине питания. Напри
роконтроллеров MSC12XX, имеющих такой же тип корпуса. Но попробуйте вручную распа мер, в микроконтроллерах P89LPC9XX значение этого подтягивающего резистора, подклю
ять корпус с 64 ножками, расстояния между которыми составляет всего 0,5 мм, а ширина ченного к шине питания, составляет около 20 кOм.
ножки — 0,3 мм! Хотя это и возможно, но является не такойто уж простой задачей. Забе Кроме того, поскольку вывод RST является входом, его можно либо непосредственно со
гая немного вперед, отметим, что далее в книге приведены фотографии подобных платпе единять с шиной питания или общим проводом, либо управлять им двухтактным сигналом
реходников с уже распаянными на них микроконтроллерами. В этом смысле гораздо удоб (который имеют все современные микросхемы (логики) и который еще называют пушпульным
нее использовать корпус PLCC68 (как, например, у AT89C51ED2). — от английских слов «push» и «pull»).

26 27
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕРЫ ПРИМЕНЕНИЯ НОВЫХ ПРЕОБРАЗОВАТЕЛЕЙ ДЛЯ СОПРЯЖЕНИЯ МИКРОКОНТРОЛЛЕРОВ С КОМПЬЮТЕРОМ ПО ИНТЕРФЕЙСУ RS232

Необходимо отметить, что вывод RST в микроконтроллере является основным. Это озна значение регистра управления 3fch равно 0, то линии DTR и RTS сброшены, т. е. находятся в
чает, что он используется как при запуске и сбросе микроконтроллера, так и при его програм состоянии лог. 0 и (обe) имеют потенциалы в –10 В. Записав, например, в порт 3fch
мировании. единицу, получим: DTR=+10 В, RTS=–10 В.
При программировании микроконтроллера по ISP (по RS232) используется еще один до Начальные состояния линий DTR и RТS — сброшенные, т. е. при включении компьютера
полнительный вывод, при подаче на который определенного сигнала микроконтроллер пере и загрузке в него той или иной операционной системы DTR=RTS=–10 В.
водится в режим программирования. Иногда этот сигнал используется не самостоятельно, а Для управления выводами RST и PSEN семейств микроконтроллеров MSC12XX, ADUC8XX
совместно с сигналом, поданным на вывод RST (т. е. перевод микроконтроллера в режим ISP и AT89C51ED2(RD2) и выводами RST и Vdd семейств микроконтроллеров P89LPC9XX и
производится путем манипулирования уровнями и длительностью обоих сигналов). C8051FXXX (только RST) можно (и нужно) использовать сигналы линий DTR и RTS. Причем при
В микроконтроллерах MSC12XX, ADUC8XX и AT89C51ED2(RD2) таким вторым выводом составлении схем сопряжения необходимо «подгадать» таким образом, чтобы при включении
является вывод PSEN, одно из назначений которого — управлять микросхемами внешней компьютера все (из рассматриваемых) микроконтроллеры находились в состоянии сброса,
памяти программ. В этом случае вывод PSEN является уже не входом, а выходом, т. е. он вывод PSEN у семейств MSC12XX, ADUC8XX и AT89C51ED2 находился бы в состоянии лог. 1
«сам» подает определенные сигналы на упомянутые микросхемы. В этих трех семействах (штатный режим работы), а питание (вывод Vdd) у семейств P89LPC9XX было бы включено
микроконтроллеров вывод PSEN соединен с внутренним подтягивающим резистором номи (также штатный режим).
налом около 10 кOм, подключенным к шине питания. Свойство PSEN являться выходом Для управления выводом RST лучше всего использовать сигнал DTR (т. к. для управле
не позволяет ни непосредственно соединять его с шиной питания или общим проводом, ни ния им используется самый младший бит регистра управления), а для PSEN или Vdd — сиг
управлять им двухтактным сигналом (в некоторых случаях, когда двухтактный сигнал не нал RTS.
очень мощный, т. е. когда ток такого сигнала не превышает нескольких мА в состоянии лог. 0 Тогда, например, для запуска микроконтроллеров достаточно записать в регистр 3fch
и 1÷2 мА в состоянии лог. 1, такое управление допускается). Для подачи на этот вывод единицу. И вообще, для манипулирования выводами RST, PSEN или Vdd достаточно записы
уровня лог. 0 необходимо к нему подключить резистор номиналом в 1 кOм, соединенный вать в регистр управления ту или иную комбинацию из нулей и единиц (а их, понятно, четыре:
с «землей». Для подачи уровня лог. 1 вывод PSEN можно либо просто оставить свободным в двоичном виде — 00; 01; 10 и 11, в шестнадцатеричном — 0; 1; 2 и 3).
(напомню, что у него есть собственный подтягивающий к шине питания резистор), либо со Итак, подытожим все вышесказанное по поводу управления состояниями микроконтрол
единить с шиной питания через высокоомный резистор. Для соблюдения необходимых вре леров с помощью интерфейса RS232 компьютера.
менных соотношений (иногда с точностью до 1 мкс) при манипулировании сигналом на вы 1. В начальном состоянии интерфейса RS232 (линии DTR и RТS сброшены, т. е. находятся
воде PSEN этот высокоомный резистор не должен превышать 10÷100 кOм, чтобы не затя под потенциалами в –10 В) микроконтроллеры должны находиться в сброшенном сос
гивать длительности фронтов и спадов (свыше, например, 1 мкс). В идеале резистор должен тоянии (RST микроконтроллеров семейств MSC12XX, ADUC8XX и AT89C51ED2(RD2)
быть около 10 кOм. Для перевода микроконтроллеров семейств MSC12XX, ADUC8XX и должен быть в состоянии лог. 1, т. е. под потенциалом питания (3 или 5 В), а RST
AT89C51ED2(RD2) в режим ISP вывод PSEN должен находиться в состоянии лог. 0. В штат семейств микроконтроллеров P89LPC9XX и C8051FXXX — в состоянии лог. 0, т. е. под
ном режиме работы PSEN должен оставаться в лог. 1.
потенциалом в 0 В.
В микроконтроллерах семейства P89LPC9XX вторым выводом, предназначенным для
Кроме того, вывод PSEN микроконтроллеров семейств MSC12XX, ADUC8XX и
перевода микроконтроллера в режим программирования, является вывод питания Vdd.
AT89C51ED2(RD2) должен быть в состоянии лог. 1, т. е., например, подключаться
В связи с тем, что потребление тока у этих микроконтроллеров достаточно низкое (не бо
к шине питания через резистор номиналом в 10 кОм, а питание (вывод Vdd) семейств
лее 3 мА), этим выводом можно легко манипулировать обычным двухтактным сигналом,
микроконтроллеров P89LPC9XX должно быть включено. Такое состояние микроконт
либо оставлять свободным или соединять непосредственно с общим проводом (выклю
роллеров является состоянием сброса. Оно должно предшествовать запуску микроко
чать), либо подключать к шине питания (включать). Необходимо только помнить, что подк
нтроллеров в работу.
лючение к шине питания должно осуществляться с помощью электронного компонента с
2. Для запуска микроконтроллеров в штатный режим работы линию DTR необходимо
достаточно низким сопротивлением (несколько Ом), чтобы напряжение питания остава
установить в состояние лог. 1 (+10 В). При этом вывод RST микроконтроллеров
лось в норме (около 3 В). Для таких целей идеально подходят обычные маломощные KMOП
семейств MSC12XX, ADUC8XX и AT89C51ED2(RD2) должен установиться в состояние
транзисторы (например, BS250 или 2N7000, о которых было упомянуто ранее). Можно так
лог. 0 (0 В), а вывод RST микроконтроллеров семейств P89LPC9XX и C8051FXXX — в состо
же использовать коммутатор DG419.
яние лог. 1 (+3 В). Кроме того, вывод PSEN микроконтроллеров семейств MSC12XX,
Поскольку микроконтроллеры семейства C8051FXX не используют интерфейс RS232
ADUC8XX и AT89C51ED2(RD2) должен оставаться в состоянии лог. 1, т. е. оставаться
для целей ISP (для этих целей используются два интерфейса: C2 или JTAG), по интерфейсу
подключенным к шине питания через резистор номиналом в 10 кОм, а питание микро
RS232 можно управлять только их выводом RST — для сброса и запуска.
контроллеров семейств P89LPC9XX должно оставаться включенным (Vdd=+3 В).
Теперь несколько слов об управляющих сигналах в интерфейсе RS232 компьютера.
3. Для остановки микроконтроллеров их состояние, а также состояние линий DTR и RTS,
Напомню (см. приложение 1), что порт RS232 (например COM 1) компьютера имеет только
должно соответствовать п. 1 (состоянию сброса).
2 выходных линии (DTR и RTS), состояниями сигналов на которых можно управлять
программно, записывая необходимые биты в порт управления с адресом 3fch. Причем 0й 4. Переключение микроконтроллеров в состояние программирования должно осу
бит управляет состоянием сигнала на линии DTR, а 1й бит — на линии RTS. Если, например, ществляться путем манипулирования сигналами DTR и RTS. Эти сигналы, в свою

28 29
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕРЫ ПРИМЕНЕНИЯ НОВЫХ ПРЕОБРАЗОВАТЕЛЕЙ ДЛЯ СОПРЯЖЕНИЯ МИКРОКОНТРОЛЛЕРОВ С КОМПЬЮТЕРОМ ПО ИНТЕРФЕЙСУ RS232

очередь, должны управлять сигналами на выводах RST, PSEN и Vdd соответству Схема (рис. 1.3.3.1,б) может быть использована, если приемник RS232 либо занят други
ющих микроконтроллеров согласно их спецификации программирования в ре ми функциями, либо отсутствует вовсе.
жиме ISP, т. е. устанавливать на выводах микроконтроллеров соответствующие На рис. 1.3.3.2 показаны две альтернативные схемы формирования сигнала PSEN. Схема
потенциалы согласно приведенным в описаниях на микроконтроллеры времен вверху (а) более предпочтительна, т. к. сигнал PSEN, сформированный ею, более помехозащи
ным диаграммам. щен; кроме того, эта схема имеет более высокое быстродействие. Оба эти свойства определя
Перевод микроконтроллеров в режим ISP должен осуществляться из состояния ются тем, что, с одной стороны, сигнал PSEN (в одном из состояний) соединен с резистором но
сброса (п. 1). миналом в 10 кOм, с другой — высоким быстродействием коммутатора DG419. Схема внизу
Таким образом, схемы формирования соответствующих сигналов на выводах микро (б) более дешева, но менее «поворотлива», т. к. резистор 100 кOм несколько затягивает вре
контроллеров с помощью линий управления DTR и RTS и сами схемы сопряжения микро мя спада сигнала. Обе схемы удовлетворяют условиям пп. 1÷4 (1.3.2).
контроллеров с компьютером должны быть составлены так, чтобы удовлетворялись все
4 пункта. 1.3.4. Схемы формирования сигналов RST и Vdd
для микроконтроллеров семейств P89LPC9XX и C8051FXXX
1.3.3. Схемы формирования сигналов RST и PSEN для микроконтроллеров На рис. 1.3.4.1 приведены две альтернативные схемы управления сигналом на выводе
семейств MSC12XX, ADUC8XX и AT8951ED2(RD2) RST (для P89LPC9XX и C8051FXXX), а на рис. 1.3.4.2 — две альтернативные схемы управления
Свойства приведенных ранее сигналом Vdd микроконтроллеров семейств P89LPC9XX. Принципы их функционирования дос
Рис. 1.3.3.1. таточно просты, а достоинства и недостатки сводятся к следующему.
Схемы формирования сигнала RST
КМОПтранзисторов и микросхемы
DG419 являться приемниками RS232 Рис. 1.3.4.1.
могут быть использованы в практичес Схемы формирования сигнала RST
ких приложениях для формирования сиг
налов запуска и остановки микроконт
роллеров, а также для программирова
ния микроконтроллеров в режиме ISP.
На рис. 1.3.3.1,а приведены 2 аль
тернативные схемы управления сиг
налом на выводе RST, а на рис. 1.3.3.2
— 2 альтернативные схемы управле
ния сигналом PSEN микроконтролле
Рис. 1.3.3.2. ров семейств MSC12XX, ADUC8XX и
AT89C51ED2(RD2). Принципы их функ Рис. 1.3.4.2.
Схемы формирования сигнала RSEN Две схемы (рис. 1.3.4.1,а) на базе
ционирования достаточно просты и в Схемы формирования сигнала Vdd
КМОПтранзисторов обратной (2N7000) и
комментариях не нуждаются, а досто прямой (BS250) проводимости имеют дос
инства и недостатки сводятся к следу таточное быстродействие, очень просты,
ющему. дешевы, но потребляют ток около 3 мА (ко
На рис. 1.3.3.1,а показана одна из торый проходит через резистор R1 при
альтернативных схем управления сигна включении транзистора). Эти схемы могут
лом RST с помощью сигнала DTR. Из схе быть рекомендованы, если нет ограниче
мы видно, что для формирования сигна ний на потребляемую энергию.
ла RST в соответствии с пп. 1÷4 (см. Схема внизу (рис. 1.3.4.1,б) имеет бо
п. 1.3.2) достаточно сигнал DTR «пропус лее высокое быстродействие, практически
тить» через стандартный приемник не потребляет энергии, т. к. выходной сиг
RS232, обладающий инвертирующими нал (RST) двухтактный, но несколько громоздка и дорога.
свойствами и имеющий двухтактный вы Схема, показанная на рис. 1.3.4.2,а, обладает достаточным быстродействием, очень прос
ход. Эта схема наиболее проста, не со та и дешева, имеет низкое сопротивление при включении питания (менее 10 Ом), но и повы
держит ни одного дополнительного ком шенное потребление энергии, т. к. резистор R2 параллелен нагрузке (а это вход Vdd микроко
понента и рекомендуется к применению. нтроллера) и через него проходит дополнительный ток в 3 мА. При необходимости резистор R2

30 31
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕРЫ ПРИМЕНЕНИЯ НОВЫХ ПРЕОБРАЗОВАТЕЛЕЙ ДЛЯ СОПРЯЖЕНИЯ МИКРОКОНТРОЛЛЕРОВ С КОМПЬЮТЕРОМ ПО ИНТЕРФЕЙСУ RS232

можно удалить; в этом случае нагрузкой схемы будет сам микроконтроллер, ток потребления
которого в активном режиме составляет не менее 3 мА. Однако если микроконтроллер будет Рис. 1.3.5.1.
Схема сопряжения микроконтроллеров семейства MSC12XX
переведен в «спящий» режим, его ток потребления намного снизится; это приведет к соответ с компьютером по интерфейсу RS232 для целей программи!
ствующему увеличению внутреннего сопротивления (которое в этом случае может составить рования в режиме ISP и штатного режима работы
десятки KOм), что, в свою очередь, может привести к значительному затягиванию времени
включения и выключения транзистора Т1.
Все же схема (рис. 1.3.4.2,а) может быть рекомендована к применению, т. к. манипуляция
с включением и выключением питания микроконтроллера (Vdd) в основном используется для
его программирования (в режиме ISP). В штатном же режиме работы микроконтроллера его
питание Vdd должно быть всегда включено (независимо от того, в каком состоянии находится
вывод RST).
Схема, показанная на рис. 1.3.4.2,б, имеет высокое быстродействие, низкое потреб
ление энергии и не зависит от потребления тока микроконтроллером. Схема более дорога
и громоздка. Сопротивление в открытом состоянии коммутатора (20 Ом) в два раза выше,
чем у транзистора на схеме вверху (рис. 1.3.4.2,а). Эта схема может быть рекомендована
к применению, если есть ограничение на потребляемую энергию.
***
Теперь читателю, «вооруженному» вышеизложенной информацией по поводу всех этих сиг
налов RST, PSEN и Vdd (если, конечно, он все внимательно прочитал и понял), а также достаточ
но подробными описаниями схем, которые их формируют, на взгляд автора, не составит боль
шого труда понять конкретные схемы сопряжения микроконтроллеров с компьютером, пред
назначенные как для штатного режима их работы, так и для программирования в режиме ISP.
Рассмотрим далее конкретные схемы сопряжения.

1.3.5. Сопряжение микроконтроллеров семейства MSC12XX


с компьютером
Рассмотрим схему сопряжения микроконтроллеров семейства MSC12XX с компьютером
по интерфейсу RS232 для целей ISP и штатного режима работы (рис. 1.3.5.1).
Как видим, для формирования сигнала RST используется приемник RS232 (13–12–й выводы
преобразователя ADM3202), на вход которого подается сигнал с линии DTR, а для формирования сиг
нала PSEN — коммутатор DG419, на вход управления (6й вывод) которого подается сигнал с линии
RTS. Сравнив схемы формирования сигналов RST и PSEN на рис. 1.3.5.1 с ранее обсуждавшимися
схемами (см. рис. 1.3.3.1,а и 1.3.3.2, а–б соответственно) можно заметить, что они идентичны.
Обмен сигналами платы с линиями интерфейса RS232 осуществляется через разъем
IDC10P (X1).
На плате предусмотрен 2контактный разъем (P1), на который подается внешнее питание
+3,3 В. Для индикации включения питания можно использовать светодиод (LD1 и R5).
Для работы микроконтроллера используется кварцевый резонатор Z1, снабженный дву
мя конденсаторами C6 и C7. Вывод EA микроконтроллера установлен в высокий уровень с по
мощью резистора R4.
Можно заключить, что эта схема (рис. 1.3.5.1) достаточно проста (на нее в дальнейшем бу
дем ссылаться, когда речь пойдет о программном обеспечении обмена информации компью
тера с микроконтроллером по RS232).
На рис. 1.3.5.1 можно заметить еще один 6контактный разъем IDC6P (X2), к которому
подключены источник питания +3,3 В, «земля» и четыре сигнала: VddT, RSTT, PDA и PCL, кото

32 33
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕРЫ ПРИМЕНЕНИЯ НОВЫХ ПРЕОБРАЗОВАТЕЛЕЙ ДЛЯ СОПРЯЖЕНИЯ МИКРОКОНТРОЛЛЕРОВ С КОМПЬЮТЕРОМ ПО ИНТЕРФЕЙСУ RS232

рые подаются на разъем соответственно с выводов P1.0, P1.1, P1.2 и P1.3 микроконтроллера. 1.3.6. Сопряжение микроконтроллеров семейства ADUC8XX
Этот разъем и соответствующие сигналы предназначены для программирования микроконт с компьютером
роллеров семейства P89LPC9XX в режиме внутрисхемного программирования (ICP) с помощью
микроконтроллера MSC1210. Более подробно — см. далее (1.3.7). Рассмотрим схему сопряжения микроконтроллеров семейства ADUC8XX с компьютером
Схема (рис. 1.3.5.1) вручную смакетирована на плате (рис. 1.3.5.2). Микроконтроллер по интерфейсу RS232 для целей ISP и штатного режима работы (рис. 1.3.6.1). Из схемы видно,
MSC1210 распаен на платепереходнике (вариант еe разводки приведен в [4], a внешний вид Рис. 1.3.6.1.
— на рис. 1.3.5.3), которая вставлена в панельку PGA64. Забегая немного вперед, отметим, Схема сопряжения микроконтроллеров семей!
что на этой же фотографии можно увидеть еще одну панельку PGA64 (показанную нижней ства ADUC8XX с компьютером по интерфейсу
RS232 для целей программирования в режиме ISP
стрелкой), в которую вставляется платапереходник с микроконтроллером ADUC847. Разъем и штатного режима работы
IDC6 (X2 на рис. 1.3.5.1) для подключения кабеля сопряжения с платой ICP микроконтролеров
Р89LPC9XX на фотографии (рис. 1.3.5.2) показан верхней стрелкой.

Рис. 1.3.5.2.
Фотография
макетной платы
схемы сопряжения для
микроконтроллера
MSC1210

Рис. 1.3.5.3.
Фотография платы!
переходника для
микроконтроллера
MSC1210 (корпус TQFP64)

34 35
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕРЫ ПРИМЕНЕНИЯ НОВЫХ ПРЕОБРАЗОВАТЕЛЕЙ ДЛЯ СОПРЯЖЕНИЯ МИКРОКОНТРОЛЛЕРОВ С КОМПЬЮТЕРОМ ПО ИНТЕРФЕЙСУ RS232

что по формированию сигналов RST и PSEN схема сопряжения микроконтроллеров семейств Рис. 1.3.6.4.
ADUC8XX полностью аналогична схеме для микроконтроллеров семейств MSC12XX, поэтому Фотография платы!
подробно останавливаться на ней не будем. Отметим только, что на эту схему будем ссылаться переходника для
микроконтроллера
при обсуждении поддерживающего ее программного обеспечения. ADUC834
На рис. 1.3.6.2 показана та же макетная плата (что и на рис. 1.3.5.2), но уже со вставлен
ной платойпереходником с микроконтроллером ADUC847; внешний вид платыпереходника с
микроконтроллером ADUC847 показан на рис. 1.3.6.3, с микроконтроллером ADUC834 — на
рис. 1.3.6.4.

Рис. 1.3.6.2.
Фотография макетной
платы схемы сопряжения
микроконтроллера ADUC847

1.3.7. Сопряжение микроконтроллеров AT89C51ED2(RD2)


с компьютером
Из приведенной на рис. 1.3.7.1 схемы сопряжения микроконтроллеров семейства
AT89C51ED2/RD2 с компьютером по интерфейсу RS232 для целей ISP и штатного режима работы
видно, что по формированию сигналов RST и PSEN она полностью аналогична схеме для мик
Рис. 1.3.6.3. роконтроллеров семейств MSC12XX, поэтому подробно останавливаться на ней не будем. От
Фотография метим только, что на эту схему мы будем ссылаться при обсуждении поддерживающего ее
платы!переходника
для микроконтроллера программного обеспечения.
ADUC847 Фотография макетной платы схемы сопряжения микроконтроллера AT89C51ED2 с компь
ютером по интерфейсу RS232 для целей программирования в режиме ISP и штатного режима
работы приведена на с. 39 (рис. 1.3.7.2).

1.3.8. Сопряжение микроконтроллеров семейств P89LPC9XX


с компьютером
Микроконтроллеры семейства P89LPC9XX разработаны всего 2–3 года назад
(2002–2003 г.) и продолжают пополняться новыми микросхемами. Отличительная особен
ность этих микроконтроллеров в том, что некоторые из них (например, P89LPC93XX) имеют 2
возможности внутрисистемного программирования (ISP): 1я — по интерфейсу RS232 (назы
ваемая в описании собственно ISP), 2я — по синхронному 2проводному скоростному после
довательному интерфейсу типа C2. В описании для избежания путаницы программирование
по этому интерфейсу называют ICP — InCircuitProgramming (внутрисхемным программирова
нием). Этот интерфейс состоит всего из 2 сигналов: PDA — DATA (данные — входные и выход
ные) и PCL — CLock (синхросигнала, стробирующего данные). Этот интерфейс чемто напоми

36 37
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕРЫ ПРИМЕНЕНИЯ НОВЫХ ПРЕОБРАЗОВАТЕЛЕЙ ДЛЯ СОПРЯЖЕНИЯ МИКРОКОНТРОЛЛЕРОВ С КОМПЬЮТЕРОМ ПО ИНТЕРФЕЙСУ RS232

Рис. 1.3.7.2
Рис. 1.3.7.1. Фотография макетной
Схема сопряжения мик! платы схемы
роконтроллеров семей! сопряжения
ства AT89C51ED2/RD2 микроконтроллера
с компьютером AT89C51ED2
по интерфейсу RS232 с компьютером
для целей программиро! по интерфейсу RS232
вания в режиме ISP для целей ISP и
и штатного штатного режима
режима работы работы

 Вопервых, хотя микроконтроллеры семейств P89LPC90X и «маленькие», они об


ладают уникальными свойствами, среди которых: очень высокое быстродей
ствие (2 такта на цикл); встроенный 10разрядный АЦП (P89LPC904); встроен
ный 24разрядный системный таймер; возможность настроить выходной сигнал
с порта на три типа выхода: стандартный, двухтактный (пушпульный) и с открытым
стоком; кроме того, это семейство микроконтроллеров отличается крошечными
габаритами (в SOIC корпусах) и потребляет уникально мало энергии (буквы LP — Low Power
в названии микроконтроллера отражают это свойство).
 Вовторых, более мощные микроконтроллеры семейства P89LPC9XX, помимо интер
фейса RS232 для ISP, имеют такoй же интерфейс (C2), и грех было бы не запрограм
мировать микроконтроллер по такому интерфейсу, тем более что возможности прог
раммирования этих микроконтроллеров в режиме ICP гораздо шире, чем в режиме
ISP (см. описание на ICP и ISP для микроконтроллеров семейств P89LPC9XX).
 Втретьих (и это основная причина), на примере программирования микроконтроллеров
нает интерфейс SPI (разница в том, что в SPI входные (MISO) и выходные (MOSI) данные «раз семейства P89LPC9XX в режиме ICP с помощью микроконтроллера, сопряженного с
несены») и в точности соответствует синхронному режиму работы UART 51совместимого мик компьютером по интерфейсу RS232 (например того же P89LPC938 или MSC1210), авто
роконтроллера. Такой интерфейс (C2) имеют все микроконтроллеры семейства P89LPC9XX ром будут продемонстрированы свойства нового алгоритма обмена по интерфейсу
(кроме P89LPC932). Справедливости ради отметим, что микроконтроллеры семейств RS232 уже для практических целей.
ADUC8XX и MSC12XX также снабжены подобным интерфейсом, но информация о нем для этих Этот алгоритм разработан автором и приведен в первой части книги [4]. Его основное свой
микроконтроллерах закрыта и предназначена для коммерческих эмуляторовпрограммато ство заключается в синхронизации каждого байта аппаратным способом, но не с помощью ли
ров. Такой же интерфейс имеют некоторые микроконтроллеры C8051FXX (например ний квитирования DTRDSR или RTSCTS (стандартного аппаратного способа), а с помощью ли
C8051F330) от ф. Silicon Laboratories (информация открыта). Программирование некоторых ний данных TxD и RxD. В отличие от известного программного способа синхронизации XONXOFF
«маленьких» (8ножечных) микроконтроллеров от ф. Philips (P89LPC90X) возможно только в (он также производится с помощью линий данных TxD и RxD) аппаратный способ синхрониза
режиме ICP, т. е. только по такому же интерфейсу (C2). И хотя подобный интерфейс непосред ции обладает несомненным преимуществом. Это преимущество заключается в высокой надеж
ственно никак не связан с интерфейсом RS232, автор счел необходимым привести пример ности обмена, что особенно важно на больших скоростях (например, 115 200 бод). Недостаток
программирования микроконтроллеров P89LPC9XX в режиме ICP по 3 причинам. стандартного аппаратного способа синхронизации обмена по интерфейсу RS232 состоит в необ

38 39
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕРЫ ПРИМЕНЕНИЯ НОВЫХ ПРЕОБРАЗОВАТЕЛЕЙ ДЛЯ СОПРЯЖЕНИЯ МИКРОКОНТРОЛЛЕРОВ С КОМПЬЮТЕРОМ ПО ИНТЕРФЕЙСУ RS232

ходимости использования самих линий квитирова Для формирования сигнала питания Vdd используется сигнал RTS, который напрямую по
ния (DTRDSR или RTSCTS). Использовать же ли дается на затвор такого же транзистора (Т1). Сток транзистора T1 соединен с выводом Vdd
нии квитирования нежелательно по двум причи микроконтроллера. Ранее уже обсуждались 2 вышеуказанные схемы формирования сигналов
нам: вопервых, при сопряжении микроконтролле RST и Vdd (см. рис. 1.3.4.1,а и 1.3.4.2,а), поэтому не должно возникнуть какихлибо неяснос
ра с компьютером линии квитирования заняты и тей или затруднений в понятии принципа их функционирования.
используются для других целей (см. 1.3.2, Остальные два передатчика и приемник преобразователя ADM231L используются для сопря
пп. 1÷4), вовторых, даже безотносительно к то жения линий данных микроконтроллера TXDM и RXDM с линиями данных TxD и RxD и линией кви
му, заняты ли линии квитирования или нет, для тирования DSR интерфейса RS232. Для питания преобразователя ADM231L (V+) используется нап
синхронизации они должны использоваться, а это ряжение +12 В; вывод Vcc подключен к источнику питания +3,3 В. Такое использование преобра
дополнительные провода. Если осуществляется зователя позволяет получить с выходoв передатчиков сигналы (RxD и DSR) с размахом в ±11,5 В,
сопряжение компьютера с микроконтроллером что почти в 6 раз (!) больше размаха сигнала передатчика (TxDM) микроконтроллера (0÷+3,3 В).
с использованием общей «земли», т. е. они Приемник преобразователя формирует сигнал RXDM с размахом 0÷+3,3 В из сигнала TxD RS232
связаны гальванически , то лишние 2 провода осо с размахом около ±10 В. Максимальная скорость обмена преобразователя ADM231L составляет
бого значения не имеют (хотя и это не всегда так). около 230 кбод, поэтому на скорости в 115 200 бод он работает безукоризненно.
Но если для связи используются гальванически В качестве источника питания +3,3 В используется малопотребляющий стабилизатор
развязанный интерфейс RS232 (о гальванических LP2950Z3.3 (DA1).
развязках речь будет идти впереди), то для каждой Для программирования микроконтроллеров семейств P89LPC9XX в режиме ICP с помощью
линии квитирования необходима своя гальвани микроконтроллера P89LPC938 на плате предусмотрен 6–контактный разъем типа IDC6 (X2), на
ческая развязка; в этом случае схема сопряжения который подаются сигналы PDA и PCL (обсуждавшиеся ранее), сигнал VddT, предназначенный
микроконтроллера с компьютером значительно для управления включением/выключением питания Vdd программируемого микроконтролле
усложняется. Использование же линий данных ра, и сигнал RSTT, предназначенный для управления его выводом RST. Все 4 сигнала (PDA, PCL,
(TxD и RxD) для аппаратной синхронизации с одной VddT и RSTT) формируются микроконтроллером P89LPC938 (DD2).
стороны не требует дополнительных проводов Кроме сигналов управления, на разъем X2 подается питание (+3,3 В, контакт № 3) и «зем
(в т. ч. гальванических развязок) при осуществле ля» (контакт № 1).
нии обмена данными, с другой — позволяет произ На этой схеме можно заметить «маленький» микроконтроллер P89LPC904 (DD3), кото
водить обмен с теми же надежностью и скоростью, рый сопряжен с компьютером аналогично микроконтроллеру P89LPC938 (DD2). Это сдела
свойственными аппаратному способу синхрониза но с целью проверки на работоспособность записанной в него тестовой программы обмена
ции. Более подробно о самом алгоритме аппарат по RS232. Микроконтроллер P89LPC938 (DD2) установлен в панельку PLCC28, а микроконт
ной синхронизации обмена написано в [4]; кроме роллер P89LPC904 — в панельку DIP8. Сигналы с линий интерфейса RS232 подаются
того, необходимые подробные пояснения будут на плату через разъем IDC10 (X1).
также даны, когда будут рассматриваться програм Из схемы сопряжения микроконтроллеров P89LPC938 и P89LPC904 с интерфейсом C2
мы обмена, использующие такую аппаратную синх (рис. 1.3.8.2), предназначенной для программирования микроконтроллеров в режиме ICP,
ронизацию с помощью линий данных TxD и RxD. видно, что сигналы с линий интерфейса C2 (PCL, PDA, RSTT), а также питания (+3,3 В)
Вышеуказанные 3 причины и привели к и «земли» с разъема IDC6P (X1), попадают на соответствующие им выводы микроконтрол
необходимости конструирования автором двух
следующих макетных плат (рис. 1.3.8.1 и 1.3.8.2). Рис. 1.3.8.2.
Как можно увидеть из схемы сопряжения Схема платы ICP
микроконтроллера P89LPC938 с компьютером для микроконтрол!
леров P89LPC93X
по интерфейсу RS232 (рис. 1.3.8.1), для формиро и P89LPC90X
Рис. 1.3.8.1. вания сигнала RST используется интерфейсный
Схема сопряжения микроконтроллера P89LPC938
с компьютером по интерфейсу RS232 для целей
сигнал DTR, который, «пройдя» через приемник
программирования в режиме ISP и штатного режима работы. микросхемы преобразователя ADM231L (DD1,
(Штатный режим работы P89LPC938 может быть выводы 9,10), попадает на затвор КМОПтран
использован для программирования микроконтроллеров
семейств P89LPC9XX в режиме ICP (плата ICP)
зистора прямой проводимости BS250 (T2). Сток
транзистора соединен с выводом RST микроконт
роллера P89LPC938 (DD2).

40 41
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕРЫ ПРИМЕНЕНИЯ НОВЫХ ПРЕОБРАЗОВАТЕЛЕЙ ДЛЯ СОПРЯЖЕНИЯ МИКРОКОНТРОЛЛЕРОВ С КОМПЬЮТЕРОМ ПО ИНТЕРФЕЙСУ RS232

леров P89LPC938 и P89LPC904, расположенных в панельках (PLCC28 и DIP8 соответствен


но). Сигнал управления включением/выключением питания (VddT) с 5го контакта разъема X1
попадает на затвор КМОПтранзистора прямой проводимости BS250 (T1). На стоке транзисто
ра формируется сигнал питания Vdd, который подается на соответствующие выводы микроко
нтроллеров. Простота схемы очевидна.
Кабель сопряжения платы ISP с платой ICP (рис. 1.3.8.3) представляет собой обычный
плоский 6жильный кабель длиной 10÷15 см, «защелкнутый» на концах разъемами IDC6M. Рис. 1.3.8.5.
Общий вид платы ISP
Рис. 1.3.8.3. микроконтроллера
Схема кабеля связи MSC12XX, сопряженной
платы ISP с платой ICP кабелем связи с платой
ICP для микроконтролле!
ров семейств P89LPC9XX
(плата показана в прямо!
На рис. 1.3.8.4 показаны фотографии общего вида двух плат, сопряженных между собой угольнике, очерченном
пунктиром)
кабелем связи. Здесь необходимо добавить следующее. Плата ICP для P89LPC9XX может ис
пользоваться совместно как с вышеописанной платой ISP для P89LPC93X, так и с другими
микроконтроллерами. Если, например, разработчик имеет дело с микроконтроллерами се
мейства MSC12XX, и ему необходимо запрограммировать микроконтроллер семейства
P89LPC9XX, то на макетной плате, на которой установлен, например, микроконтроллер
MSC1210 достаточно установить разъем IDC6P (X2 на рис. 1.3.5.1) и соединить соответству 1.3.9. Сопряжение микроконтроллеров семейств C8051FXXX
ющие сигналы разъема с портами микроконтроллера MSC1210 (см. схему на рис. 1.3.5.1). с компьютером
Далее соединить обе платы кабелем связи (по рис. 1.3.8.3). В этом случае необходимость в
макетной плате ISP (рис. 1.3.8.1) отпадает. Для программирования микроконтроллеров C8051F067 и C8051F330D с компьюте
ром в режиме ISP и штатном режиме работы (рис. 1.3.9.1) используется USBDEBUG
адаптер, который сопряжен с микроконтроллером C8051F067 по интерфейсу JTAG, а с
микроконтроллером C8051F330D — по интерфейсу C2. С компьютером USBDEBUG
адаптер сопрягается по интерфейсу USB. Кроме того, микроконтроллеры сопряжены с
компьютером еще и по интерфейсу RS232, который предназначен только для штатного
режима их работы.
Рис. 1.3.8.4.
Фотография плат: Сопряжение микроконтроллеров с USBDEBUGадаптером организовано следую
а — ICP для микроконт! щим образом.
роллеров P89LPC93X На плате установлен 10контактный разъем IDC10P — X2(JTAG/C2), к которому
и P89LPC90X;
б — ISP для микроконт! подключается ответный разъем IDC10M, расположенный на конце кабеля сопряжения
роллеров семейств USBDEBUGадаптера с микроконтроллерами. На разъем X2(JTAG/C2) из USBDEBUG
P89LPC93X адаптера приходят следующие сигналы: TCK/C2DAT (4й контакт), TMS (5й контакт), TDO
(Эти две платы условно
разделены пунктиром.) (6й контакт) и TDI/C2CK (7й контакт). Контакты 2, 3 и 9 — «земляные», а 1, 8 и 10 не
а) б)
используются.
На плате расположены три 3штырьковых разъема: P1, P2 и P3, на каждом из кото
На рис. 1.3.8.5 показан общий вид платы ISP для микроконтроллера MSC12XX, сопряжен рых присутствует снимаемая двухконтактная перемычка (джампер, как его сейчас назы
ной с платой ICP для микроконтроллеров семейств P89LPC9XX кабелем связи. На схемы плат вают), предназначенная для переключения режима работы USBDEBUGадаптера.
ISP и ICP в дальнейшем мы будем ссылаться при обсуждении программных средствах для мик При замыкании контактов 2–3 на всех 3 разъемах (P1, P2 и P3) организуется режим
роконтроллеров семейств P89LPC9XX. Кроме того, будут приведены программы для микроко работы по интерфейсу JTAG, предназначенному для программирования микроконтрол
нтроллера MSC1210 (для него самого — программа для микроконтроллера и для его сопряже лера C8051F067. При этом сигнал TCK/C2DAT с разъема X2(JTAG/C2) попадает на ли
ния с компьютером по интерфейсу RS232 — программа для компьютера), с помощью которых нию (связь) TCK67, сигнал TMS — на TMS67 и сигнал TDI/C2CK — на TDI67. Необходи
можно запрограммировать микроконтроллеры семейства P89LPC9XX в режиме ICP непосре мо отметить, что линия TCK67 содержит подтягивающий к шине питания резистор R5.
дственно с компьютера. Кроме того, сигнал TDO с разъема X2(JTAG/C2) напрямую (без переключения) попадает
на линию (связь) TDO67.

42 43
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕРЫ ПРИМЕНЕНИЯ НОВЫХ ПРЕОБРАЗОВАТЕЛЕЙ ДЛЯ СОПРЯЖЕНИЯ МИКРОКОНТРОЛЛЕРОВ С КОМПЬЮТЕРОМ ПО ИНТЕРФЕЙСУ RS232

попадает на линию (связь) RSTM. Линия RSTM соединена с выводом RST/C2CK микроконт
роллера C8051F330D и выводом RST микроконтроллера C8051F067.
Таким образом, при выборе микроконтроллера C8051F330D (соединении контактов 1–2
разъемов P1, P2 и P3) сигнал TDI/C2CK с разъема X2(JTAGC2) попадает на вход RST/C2CK
микроконтроллера C8051F330D. При выборе же микроконтроллера C8051F067 (соединении
контактов 2–3 разъемов P1, P2 и P3) вывод RST микроконтроллера оказывается подключен
ным к шине питания через подтягивающий резистор R4 (что и требуется для его режима
программирования).
При соединении джампером контактов 1 и 2 разъема P4 организуется штатный
режим работы микроконтроллеров. В этом случае сигнал с линии RST попадает на линию
RSTM — входы RESET обоих микроконтроллеров (вход RST микроконтроллера C8051F067 и
вход RST/C2K микроконтроллера C8051F330D). Как видно из схемы, этот сигнал RST форми
руется на стоке КМОПтранзистора Т1 (2N7000) с помощью сигнала DTR интерфейса RS232 и
приемника RS232 (9й и 10й выводы преобразователя ADM231LDD1) (подобная схема фор
мирования сигнала RST обсуждалась ранее (см. рис. 1.3.4.1,а), на базе транзистора 2N7000).
При работе в штатном режиме USBDEBUGадаптер физически может не отключаться (т. е.
его разъем IDC10M может оставаться подключенным к разъему IDC10P — X2(JTAG/C2), одна
ко программно он должен быть отключен. Для этого в программном обеспечении работы
USBDEBUGадаптера (IDE) необходимо выбрать и установить опцию отключения (Disconnect).
Нельзя не отметить достаточную надежность интерфейсов JTAG и C2 USBDEBUGадапте
ра, а также разнообразие функций программного обеспечения (IDE) и удобство работы с ним.
Необходимо только помнить, что на плату (рис. 1.3.9.1) можно устанавливать только
один из двух микроконтроллеров: либо C8051F067, либо C8051F330D. Причем, установка
того или иного микроконтроллера должна производиться при отключенном питании и (жела
тельно) при отключенных кабелях интерфейсов RS232 и JTAG/C2. Ни в коем случае нельзя
вставлять оба микроконтроллера и включать питание и кабели интерфейсов. В этом случае
можно испортить микроконтроллеры, USBDEBUGадаптер или интерфейс RS232 COM
порта компьютера.
Теперь о сопряжении микроконтроллеров с интерфейсом RS232 компьютера для работы
в штатном режиме. Как видно из схемы (рис. 1.3.9.1) интерфейс организован аналогично схе
Рис. 1.3.9.1 Линии TCK67, TMS67, TDI67 и TDO67 подключены соответственно к выводам TCK, TMS, мам, приведенным ранее и предназначенным для других микроконтроллеров. Но есть и неко
Схема сопряжения
микроконтролле! TDI и TDO микроконтроллера C8051F067. Таким образом и организуется сопряжение USB торые отличия.
ров C8051F067 DEBUGадаптера с микроконтроллером C8051F067. Сигнал с линии TxD интерфейса RS232 компьютера поступает на вход приемника
и C8051F330D При замыкании контактов 1–2 на всех 3 разъемах (P1, P2 и P3) организуется ре преобразователя ADM231L (DD1) — выводы 5 и 6. На выходе приемника формируется
с компьютером
для программиро! жим работы по интерфейсу C2, предназначенному для программирования микроконт сигнал RXDM, который по одноименной связи попадает на входы приемников RS232—
вания в режимах роллера C8051F330D. При этом из 2 сигналов (TCK/C2DAT и TDO), поступающих с разъ P0.1/RxD0 и P0.5/RxD соответственно микроконтроллеров C8051F067 и C8051F330D.
ISP и штатном ема X2(JTAG/C2) соответственно на 2е контакты разъемов P1 и P2, с помощью резис Здесь ничего нового нет, и эта связь (т. е. передача информации от компьютера к микро
тора R3 формируется один сигнал C2D. Этот сигнал по одноименной линии (C2D) попа контроллеру) ничем не отличается от всех предыдущих схем. Передача информации в об
дает на вход P2.0/C2D микроконтроллера C8051F330D. Сигнал TDI/C2CK, поступаю ратную сторону (т. е. от микроконтроллера к компьютеру) организована иначе и нуждает
щий с разъема X2(JTAG/C2) на 2й контакт разъема P3, попадает на линию (связь) ся в некотором пояснении.
RST/C2CLK. Дело в том, что, как уже было упомянуто, все микроконтроллеры семейства C8051XXX
Для переключения режимов работы обоих микроконтроллеров (программирова не позволяют использовать вывод порта, занятый альтернативной функцией, как
ние/штатный режим работы) на плате предусмотрен 3контактный разъем P4, также снабжен стандартный выход порта, если эта функция задействована (включена). Применитель
ный джампером. но к линии TxD микроконтроллера это означает, что при установке бита разрешения использо
При соединении джампером контактов 2 и 3 разъема P4 организуется режим вания интерфейса RS232 (битa UARTenable) вывод TxD уже нельзя устанавливать в произ
программирования. При этом сигнал RST/C2CLK, поступающий с разъема P3 на разъем P4, вольное состояние программно. Другими словами, команды Си (TXD=0 или TXD=1) или коман

44 45
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕРЫ ПРИМЕНЕНИЯ НОВЫХ ПРЕОБРАЗОВАТЕЛЕЙ ДЛЯ СОПРЯЖЕНИЯ МИКРОКОНТРОЛЛЕРОВ С КОМПЬЮТЕРОМ ПО ИНТЕРФЕЙСУ RS232

ды ассемблера (setb TxD или clr TxD) не дадут никакого эффекта: сигнал порта останется в ще использовать обычную микросхему 2входового элемента И (2И) (например SN74HC08) в
состоянии лог. 1. Сигнал на линии TxD будет изменяться, только если стандартным образом DIPкорпусе либо элемент 2И–НЕ с последующим инвертированием. У автора «под рукой» ока
вывести какойлибо байт (например латинскую букву «A») по RS232 (на Си — SBUF=0x41, на залась подобная микросхема, правда, с триггером Шмитта (уж он «картину не испортит») —
ассемблере — mov SBUF, #41h). Это очень серьезное упущение фирмы Cygnal. SN74HC132, которая и приведена на схеме (рис. 1.3.9.1).
Похожее свойство, но диаметрально противоположное существует в интерфейсе RS232 Для индикации работы схема оснащена светодиодом LD1. Схема питается напряже
компьютера. Там нельзя прочитать состояние линии RxD интерфейса (лог. 1 или лог. 0), нием +12 В, которое подается на двухконтактный разъем P5 и непосредственно под
поэтому для обеспечения аппаратной синхронизации линиями данных (об этом уже не раз упо ключается к преобразователю ADM231L. Остальные компоненты схемы питаются напря
миналось) линию RxD в интерфейсе компьютера необходимо соединить с какойлибо входной жением +3,3 В, для чего в схеме предусмотрен стабилизатор LP2950Z3.3 (DA1). Анало
линией квитирования (например с DSR). В этом случае, прочитав состояние линии DSR, мож говое питание микроконтроллера C8051F067 (+3,3 А) соединяется с цифровым (+3,3) в
но получить состояние линии RxD. одной точке перемычкой, обозначенной резистором R6 номиналом 0 Ом. Аналогично с
Если посмотреть на практически любую предыдущую схему сопряжения микроконтролле помощью перемычки R7 соединяется аналоговая и цифровая «земля» этого микроконт
ра с интерфейсом RS232 (в т. ч. на рис. 1.3.9.1), то можно заметить, что линия TxDM подклю роллера.
чена сразу ко входам 2 передатчиков преобразователя RS232 (7й, 4й и 8й, 11й выводы Остальные элементы схемы, по мнению автора, в комментариях не нуждаются.
микросхемы D1), выход одного из которых подключен к линии RxD, а выход второго — к линии На эту схему (рис. 1.3.9.1) в дальнейшем будем ссылаться при обсуждении поддерживаю
DSR). Этим и обеспечивается возможность чтения состояния линии RxD. Кстати, состояние ли щего ее программного обеспечения.
нии RxD микроконтроллеров семейства C8051FXXX, слава богу, прочитать можно независимо Необходимо добавить, что существует вариант микросхемы микроконтроллера
от того, выбран ли UART или нет. Хоть здесь не возникает проблем. C8051F330 в корпусе DIP24. Такая микросхема имеет маркировку C8051F330P. По внутрен
Необходимо отметить, что возможность управления состоянием линии TxD программно ней структуре эта микросхема полностью идентична микросхеме C8051F330D (DIP20) и отли
присутствует во всех встречавшихся автору микроконтроллерах (кроме C8051FXXX). чается от нее только разводкой выводов (рис. 1.3.9.2). При этом дополнительные 4 вывода в
Поскольку программным способом данную проблему не решить, необходимо приме микросхеме C8051F330P не используются (NC).
нить аппаратные средства. Для этого вспомним, что исходное состояние линии TxD мик
Рис. 1.3.9.2
роконтроллера перед передачей байта и конечное ее состояние после окончания переда
Разводка выводов («цоколевка»)
чи байта — единичное (лог. 1). Передача начинается со стартового бита (лог. 0), затем
микроконтроллера C8051F330P
следуют биты данных; заканчивается передача стоповыми битами (лог. 1). Таким обра
зом, передача байта осуществляется (в том числе) «нулями». Если использовать еще одну
линию микроконтроллера в качестве линии TxD*, то, подключив обе линии к 2входовому
элементу «ИЛИ по нулям», на выходе такого элемента можно получить требуемое: при лог. 1
на выходе TxD (т. е. в отсутствии передачи байта), управляя линией TxD*, можно получить
на выходе такого элемента точную копию состояния линии TxD*. С другой стороны, при
лог. 1 на линии TxD* при передаче байта по линии TxD на выходе этого же 2входового
элемента получим точную копию состояния линии TxD (т. е. передача байта будет происхо
дить стандартным образом). На фотографии макетной платы схемы сопряжения микроконтроллеров C8051F067
Из теории конечных автоматов известно, что 2входовый элемент ИЛИ, управляемый ну и C8051F330D с компьютером (рис. 1.3.9.3) верхней большой стрелкой показаны три 3контакт
левыми (инверсными) уровнями, преобразуется (конвертируется) в 2входовый элемент И. ных разъема (P1, P2 и P3 схемы), служащие для переключения режима JTAGC2, нижней большой
Это свойство отображено на рис. 1.3.9.1 в рамке, очерченной пунктиром, на примере 2вхо стрелкой — 3контактный разъем P4, переключающий режим работы платы: программирова
дового элемента И микросхемы 74AHC1G08. Решение излагаемой проблемы представлено ние/работа. Верхней маленькой стрелкой показан микроконтроллер C8051F330P (DIP24), ниж
верхним 2входовым элементом И, к одному из входов которого подключены «родные» сигна ней — C8051F330D (DIP20). Эти два микроконтроллера не впаены в плату, а просто поставлены
лы TxD (TxD067 и TxD330), а к другому — дополнительные TxD* (Tx0067 и Tx0330), обозначен на нее для демонстрации. Установка микроконтроллеров производится в панельку DIP24.
ные так соответственно для микроконтроллеров C8051F067 и C8051F330D. Сигнал TxD067 Микроконтроллер C8051F330D (DIP20) вставляется в панельку DIP24 таким образом, чтобы 1й
по одноименной линии подключен к выводу P0.0/TxD0, сигнал Tx0067 — к выводу P0.2 мик вывод микроконтроллера попал во 2й контакт панельки, т. е. она устанавливается в середину
роконтроллера C8051F067. Сигнал TxD330 подключен к выводу P0.4/TxD и сигнал Tx0330 — панельки. В этом случае выводы микроконтроллера как раз попадают в те контакты панельки,
к выводу P1.7 микроконтроллера C8051F330D. Выход элемента 2И — сигнал TxDM, который которые используются в схеме (рис. 1.3.9.1).
проходит по одноименной линии и попадает на входы двух передатчиков преобразователя Микроконтроллер C8051F067 вставлен в панельку PGA64.
ADM231L (DD1). На рис. 1.3.9.4 приведена фотография платыпереходника TQFP64PGA64 с распаенным
Если требуется сверхминиатюризация, то можно, конечно, использовать микросхему на ней микроконтроллером C8051F067.
74AHC1G08, т. к. она имеет миниатюрный корпус SOT235. Но для целей макетирования про

46 47
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ГАЛЬВАНИЧЕСКИЕ РАЗВЯЗКИ ДЛЯ ИНТЕРФЕЙСА RS232

Рис. 1.3.9.3.
Фотография Рис. 1.3.10.
макетной платы Схема кабеля связи
схемы сопряжения микроконтроллеров
микроконтроллеров с компьютером
C8051F067
и C8051F330D
с компьютером

1.4. Гальванические развязки для интерфейса RS232


Рис. 1.3.9.4
Фотография платы! Гальванически изолированный интерфейс RS232 применяется во многих устройствах, где
переходника по тем или иным причинам либо нежелательно, либо просто невозможно (или опасно) соеди
TQFP64!PGA64 нять напрямую общие цепи «земли» и питания компьютера и самого устройства.
с микроконтроллером
C8051F067 Выражение «нежелательно» означает, например, что соединять можно, и компьютер или
устройство не выйдет из строя от такого соединения, но устройство будет работать либо некорре
ктно, либо с большими сбоями (это не касается сбоев передачи по интерфейсу RS232).
Например, если в устройстве применяется микроконтроллер с высокоточным (точнее — высоко
чувствительным) АЦП, и это устройство соединяется с компьютером по интерфейсу RS232 напря
мую, то такой АЦП может легко «ловить» шумы компьютера, в котором их масса, и передавать
в этот компьютер вместо полезного значения измеряемой величины — шум. При этом передача
информации по самому интерфейсу будет проходить совершенно без сбоев, и ни устройство,
ни компьютер от такого соединения не пострадают. Применительно к системам сбора и обработ
ки информации, получаемой с датчиков (а именно на такие применения микроконтроллеров ори
ентирована настоящая книга), это означает, что такие системы обязательно должны иметь
гальванически изолированный интерфейс RS232.
Выражения же «невозможно» или «опасно» означают, что при соединении компьютера с
устройством по интерфейсу RS232 без гальванической изоляции может выйти из строя либо
само устройство, либо компьютер. Если, например, устройство находится под достаточно высо
ким потенциалом по отношению к компьютеру (несколько сот либо даже тысяч вольт), то напря
мую соединять устройство с компьютером по интерфейсу RS232 просто нельзя. Причем боль
шая разность потенциалов может иметь место либо по необходимости (например, устройство
напрямую контактирует с пантографом электровоза, находящегося под напряжением в 5000 В
1.3.10. Кабель связи микроконтроллеров с компьютером относительно «земли»), либо разность потенциалов может возникнуть не специально (напри
Все 5 макетных плат с микроконтроллерами семейств MSC12XX (рис. 1.3.5.1), ADUC8XX мер, компьютер оснащен монитором с ЭЛТ, не заземлен, и на мониторе постепенно накаплива
(рис. 1.3.6.1), P89LPC93X (рис. 1.3.7.1), AT89C51ED2 (рис. 1.3.8.1) и C8051F067/330D (рис. ется высокий электростатический заряд). Часто гальваническую изоляцию осуществляют для
1.3.9.1) для сопряжения с компьютером по интерфейсу RS232 используют один и тот же ка обеспечения искробезопасности. Например, требуется периодический съем информации с
бель (рис. 1.3.10), который представляет собой обычный плоский 10жильный кабель длиной устройства измерения расхода газа (например пропанбутана), которое находится в его атмос
1÷1,5 м, «защелкнутый» с одного конца на 10контактный разъем IDC10M и распаенный с фере. Прямое подключение, а особенно отключение интерфейса (вообще любой разрыв кон
другого — на стандартный 9контактный разъем DB9M, использующийся в компьютерах для тактов) может привести к возникновению искры и, в конечном итоге, — к взрыву.
подключения к COMпорту (RS232). Показывать схему этого кабеля на всех 5 схемах автор Традиционный способ осуществления гальванической развязки — использование оптро
счел лишним. нов. Широко известны недостатки оптронов, которые уже «навязли в зубах», — это низкая ско

48 49
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ГАЛЬВАНИЧЕСКИЕ РАЗВЯЗКИ ДЛЯ ИНТЕРФЕЙСА RS232

рость обмена, большие токи включения и потребления, необходимость в дополнительных резис SN75155); она в несколько раз больше, чем требуется для питания стандартных преобразова
торах (для включения светодиода оптрона и для подтяжки выхода к питанию), частые сбои в ра телей RS232 и на порядок (а то и на два) больше, чем требуется для питания современных пре
боте, высокая стоимость скоростных оптронов и т. п. С этими недостатками так или иначе «сми образователей интерфейса RS232. В связи с этим о питании гальванических развязок для ин
рялись», поскольку все равно ничего другого до последнего времени придумано не было (если терфейса RS232 от самих линий этого интерфейса наконец можно забыть. Во всяком случае,
не считать емкостные развязки типа ISO150 от ф. BurrBrown (TI) стоимостью около 15 долл.). все дальнейшее изложение будет посвящено гальваническим развязкам с питанием от
И вот, наконец, появилась возможность отказаться от использования оптронов. На этот DCDCпреобразователей. Преимущества таких развязок (применительно к интерфейсу
раз отличилась ф. Analog Devices. Она выпустила уникальные по своим свойствам гальвани RS232) заключаются в следующем:
ческие развязки семейства iCoupler. Эти одно и многоканальные развязки (ADUM120X) ис  повышенная надежность работы, поскольку размах сигнала на линии RxD компьюте
пользуют совершенно иной принцип передачи информации, чем, например, оптроны или ем ра может достигать ±10 В и более, т. к. передатчик берет энергию от отдельного источ
костные развязки типа ISO150 ф. BurrBrown (TI). В развязках ADUM120X информация пере ника питания;
дается посредством высокочастотного магнитного поля, как в трансформаторных связях. Уни  длина кабеля связи может достигать 10÷15 м;
кальность их в том, что эти устройства работают на скоростях от 0 до 25 Мбод(!), при этом  развязки проще и занимают меньше места на плате, чем с питанием от линий RS232;
потребление энергии на скорости 0,1 Мбод (например 115 кбод) приблизительно в 10(!) раз  высокая предсказуемость и «детерминированность» поведения сигналов, вследствие
меньше, чем у стандартного оптрона 6N137. Включение и выключение (т. е. переключение из чего резко снижается вероятность «зависания» компьютера, особенно при работе в
одного логического состояние в другое) происходит напряжением (или уровнем сигнала, а ОС Windows;
не током, как в оптроне) с током в несколько микроампер. Эти развязки дешевле оптронов,  подходят для любых типов компьютеров, в т. ч. имеющих «слаботочный» интерфейс
если исходить из цены на 1 канал передачи. Кроме того, они выпускаются в корпусах SOIC, RS232;
имеющих достаточно малые габариты. Например, 2канальная развязка с передачей в  не создают высокочастотных электромагнитных помех повышенного уровня, поэтому
2 направлениях ADUM1201AR (0÷1 Mбод, 2,5 долл.) выпускается в корпусе SOIC8 и имеет рекомендуются для работы с прецизионными АЦП.
размер 551 мм. И, наконец, эти развязки не требуют для работы никаких внешних компо
В качестве примеров гальванически изолированного интерфейса RS232 с применением
нент (как, например, оптроны, которые требуют как минимум по одному резистору во входной
DCDCконверторов и развязок ADUM120X будут приведены несколько схем, снабженных
и выходной цепях). Сейчас эти микросхемы достаточно доступны.
небольшими комментариями. Для микросхем в планарных корпусах будут приведены вариан
Единственный, по мнению автора, недостаток этих развязок состоит в том, что они рабо
ты разводки платпереходников в корпуса DIP для возможности их легкого макетирования и,
тают только с TTLуровнями сигналов и их нельзя напрямую подключать к линиям интерфейса
кроме того, фотографии самих переходников с распаенными на них микросхемами в порядке
RS232 (как, например, оптроны). Правда, этот недостаток легко преодолим, т. к. существует
возрастания их сложности, качества и соответственно стоимости (по фотографиям еще раз
масса преобразователей интерфейса RS232 (см., например, 1.2.1 и 1.2.2). Кроме того, в не
можно будет убедиться в реальности описываемых устройств).
которых случаях, когда не требуется высокая скорость работы (например, для формирования
сигналов управления режимом работы микроконтроллера, таких как RST, PSEN и т. п.), для
1.4.1. Простой гальванически изолированный интерфейс RS232
развязок вполне можно использовать достаточно дешевые оптроны.
на базе микросхем развязки ADUM1201,
В первой части книги [4] были приведены гальванические развязки, которые питаются
преобразователя SN75155 и оптронов
энергией от самих линий интерфейса RS232, а также развязки, для питания которых исполь
зуются изолированные DCDCпреобразователи. Еще три года назад (2003 г.) единственными В схеме сопряжения компьютера с микроконтроллером (например одним из семейств
реально работающими DCDCпреобразователями для подобных целей были DCDCпреобра MSC12XX, ADUC8XX и AT89C51ED2/RD2) с помощью гальванически изолированного интер
зователи семейства DCP05XX или DCR05XX мощностью 1÷2 Вт от ф. BurrBrown (TI) и стои фейса RS232 микроконтроллер показан условно в правой нижней части схемы (рис. 1.4.1.1).
мостью около 10–11 долл. (кстати, цена на них до сих пор так и не изменилась). Поэтому при В качестве гальванических развязок помимо двунаправленной развязки
ходилось использовать их в самых крайних случаях. В большинстве случаев для питания галь ADUM1201 (DD2) используются широко известные, легкодоступные и дешевые оптроны
ванических развязок автор рекомендовал тогда использовать сами линии интерфейса H11L1 (DD3) и TLP521 (DD4). В схеме также применена известная высокоскоростная, но
RS232, т. к. такое питание «бесплатное». Но, как известно, бесплатный сыр бывает только малоиспользуемая (изза ее повышенного потребления тока) микросхема одноканаль
в мышеловках — гальванические развязки с питанием от линий интерфейса имеют много ного приемопередатчика SN75155 (DD1) от ф. Texas Instruments. Ток потребления час
недостатков, перечислять которые очень долго (и не нужно). ти схемы со стороны компьютера составляет около 12 мА, из них 11 мА потребляет
В последнее время ситуация с качеством и ценой новых DCDCпреобразователей суще SN75155. Для питания части схемы со стороны компьютера используется DCDCкон
ственно изменилась. Появились новые DCDCпреобразователи, которые имеют уровень шу вертер RQD0512 (DD5) от ф. Recom мощностью в 1 Вт, преобразующий входное напря
мов в несколько раз (!) ниже, чем у DCR05XX или DCP05XX, и стоимость которых более чем жение +5 В в 2 напряжения: +12 В и –12 В, и выдающий ток по 42 мА на каждое нап
в 2 раза меньше последних. Примером могут служить DCDCпреобразователи RSDXX ряжение питания (т. е. с лихвой перекрывающий энергию, требующуюся для питания
и RQD–XX мощностью 0,25÷1,0 Вт от ф. Recom им подобные. Энергии этих DCDCконверте развязки). Микроконтроллер показан схематично; к нему подходят сигналы данных
ров вполне достаточно для питания даже старых преобразователей интерфейса RS232 (типа RS232 (TxDM и RxDM) и сигналы управления (RST и PSEN).

50 51
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ГАЛЬВАНИЧЕСКИЕ РАЗВЯЗКИ ДЛЯ ИНТЕРФЕЙСА RS232

Рис. 1.4.1.2.
Вариант разводки платы!
переходника SOIC8DIP8 для
развязки ADUM1201 (слева —
верхний слой монтажа микросхемы,
справа — нижний слой платы)

Рис. 1.4.1.1.
Схема гальванически
изолированного
интерфейса RS232
на базе развязки
ADUM1201
и преобразователя
интерфейса
SN75155 для
микроконтроллеров
семейств
MSC12XX, ADUC8XX и
AT89C51ED2(RD2)

В платепереходнике в качестве «ножек» используются штырьки, которые легко «отламыва


ются» от линейки из 40 двусторонних штырьков круглого сечения диаметром около 0,5÷0,7 мм.
Верхняя часть штырька (меньшего диаметра) впаивается в платупереходник (лишняя часть
штырька откусывается), а нижняя служит ножкой. Штырек, связанный с 1м выводом микросхе

Рис. 1.4.1.3.
Плата!переходник
SOIC8DIP8 для развязки
ADUM1201:
а — фотография;
б — процедура
«подгибания» ножек
В прямоугольнике, очерченном пунктирной линией, показана схема кабеля связи с микросхемы под ее «дно»
компьютером. Линия RxD соединена с линией DSR непосредственно в разъеме DB9M,
который подключается к COMпорту компьютера. Таким образом, драйвер SN75155
(2й и 7й выводы) работает сразу на 2 входа (на 2 приемника RS232). Для получения
напряжения питания +5 В (питание ADUM1201) используется малопотребляющий и дос
таточно прецизионный стабилизатор LP2950CZ5.0 (DD6). Схема идеально работает на
скорости обмена 115 200 бод на расстоянии между компьютером и микроконтролле
ром до 15 м.
Микросхема ADUM1201 выпускается в корпусе SOIC8, который неудобен для ручного ма
кетирования. Для более удобной работы с этой микросхемой при ручном макетировании ав
тор рекомендует изготовить платупереходник SOIC8DIP8, вариант разводки которой приве
ден на рис. 1.4.1.2. а) б)

52 53
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ГАЛЬВАНИЧЕСКИЕ РАЗВЯЗКИ ДЛЯ ИНТЕРФЕЙСА RS232

мы, можно не откусывать; при установке такой платыпереходника в панельку по нему удобно
ориентировать платупереходник .
Необходимо отметить, что расстояние между центрами ножек (штырьков), находя
щихся на одной линии, но с противоположных сторон платыпереходника (например между
центрами 1й и 8й ножек) составляет по стандарту корпуса DIP 0,3 дюйма, или 7,62 мм. Учи
тывая толщину штырька, а также погрешность монтажа, расстояние между штырьками
может составить чуть менее 6 мм. Максимальное же расстояние между концами ножек,
находящихся на одной линии, но с противоположных сторон микросхемы в корпусе SOIC8
(например между концами 1й и 8й ножек) составляет 6,2 мм. Поэтому микросхема в кор
пусе SOIC8 «не влезет» на платупереходник с топологией, показанной на рис. 1.4.1.2
(в левой нижней части рисунка).
Если же «подогнуть» ножки микросхемы под ее «дно» (рис. 1.4.1.3), то микросхема свобод
но умещается на платупереходник и еще даже остается свободное пространство, что намно
го упрощает пайку микросхемы. Для того чтобы еще более прояснить ситуацию, напомню, что, Рис. 1.4.2.1.
как известно, аналогичное расположение выводов имеют все конденсаторы, резисторы и ди Схема гальванической
развязки на базе
оды, предназначенные для поверхностного монтажа, а также микросхемы в корпусах QFN. микросхем развязок
Следует также отметить, что процедуру «подгибания» ножек микросхемы можно производить ADUM1201, ADUM1200
только один раз, иначе ножки могут сломаться. и преобразователя
интерфейса ADM3202
По фотографии платыпереходника SOIC8DIP8 для развязки ADUM1201 (рис. 1.4.1.3), для микроконтроллеров
видно, что микросхема ADUM1201 (с подогнутыми ножками) очень удачно «вписывается» в то семейств MSC12XX,
пологию платы, а штырек, связанный с 1м выводом микросхемы, не откусан и служит для ADUC8XX
и AT89C51ED2(RD2)
удобства ориентации (как уже говорилось ранее).

1.4.2. Гальванически изолированный интерфейс RS232


на базе микросхем развязок ADUM1201, ADUM1200
и преобразователей ADM3202 и MAX3181
Схема гальванически изолированного интерфейса RS232 на базе 2 микросхем раз
вязок ADUM1201(DD2), ADUM1200(DD3) и преобразователей ADM3202(DD1) и
MAX3181(DD5) (рис. 1.4.2.1), как и предыдущая (см. рис. 1.4.1.1), формирует 4 сигнала
— TxDM, RxDM, RST и PSEN для сопряжения компьютера с микроконтроллерами се
мейств MSC12XX, ADUC8XX и AT89C51ED2 (RD2), поэтому в условном показе микроконт Для более удобного макетирования устройств, использующих обе развязки ADUM1201 и
роллера нет необходимости. ADUM1200, автор рекомендует изготовить платупереходник 2SOIC8DIP12, схема и вари
В связи с тем, что преобразователь ADM3202 имеет 2 передатчика (10й, 7й и 11й, 14й ант разводки которой приведены на рис. 1.4.2.2. Для того чтобы микросхемы «вписались» в то
выводы DD1), линии RxD и DSR разнесены. Это значительно повышает надежность передатчи пологию платыпереходника, их ножки следует подогнуть так же, как и для переходника
ков, т. к. каждый из них работает на 1 вход. Схема кабеля сопряжения с компьютером показа SOIC8DIP8, т. е. так, как показано на рис. 1.4.1.3.
на в прямоугольнике, очерченном пунктиром. Как можно увидеть из его схемы, для каждой из Микросхема приемника RS232 MAX3181 (DD5 — рис. 1.4.2.1) выпускается в планарном
линий RxD и DSR предусмотрен отдельный провод, хотя эти два сигнала формируются преобра корпусе SOT235, который, как и корпус SOIC8, неудобен для макетирования, поэтому автор
зователем ADM3202 из одного и того же сигнала (RxDa), для формирования которого исполь рекомендует изготовить переходник SOT236DIP6 аналогично переходнику SOIC8DIP8
зуется единственный канал развязки ADUM1201 (2й, 7й выводы DD2). Часть схемы, непосре (рис. 1.4.1.2), схема и вариант разводки не приводятся в виду их простоты. Изза малого раз
дственно контактирующая с интерфейсом компьютера (слева от пунктирной линии, условно по мера микросхемы MAX3181 она свободно умещается на платепереходнике без процедуры
казывающей изоляционный барьер), питается от единственного источника питания напряже «подгибания» ножек.
нием +5 В (сигнал «+5 A»), формируемым DCDCпреобразователем RQS0505 мощностью все На рис. 1.4.2.3 приведена фотография вышеуказанных 2 плат переходников:
го 0,25 Вт. Размер DCDCконвертера RQS0505 (и соответственно стоимость) меньше разме 2SOIC8DIP12 и SOT236DIP6.
ра конвертера RQD0512, примененного в предыдущей схеме (рис. 1.4.1.1). Кроме того, отпа Кроме того, следует отметить, что микросхема приемника MAX3181 труднодоступна
дает необходимость в дополнительном стабилизаторе +5 В (DD6 — см. рис. 1.4.1.1). (в малых количествах), поэтому вместо нее можно применить КМОПтранзистор 2N7000.

54 55
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ГАЛЬВАНИЧЕСКИЕ РАЗВЯЗКИ ДЛЯ ИНТЕРФЕЙСА RS232

Рис. 1.4.2.2. 1.4.3. Гальванически изолированный интерфейс RS232


Вариант разводки платы!переходника на базе микросхем развязок ADUM1201, ADUM1200
2SOIC8DIP12 для и преобразователя MAX1406
двух развязок ADUM1201 и ADUM1200
Схема гальванически изолированного интерфейса RS232 на базе развязок ADUM1201 и
ADUM1200 (рис. 1.4.3) несколько проще, чем предыдущая (рис. 1.2.4.1), т. к. в ней примене
на единственная микросхема преобразователя интерфейса MAX1406 (DD1), включающая в
свой состав по три приемника и три передатчика. В связи с этим отпадает необходимость
в дополнительном приемнике (MAX3181), как в схеме на рис. 1.4.2.1. Правда, возникает не
обходимость в дополнительном стабилизаторе +5 В (DD5 — LP2950Z5.0) и, кроме того, тре
буется DCDCпреобразователь с двумя (+12 В и –12 В) выходными напряжениями питания
(DD4 —RQD0512). Схема была достаточно скрупулезно протестирована автором и показала
идеальную работу на скорости 115 200 бод (как было упомянуто ранее, максимальная ско
рость работы MAX1406 составляет 230 кбод). Размах сигнала драйвера повышен и составля
ет около ±11,5 В на нагрузке в 5 кОм, что является несомненным преимуществом микросхе
мы MAX1406 перед упоминавшейся ранее ADM3202 (размах сигнала составляет ±10 В при

Рис. 1.4.2.3.
Фотографии плат!
переходников
2SOIC8DIP12 для
двух развязок
ADUM1201 и
ADUM1200 (а) и
SOT!23!6DIP6 (б) для
приемника MAX3181

Рис. 1.4.3.
Схема гальванической
развязки на базе
микросхем развязок
ADUM1201, ADUM1200
и преобразователя
а) интерфейса MAX1406
б) для микроконтролле!
ров семейств
Схема замены микросхемы MAX3181 на транзистор 2N7000 приведена в прямоугольни MSC12XX, ADUC8XX
ке, очерченном пунктиром, в левой нижней части рис. 1.4.2.1. Несколько слов о достои и AT89C51ED2(RD2)
нствах этой схемы (рис. 1.4.2.1). Схема достаточно проста, в ней применены относитель
но легкодоступные (и дешевые) компоненты и не содержится ни одного резистора (если
использовать приемник MAX3181). Кроме того, схема идеально работает на скорости
115 200 бод, т. к. максимальные скорости работы ADM3202 и MAX3181 значительно вы
ше и составляют 460 кбод и 1,5 Мбод соответственно. Длина кабеля связи с компьюте
ром может достигать 20 м. Автор рекомендует эту схему гальванических развязок для
большинства применений (и не только конкретно для микроконтроллеров семейств
MSC12XX, ADUM8XX и AT89C51ED2/RD2).

56 57
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ГАЛЬВАНИЧЕСКИЕ РАЗВЯЗКИ ДЛЯ ИНТЕРФЕЙСА RS232

питании +5 В). Длина кабеля связи (на такой скорости работы схемы) может достигать 20 м.
Еще одно достоинство схемы в том, что она более удобна для макетирования, чем предыду
щая (рис. 1.4.2.1), если использовать микросхему MAX1406 в корпусе DIP16 (MAX1406CPE).
Правда, стоимость такой микросхемы (при малом количестве) довольно высока — чуть ме
нее 5 долл.
И последнее, что необходимо отметить по поводу микросхемы MAX1406. Эта мик
росхема была выпущена ф. MAXIM для прямой замены более старых микросхем
MC145406 от ф. Motorola и SN75C1406 от ф. Texas Instruments в устройствах, где требу Рис. 1.4.4.1.1.
Схема гальванически
ется высокая скорость обмена (в 115 200 бод), поскольку ни MC145406, ни SN75C1406 изолированного преоб!
такую скорость обмена не поддерживают. Автор настоятельно рекомендует ни в коем разователя интерфей!
случае не применять 2 последние микросхемы в качестве преобразователей интерфейса са ADUMAX на базе
ADUM1201, ADUM1200,
RS232 (в схеме на рис. 1.4.3). Эксперименты, проведенные автором с этими микросхема MAX3181 и MAX3190
ми, показали, что скорость обмена свыше 38 400 бод от них получить невозможно; кро
ме того, даже на такой скорости обмена эти 2 микросхемы работают нестабильно,
что приводит к частым «зависаниям» компьютера.

1.4.4.Гальванически изолированный интерфейс RS232


на базе микросхем развязок ADUM1201, ADUM1200
и преобразователей MAX3190 и MAX3181
Малый размер микросхем гальванических развязок ADUM1201 и ADUM1200 и кро
шечный размер преобразователей MAX3190, MAX3181 и MAX3183 позволяют конструиро
вать очень малые по габаритам устройства гальванически развязанного интерфейса
RS232, которые могут свободно умещаться на плате размером с обычную микросхему в
DIPкорпусе. Такая плата, оснащенная «ножками», подобным ножкам микросхем в DIPкор
пусах, может представлять собой чтото типа гибридной микросхемы в DIPкорпусе, кото Рис. 1.4.4.1.2.
рая может быть, с одной стороны, легко сконфигурирована под ту или иную задачу и, с дру Вариант разводки платы гальванически
изолированного преобразователя интерфейса
гой, — очень удобной для макетирования. Впоследствии такая «микросхема» после доста ADUMAX на базе ADUM1201, ADUM1200, MAX3181
точно скрупулезного тестирования может быть установлена уже в готовое изделие. Ниже и MAX3190
приводится 2 варианта подобных «гибридных микросхем» гальванически изолированного
интерфейса, предназначенного для программирования и штатного режима работы микро
контроллеров семейств MSC12XX, ADUC8XX и АТ89C51ED2(RD2) (1й вариант) и микроко
нтроллеров семейств P89LPC9XX (2й вариант), который (с некоторыми упрощениями) мо
жет быть также использован для микроконтроллеров C8051F067/330D.

1.4.4.1. Плата гальванически изолированного интерфейса


на базе развязок ADUM1201, ADUM1200, MAX3181
и MAX3190 для микроконтроллеров семейств MSC12XX,
ADUC8XX и AT89C51ED2/RD2 совместно с инвертирующими передатчиком MAX3190 (DD3) и приемником MAX3181 (DD4),
Схема гальванически изолированного преобразователя интерфейса на базе на другой (в нижней части) — 2канальная однонаправленная развязка MAX1200 (DD2) и два
ADUM1201, ADUM1200, MAX3181 и MAX3190 (рис. 1.4.4.1.1) состоит из 3 инвертирующих инвертирующих приемника MAX3181 (DD5 и DD6).
приемников RS232 — MAX3181 (DD4, DD5 и DD6), одного инвертирующего передатчика На фотографии платы «микросхемы» ADUMAX (рис. 1.4.4.1.3) можно увидеть, что такая тополо
RS232 — MAX3190 (DD3), одной 2канальной двунаправленной развязки ADUM1201 гия разводки компонентов позволила расположить 6 микросхем, 5 конденсаторов и 14 штырь
(DD1) и одной 2канальной однонаправленной развязки ADUM1200 (DD2). Назовем услов ков, которые являются «ножками» микросхемы, на довольно ограниченном пространстве, по пло
но такое устройство «ADUMAX». щади равном площади стандартной микросхемы в корпусе DIP16. На фотографии (рис. 1.4.4.1.3,а)
В варианте разводки платы (рис. 1.4.4.1.2) компоненты размещены с двух сторон. На од можно заметить явно выступающий (не откусанный) штырек, соответствующий 1му выводу «мик
ной стороне платы (в верхней части) размещенa двунаправленная развязка ADUM1201 (DD1) росхемы» ADUMAX, по которому легко ориентировать плату при установке в панельку.

58 59
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ГАЛЬВАНИЧЕСКИЕ РАЗВЯЗКИ ДЛЯ ИНТЕРФЕЙСА RS232

Схема гальванической развязки на базе ADUMAX для микроконтроллеров семейств


MSC12XX, ADUC8XX и AT89C51ED2 (RD2), как видно из рис. 1.4.4.1.4, формирует сигналы
для микроконтроллера RxDM, RST и PSEN из сигналов интерфейса RS232 TxD, DTR и RTS
соответственно, а сигнал интерфейса RxD формируется сигналом микроконтроллера
TxDM. Пунктиром показан изоляционный барьер. Схема тестировалась на скорости обме
на 115 200 бод и показала отличные результаты. Длина кабеля связи с компьютером мо
жет достигать 20 м. В прямоугольнике, очерченном пунктиром, показана схема кабеля
связи с компьютером.
Схема развязки достаточно проста и занимает мало места на плате.

1.4.4.2. Плата гальванически изолированного интерфейса


а)
на базе развязок ADUM1201, ADUM1200, MAX3181, MAX3183
Рис. 1.4.4.1.3. и MAX3190 для микроконтроллеров семейств P89LPC9XX
Фотография платы гальванически изолированного преобразова!
теля интерфейса ADUMAX на базе ADUM1201, ADUM1200, Схему платы гальванически изолированного интерфейса на базе развязок ADUM1201,
MAX3181 и MAX3190: а — верхняя часть платы; б — нижняя ADUM1200, MAX3181, MAX3183 и MAX3190, приведенную на рис. 1.4.4.2.1, назовем «мик
б)
росхемой» ADUMAX1. Можно заметить, что ADUMAX1 отличается от ADUMAX (рис. 1.4.4.1.1)
только тем, что 2 инвертирующих приемника ADUMAX — MAX3181(DD5 и DD6) заменены на
2 неинвертирующих приемника MAX3183 (тe же DD5 и DD6). В остальном схемы и соотве
Рис. 1.4.4.1.4.
тственно разводка плат идентичны.
Схема гальванической развязки Схема гальванической развязки на базе ADUMAX1 для микроконтроллеров семейств
на базе ADUMAX для микроконт! P89LPC9XX (рис. 1.4.4.2.2) формирует сигналы для микроконтроллера RxDM, RST и Vcc из сиг
роллеров семейств MSC12XX,
ADUC8XX и АТ89C51ED2 (RD2)
налов интерфейса RS232 TxD, DTR и RTS соответственно, а сигнал интерфейса RxD формиру

Рис. 1.4.4.2.1.
Схема гальванически
изолированного
преобразователя интерфейса
ADUMAX1 на базе ADUM1201,
ADUM1200, MAX3181, MAX3183
и MAX3190

60 61
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ЧТО ДЕЛАТЬ, ЕСЛИ ДЛИНА ЛИНИИ СВЯЗИ ИНТЕРФЕЙСА RS232 ПРЕВЫШАЕТ 20 М?

ется сигналом микроконтроллера TxDM. Сигнал Vcc формируется на стоке КМОПтранзистора 1.5. Что делать, если длина линии связи
BS250 (T1), исток которого соединен с источником питания +3,3 В, а на затвор подается сиг интерфейса RS232 превышает 20 м?
нал ТТЛуровня с выхода приемника ADUMAX1 (выводы 10 и 16). На вход этого же приемника
подается сигнал RTS с интерфейса RS232. Пунктиром показан изоляционный барьер. Схема Иногда возникает задача «удлинить» линию связи для интерфейса RS232; при этом за
тестировалась на скорости обмена в 115 200 бод и показала отличные результаты. Длина ка дача поставлена так, что нельзя изменять ни схему устройства на базе микроконтроллера,
беля связи с компьютером может достигать 20 м. В прямоугольнике, очерченном пунктиром, ни его программное обеспечение, ни программное обеспечение компьютера, с которым
показана схема кабеля связи с компьютером. этот микроконтроллер связан по интерфейсу RS232. С подобными задачами автор сталки
Схема достаточно проста и занимает мало места на плате. Подобную схему можно приме вался достаточно часто. Ниже приведены пример подобной ситуации и достаточно простое,
на взгляд автора, решение возникшей проблемы, которая некоторых разработчиков может
нить и для микроконтроллеров C8051F067/330D (исключая линию RTS и транзистор T1).
поставить в тупик (рис. 1.5.1).
Задача была поставлена следующим образом.
Имеется прибор (на базе микроконтроллера), который сопрягается с компьютером все
го двумя линиями интерфейса RS232 — TxD и RxD и, естественно, «землей» — сигналом SG.
Причем связь между компьютером и прибором по интерфейсу RS232 должна быть дуплекс
ной (как это обычно делается в интерфейсе RS232), т. е. передатчик и приемник должны ра
Рис. 1.4.4.2.2. ботать независимо друг от друга (так было написано программное обеспечение для компь
Схема гальванической развязки ютера и микроконтроллера в приборе).
на базе ADUMAX1 для микроконт!
роллеров семейств P89LPC9XX В качестве прибора был предоставлен «Газовый корректор», предназначенный для изме
рения расхода и объема газа, проходящего по газовой магистрали (трубе). Прибор располагал
ся непосредственно на магистрали, а компьютер — на расстоянии около 1 км ( 900 м) от при
бора. Программное обеспечение, имеющееся на компьютере, по снятию показаний прибора
было уже давно куплено и оплачено, поэтому изменить его уже было невозможно; кроме того

Рис. 1.5.1.
Схема двунаправленного преобразо!
вателя RS232RS485/RS422

62 63
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ЧТО ДЕЛАТЬ, ЕСЛИ ДЛИНА ЛИНИИ СВЯЗИ ИНТЕРФЕЙСА RS232 ПРЕВЫШАЕТ 20 М?

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


бор был разработан достаточно давно. Попытки заказчика применить стандартный преобра Рис. 1.5.4.
зователь интерфейса RS232 в интерфейс RS485 ни к чему не привели ввиду того, что в пре Фотография общего вида
образователе интерфейса RS485 была предусмотрена только полудуплексная связь, как это двух устройств —
преобразователей
обычно осуществляется в этом интерфейсе. RS232RS485/RS422
Для решения задачи автор использовал достаточно известные преобразователи
RS485/RS422TTL(ADM488), работающие в дуплексном режиме, и уже упоминавшийся преоб
разователь интерфейса RS232 ADM3202 (рис. 1.5.1). Как видно из схемы, все сигналы интер
фейсов и питание выведены на клеммы (K01÷K08). Для индикации включения питания ис
пользуется светодиод VD1. Для питания устройства применяется достаточно дешевый стабили
зированный источник питания +5 В/200 мА.
Расположение элементов (а) и вариант разводки платы устройства преобразователя интерфей
сов (б, в) приведены на рис. 1.5.2 . Использование микросхем в корпусах DIP существенно облегча
ет производство устройства. Для распайки компонентов не требуется высокой квалификации мон
тажника (вся работа по монтажу плат была довольно ловко проделана школьником 9го класса).

а
Рис. 1.5.2.
Вариант разводки платы
двунаправленного
преобразователя
RS232RS485/RS422:
а — расстановка элементов;
б — сторона монтажа «ТОР»;
в — сторона пайки «ВОТТОМ»
(вид сквозь плату)

Рис. 1.5.3.
Фотография устройства
преобразователя
RS232RS485/RS422

На фотографии устройства (рис. 1.5.3) размеры платы выбраны таким образом, что она лег
ко умещается в обыкновенную телефонную розетку и прикручивается к ней 8 саморезами, слу
жащими одновременно крепежом клемм к плате. В крышке розетки просверлено отверстие,
через которое наружу выведена верхняя часть светодиода.
На фотографии общего вида 2 устройств — преобразователей RS232RS485/RS422
(рис. 1.5.4) показаны: вверху — устройство в собранном виде, предназначенное для сопряже
ния с компьютером (на фотографии виден кабель с разъемом DB9M, который подключается к
COMпорту компьютера), внизу — устройство со снятой крышкой.

64 65
АППАРАТНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232

Рис. 1.5.5.
Схема сопряжения прибора
с компьютером с помощью дву!
направленного преобразователя
Программные
RS232RS485/RS422

Для сопряжения устройств с компьютером и прибором (рис. 1.5.5) используется обыкно средства
венный (неэкранированный) 4жильный телефонный провод длиной 1÷1,5 м. Линия связи
между двумя устройствами представляет собой достаточно дешевый провод, состоящий
из 2 неэкранированных витых пар в одной общей оплетке.
интерфейса
Тестирование устройств показало идеальную их работу в дуплексном режиме на скорос
ти в 115 200 бод на линии связи длиной в 1 км (!). RS232

2.1. Предварительные замечания ............................................................68


2.2. Формирование коротких машиннонезависимых
временных задержек ...........................................................................71
2.3. Применение совмещений в программах
для микроконтроллера и компьютерa ...............................................75
2.4. Использование нового алгоритма обмена информацией
по RS232 между компьютером и микроконтроллером ..................83
2.5. Программирование интерфейса RS232 в ОС Windows98/XP .....125
2.6. Применение интерфейса RS232 для программирования
микроконтроллеров в системе (In_System_ProgrammingISP) .....161
ПРЕДВАРИТЕЛЬНЫЕ ЗАМЕЧАНИЯ

2
пенно были все выявлены, и в результате их устранения, а также благодаря некоторым допол
нительным новшествам появилась система Win98,SE2.
Системыпредшественницы Win'XP, SP2 (Win'2000, Win'Me и др.), которые были созданы
уже после Win98, постепенно становились «более» многозадачными, т. е. «псевдомногозадач
ность» постепенно превращалась в действительно «многозадачность», а приставка «псевдо»
постепенно исчезала. Кроме того, эти системы начали сочетать в себе некоторые сетевые воз
можности. После появления системы Win'XP, SP2, которая вобрала в себя лучшие свойства
Программные средства системпредшественниц, а также сетевые свойства Win'NT, системы Win'2000, Win'Me и др.
начали постепенно уходить из обращения.
Win'XP — действительно многозадачная операционная система, в которой каждой из
интерфейса RS232 нескольких запущенных и работающих программ отводится определенный «квант» време
ни. В Win'XP уже практически нет никакой связи с DOS. Программисту доступны далеко не
все ресурсы компьютера: прямой ввод/вывод через порты запрещен. И хотя и существуют
некоторые «обходные» пути, позволяющие преодолеть это запрещение (например извест
2.1. Предварительные замечания ная программa USERPORT, после запуска которой в Win'XP можно обращаться напрямую к
Программные средства для интерфейса RS232, по которому компьютер и микроконтрол портам ввода/вывода), основная идеология Win'XP — не разрешать никакой программе
лер обмениваются информацией между собой, условно можно разделить на две части. К пер «захватить» все ресурсы компьютера и, в частности, — запрет на прямой ввод/вывод че
вой части отнесем программы, написанные для компьютера, ко второй — программы для мик рез порты. В настоящее время операционная система Win'XP наиболее распространена.
роконтроллера. Однако система Win'98, SE2 до сих пор применяется, т. к. она тесным образом связана с
В свою очередь, программы для компьютера условно можно разделить также на две час DOS, которая является исключительно надежной благодаря своей простоте, хорошей изу
ти. К первой отнесем программы, написанные для операционной системы (ОС) DOS, ко второй ченности и предсказуемости работы.
— для Windows. В связи с вышеизложенным все программы для Windows будут приведены для Win'XP;
Если ОС DOS с последней седьмой (MSDOS V7.0) версией больше не модифицируется, то в Win'98 они также работают, хотя некоторые значительно медленнее, чем в DOS и
системы Windows постоянно обновляются. Систем Windows несколько. Мы будем рассматри Win'XP, но их работа в Win'XP — наиболее общий случай для систем Windows. Кроме того,
вать только две — последнюю версию Windows98 2й редакции (Win'98, SE2) и WindowsXP для несколько программ будет приведено для работы в DOS по двум причинам. Вопервых,
профессионалов с сервисным пакетом 2й редакции — WindowsXP professional, service pack 2 система DOS до сих пор используется благодаря своей надежности, вовторых, на приме
(Win'XP, SP2). Все промежуточные системы Windows, предшествующие Win'98, SE2 ре программ, написанных для DOS, будет показано, что программирование обмена
(WindowsV3.1, Windows95) и Win'XP, SP2 (Windows2000, WindowsMе и др.), а также стоящая компьютера с микроконтроллером по интерфейсу RS232 в Win'XP мало чем отличается от
несколько особняком WindowsNT, рассматриваться не будут по причинам, которые более пред программирования в DOS (если использовать «запрещенные» в Win'XP прямые процес
метно и четко будут сформулированы позже. сорные команды ввода/вывода в порт: in и out).
Вначале несколько слов о системе Windows98, SE2 и ее предшественниках. В Win'XP (кстати сказать, и в Win'98) обращение к интерфейсу RS232 возможно через спе
Win'98 — псевдoмногозадачная операционная система, которая зарекомендовала себя циальный программный интерфейс (простите за тавтологию), разработанный компанией
как исключительно надежная (поэтому до сих пор и используется) и в которой все еще допус Microsoft специально для работы приложений (Application Programm Interface — API). Функции
кается полноправное применение DOS. Программы для DOS работают в Win'98 как в режиме API издавна «славятся» своей «заглюченностью», поскольку API — бесплатный. Но бесплатный
«эмуляции», так и непосредственно (используется DOS7.0). Псевдомногозадачность Win'98 сыр, как уже упоминалось, бывает только в мышеловках, в каковую и сможет «угодить» неза
проявляется в том, что несколько запущенных программ могут работать «одновременно», но в дачливый программист («чайник», как его сейчас называют), если попытается использовать
действительности в каждый момент времени работает только одна программа, которая мо для программирования RS232 описанные в MSDN ( http://msdn.microsoft.com/library ) или в
жет «захватить» все ресурсы компьютера, а остальные программы ждут своей очереди. Имен других справочниках и руководствах эти самые функции API. В книге для полноты изложения
но этим свойством Win'98 похожа на DOS, в которой в каждый момент времени может рабо показано, как достаточно просто запрограммировать обмен по RS232 в Windows с помощью
тать вообще только одна программа (именно та, которая запущена). В Win'98 программисту APIфункций. Кроме того, было выявлено, что использование API, особенно в Win'98, резко
доступны все ресурсы компьютера, в том числе — прямой ввод/вывод через порты. Благода «тормозит» обмен по RS232, в связи с чем автор не рекомендует пользоваться APIфункциями,
ря этой особенности программирование интерфейса RS232 практически мало чем отличает предназначенными для программирования интерфейса RS232.
ся от его программирования в DOS. Существуют, конечно, некоторые нюансы, на которые бу Теперь относительно языка программирования. Продолжая традицию программиро
дет обращено особое внимание. вания на языке Кларион, который использовался для программирования обмена между
Windows 3.1 — система, которая была написана как программа DOS, поэтому большого микроконтроллером и компьютером по интерфейсу RS232 в системе DOS (Clarion v3.101)
распространения не получила. В Windows'95 было допущено много ошибок, которые посте и программы на котором приведены в первой части книги [4], в настоящей книге автор

68 69
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ФОРМИРОВАНИЕ КОРОТКИХ МАШИННОНЕЗАВИСИМЫХ ВРЕМЕННЫХ ЗАДЕРЖЕК

приводит все программы для компьютера, написанные для Win'XP, также на языке тических целях для программирования микроконтроллеров семейств P89LPC9XX в ре
Кларион для Windows. В настоящее время (конец 2005 г.) последняя версия этого языка жиме ICP, о котором уже упоминалось ранее.
— Clarion v6.0. Таким образом, дальнейшее изложение будет вестись в следующей последователь
Программы для DOS будут приведены на языке Clarion для DOS (ClarionV3.101) с исполь ности. Вначале будут рассмотрены: вопрос о том, каким образом обеспечить машинно
зованием пакета подпрограмм графического интерфейса для пользователя (Graphic User независимую короткую временную задержку в программах для DOS и Windows; вариан
Interface) — GUI–3. ты применения совмещений в программах для микроконтроллера (на Си и ассемблере)
Программы для микроконтроллера в основном будут приведены на языке Си (CKeil, и в программах для компьютера (на языке Кларион); вопрос об использовании нового
v6.14), хотя некоторые простые программы для микроконтроллера будут приведены и на ас алгоритма обмена по RS232 (для компьютера и для микроконтроллера); функции API для
семблере. программирования интерфейса RS232 в Windows и их использование совместно с но
Но прежде чем заниматься изложением материала по программированию интерфейса вым алгоритмом обмена, разработанным автором; вопрос об использовании прямых
RS232 (и для микроконтроллера и для компьютера), автор хотел бы уделить некоторое внима команд процессора ввода/вывода в порт (in и out) в Win'XP с приведением тестовых
ние двум проблемам, которые часто вызывают затруднения у многих программистов (иногда программ обмена по RS232 и сравнением быстродействия систем DOS, Win'98 и
даже достаточно высокого класса). Win'XP.
Первая проблема — как при написании программ (в DOS и Windows) обеспечить доста Дальнейшее изложение будет посвящено программированию в системе (ISP) микро
точно короткую аппаратно независимую (или, другими словами, машиннонезависимую) вре контроллеров MSC12XX, ADUC8XX, AT89C51ED2(RD2) и P89LPC93XX с компьютера по
менную задержку (в несколько микросекунд). При написании программ для микроконтролле интерфейсу RS232. Для микроконтроллеров MSC12XX, ADUC8XX и P89LPC93XX будут
ра такая проблема никогда не возникает, т. к. программисту всегда известен тип микроконт приведены программы автора для DOS и Win'XP. Для микроконтроллера
роллера (и его скоростные качества) и частота его тактового генератора. Поэтому эта пробле AT89C51ED2(RD2) имеется бесплатно распространяемое программное обеспечение,
ма касается только программ для компьютера. разработанное ф. ATMEL и предназначенное для программирования в системе (ISP)
Вторая проблема — грамотное и повсеместное использование совмещений. —FLIP V.2.4.4. Для использования этой программы будут приведены некоторые момен
Напомню, что совмещением называется такая структура данных, когда две или более ты по настройке.
переменных разного формата разделяют между собой одну и ту же область памяти. Будет рассмотрен вопрос о программировании микроконтроллеров P89LPC9XX в режиме
Например, двухбайтовая переменная (USHORT — в Кларионе или unsigned short в СИ) ICP под управлением микроконтроллеров (P89LPC93X и MSC12XX) и компьютера и приведены
и две однобайтные переменные (BYTE — в Кларионе и unsigned char в Си) могут распо программы, разработанные автором, для микроконтроллеров P89LPC93X и MSC12XX, а также
лагаться в одной и той же области памяти. При обмене информации по 8разрядному программы для DOS и Win'XP, выполняющие программирование микроконтроллеров
интерфейсу (например RS232) удобнее использовать однобайтные переменные; при P89LPC9XX, и, наконец, будут рассмотрены вопросы о программировании микроконтроллеров
расчетах либо для других целей, когда переменная уже находится в процессоре (или в C8051FXXX по интерфейсам JTAG и C2 (с помощью USBDEBUGадаптера) и штатный режим их
микроконтроллере), удобнее работать с двухбайтной переменной. Но поскольку обе пе работы по интерфейсу RS232.
ременные располагаются в одной и той же области памяти, нет необходимости преоб
разования 2 однобайтных переменных в 1 двухбайтную переменную (и обратно).
А такое преобразование часто «тянет» за собой использование, например, библиотек с 2.2. Формирование коротких машиннонезависимых
плавающей запятой, что резко увеличивает время преобразования и объем памяти временных задержек
программ. При использовании совмещений проблема преобразования «исчезает», т. к.
каждый тип переменной определен, и переменную любого типа можно использовать в 2.2.1. Общие положения
программе «напрямую».
И еще будет рассмотрен более подробно вопрос об использовании нового алгорит Короткие и достаточно точные временные задержки, как будет видно из дальнейше
ма обмена по интерфейсу RS232, разработанного автором, о котором уже было упомя го изложения, играют очень важную роль в обмене сигналами по интерфейсу RS232
нуто в настоящей книге и который приведен в ранее опубликованной 1й части книги [4]. между компьютером и микроконтроллером. Формирование коротких машиннонезави
В связи с увеличением быстродействия как современных компьютеров, так и совре симых временных задержек существенно различается в операционных системах DOS
менных микроконтроллеров, использование такого алгоритма обмена, как будет пока и Windows. В DOS, к сожалению, нет штатных программных средств, которые могут обес
зано далее, приобретает еще большее значение, особенно это касается надежности и печить аппаратно независимые короткие временные задержки, тогда как в Windows
скорости обмена. Будут приведены некоторые уточнения и «обновления» этого алгорит они присутствуют. В связи с этим методы программного формирования временных
ма, временная диаграмма сигналов передатчика и приемника, участвующих в обмене задержек различны в DOS и Windows. Поэтому вначале рассмотрим программное фор
информацией. В результате будут даны рекомендации по использованию такого алго мирование задержек в DOS, а затем — в Windows.
ритма обмена как в программах для микроконтроллера, так и в программах для компь Поскольку, как уже упоминалось, львиная доля всех программ, представленных в кни
ютера. Кроме того, будут приведены примеры применения этого алгоритма уже в прак ге, написана на языке Кларион, примеры программ будут приведены для DOS на языке

70 71
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ФОРМИРОВАНИЕ КОРОТКИХ МАШИННОНЕЗАВИСИМЫХ ВРЕМЕННЫХ ЗАДЕРЖЕК

Кларион для DOS (последняя версия языка — Clarion v.3.100), а для Windows на языке получим 2. Это значит, что 1 цикл счета длится около 2 мкс. Для получения, например, 10 мкс,
Кларион для Windows (в настоящее время (2005 г.) последняя версия этого языка — достаточно организовать цикл счета до 5:
Clarion v.6.0).
!
2.2.2. Программное формирование коротких аппаратно-независимых ! Временная задержка 10 мкс.
временных задержек в DOS !
loop i#=1 to 5
Язык Clarion v.3.100 для DOS имеет несколько опций (сред) работы. Это режимы: .
статический (Static Model), оверлейный (Overlay Model) и защищенный (Protected Mode). !
Наиболее скоростной — статический, но программы, написанные для этого режима,
очень короткие, поскольку он может работать с очень ограниченной областью памяти Данную процедуру, конечно, можно достаточно просто автоматизировать, вставляя каж
компьютера. Оверлейный режим на современных компьютерах вообще не работает. дый раз в программу вычисление цикла, например, до 10 с и автоматически вычисляя время
Защищенный режим использует всю область памяти компьютера, т. к. применяется цикла. Правда, при этом нужно будет ждать 10 с. Можно этого и не делать, а один раз опреде
только при опции расширенной памяти (DOS Extender). Скорость работы компьютера лить параметр цикла и в дальнейшем его использовать (так, например, написаны все програм
разная для статического и защищенного режимов. Кроме того, различные компьютеры, мы автора).
естественно, работают с разной скоростью. Единственная стабильная временная база,
на которую можно положиться в программном отношении, — это системный таймер, 2.2.3. Программное формирование коротких аппаратно-независимых
отсчитывающий время на всех компьютерах одинаково. Но минимальный интервал временных задержек в Windows
времени системного таймера составляет около 18 мс, что для коротких временных за
В операционных системах Windows задача формирования коротких аппаратнонезависи
держек (5÷30 мкс) — очень много. Поэтому единственная возможность получить точ
мых временных задержек значительно упрощается. Дело в том, что и в Win'98 и в Win'XP для
ную временную задержку заключается в следующем. Запускается системный таймер,
определения интервалов времени для собственных нужд используется так называемый
далее организуется цикл счета до какоголибо большого числа N (например, до милли
«Представительский счетчик» — QueryPerformanceCounter, который постоянно считает с опре
она или больше), после окончания счета опрашивается таймер и сравнивается со зна
деленной частотой F — QueryPerformanceFrequency. Эта частота различна для Win'98 и Win'XP
чением, которое предшествовало счету, т. е. определяется время счета Т. Далее N де
и составляет около 2 MГц в Win'98 и около 7 МГц — в Win'XP (для компьютера типа P4, 1,7
лится на Т, в результате чего можно получить частоту счета F[1/c]. Зная частоту счета,
ГГц). Эта частота счета жестко привязана к временной базе системного таймера. Для получе
не составляет большого труда сформировать любую временную задержку. Эта идея дос
ния необходимой временной задержки точное значение частоты F выяснять совсем не обяза
таточно примитивна, но, к сожалению, в DOS другого пути нет. Второй вариант — запус
тельно. Достаточно разделить эту частоту на 1 000 000, чтобы получить временную базу для
тить таймер и одновременно запустить счетчик цикла. После прошествия времени Т
счетчика в 1 мкс. Умножив это значение, например на 25, и заставив считать счетчик до это
(например 10 с) остановить счет и выяснить, до какого числа i досчитал счетчик цикла.
го значения, можно получить временную задержку в 25 мкс. Причем организованная таким
Приведем пример.
образом временная задержка будет абсолютно аппаратнонезависимой, т. е. будет давать од
ну и ту же задержку для разных компьютеров и операционных систем (Win'98 или Win'XP).
!
! Определение параметров для Разрядность счетчика — 8 байт, поэтому максимальное число, до которого счетчик
! вычислении временной задержки. может досчитать, а затем сброситься и начать считать заново, составляет
! 0ffffffffffffffffh=18 446 744 073 709 551 615. Это очень большое число, трудно поддаю
T#=clock() щееся «озвучиванию», тем не менее, с ним можно оперировать. В Кларионе не предусмот
i#=0 рены 8байтовые числа, поэтому для определения такого числа для счетчика (COUNTER)
loop используются два 4байтовых числа (ULONG и LONG), объединенные в группу (GROUP).
if (clock()T#)>1000 then break. Аналогичным образом определяется и частота счета (FREQUENCY). Такая структура дан
i#=i#+1 ных называется совмещением, о котором уже упоминалось. Более подробно о совмеще
. ниях и их применении в программах будет изложено несколько позже.
show(10,10,'10 сек.=')
Для работы со счетчиком необходимо использовать APIфункции (о которых также уже упо
setcursor(10,20)
type(i#)
миналось). Прототипы APIфункций для счетчика и частоты в Кларионе известны и четко опре
! делены. Например, для счетчика имеется следующий прототип:

В этом примере после 10 с счета на экран выведется значение переменной i#. Предполо QueryPerformanceCounter(*STRING),BOOL,RAW,PASCAL
жим, что, к примеру, i#=20000000. Тогда, разделив i# на 10 000 000 (10 с = 10 000 000 мкс),
72 73
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕНЕНИЕ СОВМЕЩЕНИЙ В ПРОГРАММАХ ДЛЯ МИКРОКОНТРОЛЛЕРА И КОМПЬЮТЕРА

Ниже приведен фрагмент программы, написанной на Clarion v.6.0, использующей заде ! —


ржку в 25 мкс.
Оператор do DEL25 !Задержка 25 мкс.

do DEL25 ! 
! 
! 
как раз и выполняет задержку в 25 мкс: !
! Подпрограммы
! !
PROGRAM ! 
! ! 
! Переменные для частоты и счетчика ! 
! !
FREQUENCY GROUP,PRE(FRE) DEL25 routine
FREQL ULONG loop until QueryPerformanceCounter(COUNTER). !Чтение счетчика.
FREQH LONG CSTARTL=CNT:COUNTL !Занесение начального значения в
. CSTARTH=CNT:COUNTH !две стартовых longпеременных.
COUNTER GROUP,PRE(CNT) loop
COUNTL ULONG loop until QueryPerformanceCounter(COUNTER). ! Ожидание
COUNTH LONG if CNT:COUNTH=CSTARTH !
. DELTAC=CNT:COUNTLCSTARTL ! прошествия
! еlse !
DELTAC=0ffffffffffffffffhCSTARTL+CNT:COUNTL+1 ! времени
. !
! if DELTAC>DC then break. ! DC(=25 мкс.)
! Прототипы APIфункций — для WIN'XP. . !
! !

!
MODULE('DELAY')
QueryPerformanceCounter(*STRING),BOOL,RAW,PASCAL
QueryPerformanceFrequency(*STRING),BOOL,RAW,PASCAL
2.3. Применение совмещений в программах
END
для микроконтроллера и компьютера
! Под совмещением принято понимать такую структуру данных, когда несколько перемен
!  ных разного формата перераспределяют одну и ту же область памяти. Например, в памяти
!  компьютера или микроконтроллера может располагаться одна 2байтная переменная (типа
CODE
USHORT — в Кларионе и/или unsigned short — в Си) и две 1байтные переменные (типа BYTE
! 
! 
— в Кларионе или unsigned char — в Си).
Приведем пример.
! Пусть требуется передать из компьютера в микроконтроллер по интерфейсу RS232 длину
! Вычисление временной задержки в 25 мкс. какойлибо строки, состоящей из N байт. Причем N может насчитывать несколько тысяч байт
! (например, N — длина программы для микроконтроллера). Целесообразно выбрать формат
loop until QueryPerformanceFrequency(FREQUENCY). !Определение переменной N как 2байтной, например USHORT. С другой стороны, переменная типа USHORT
!частоты работы счетчика. не может быть передана по 8разрядному (1байтному) интерфейсу (RS232), поэтому ее целе
DC=int(25*FRE:FREQL/1000000) !Вычисление времени счета в 25 мкс. сообразно разбить на две 1байтные переменные (формата BYTE), являющиеся, например,
! старшим (NH) и младшим (NL) байтами переменной N. Затем передать, например, вначале
!  младший байт NL, а затем — старший NH. При приеме 2 байт микроконтроллер должен восста
! 
новить из двух 1байтных переменных (NL и NH) 2байтную переменную N и уже оперировать

74 75
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕНЕНИЕ СОВМЕЩЕНИЙ В ПРОГРАММАХ ДЛЯ МИКРОКОНТРОЛЛЕРА И КОМПЬЮТЕРА

ею, например, использовать ее как максимальное значение счетчика принимаемых байт 


строки и т. п. —
Решение поставленной задачи «в лоб» может быть достаточно простым и заключаться в Вывод BT по RS232
следующем. 

Вначале «разбиваем» 2байтную переменную N на две 1байтные переменные NH и NL.
!
Это можно сделать, например, так:
Фрагмент программы на Си приема числа N для микроконтроллера может выгля
NH=int(N/256) деть так:
NL=N256*NH
//
T. e. старший байт NH получается от целочисленного деления N на 256, а младший байт NL — //Определение переменных
как разность между N и значением старшего байта, умноженным на 256. //
После приема двух байт NH и NL микроконтроллер должен восстановить исходное число N. unsigned char NL,NH;
Это можно сделать, например, так: unsigned int N;
//
N=NH*256+NL // П/п ввода байта
//
unsigned char inbyte() {
т. е. исходное число может N быть восстановлено как сумма значений старшего байта NH, ум
.
ноженного на 256, и младшего байта. Прием байта по RS232
.
Фрагмент программы на Кларионе для компьютера при N=35000 для такого решения return(byte);
приведен ниже. }
//
!
PROGRAM //
//Основная программа
N USHORT ! Переменная N //
NH BYTE !Старший байт N void main(void) {
NL BYTE !Младший байт N NH=inbyte();
BT BYTE !Переменная для п/п передачи байта NL=inbyte();
N=NH*256+NL;
CODE }
//
N=35000
Как видно из этих двух фрагментов, для того чтобы передать переменную N по интерфейсу RS232,
NH=int(N/256) ee необходимо преобразовать в две переменные NH и NL, а для того чтобы получить — восстановить
NL=NNH
из NL и NH. Процедуры разбивки и восстановления используют операции деления и умножения.
Для компьютера такие процедуры не составляют особой сложности, т. к. он обладает колоссальными
BT=NH
do OUTBYTE памятью и быстродействием по сравнению с микроконтроллером, поэтому эти процедуры будут «мгно
BT=NL венно» выполнены. А вот для микроконтроллера эти процедуры потребуют немалых затрат как по па
do OUTBYTE мяти программ, так и по быстродействию, т. к. для таких операций будут привлечены дополнительные
библиотеки. Это, в свою очередь, потребует дополнительной памяти программ и некоторые времен
return ные ресурсы, чтобы выполнить соответствующие подпрограммы библиотек. При большой скорости
! передачи данных от микроконтроллера потребуется значительное быстродействие и, как следствие
! Подпрограмма вывода байта этого, — достаточно большая частота генератора (не важно — внутреннего или внешнего). Если мик
! роконтроллер работает от батарейного источника питания, то такой источник (от большого количест
OUTBYTE routine

76 77
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕНЕНИЕ СОВМЕЩЕНИЙ В ПРОГРАММАХ ДЛЯ МИКРОКОНТРОЛЛЕРА И КОМПЬЮТЕРА

ва программ или подпрограмм, написанных подобным образом) быстро кончится. Кроме того, от та т. к. фрагмент не содержит ни одной операции умножения или деления; кроме того, пере
кого «разбазаривания» ресурсов микроконтроллера его основная программа может просто не по менные N, NH и NL в сумме занимают всего 2 байта памяти (а не 4, как в предыдущем при
меститься в и без того достаточно «скудную» его память программ. мере), т. к. распределяются в одной и той же области памяти размером в 2 байта. Наде
Можно ли оптимизировать решение поставленной задачи и, если да, то каким образом? юсь, этот факт достаточно очевиден.
Вот здесь как раз и приходят на помощь совмещения. Ниже приведен фрагмент программы Совмещения не только значительно экономят память и увеличивают быстродействие. Они
для микроконтроллера, использующей совмещения. существенно облегчают программирование.
Приведем еще пример.
// Предположим, требуется передать по интерфейсу RS232 строку S, содержащую
// Совмещение "u.N" с "u.bt.NL" и "u.bt.NH". N байт.
// Переменные u.N (размерностью ushort) и Решение такой задачи «в лоб» заключается в том, что из строки необходимо последова
// u.bt.NL и u.bt.NH (обе размерностью byte(unsigned char)) тельно выделять каждый байт и уже его передавать по интерфейсу. Другими словами, вна
// перераспределяют одно и то же место в памяти микроконтроллера. чале нужно выделить первый байт строки и передать его, затем второй, третий и т. п. Выде
// Порядок расположения переменных NH(первая) и NL(вторая)
ление конкретного байта из строки потребует использования строковых операций. Такие
// в структуре (struct) строго определен и при его нарушении
операции присутствуют как в Кларионе, так и в Си. Но, с одной стороны, они выполняются
// вся конструкция совмещения не работает !!!
//
очень долго, с другой, — требуют достаточно внимательного отношения к индексам: здесь
union{ очень легко ошибиться. Приводить пример с выделением байт из строки, на взгляд автора,
unsigned short N; // Длина строки("u.N"). — лишнее. Гораздо удобнее использовать совмещение строки S с массивом байт размер
struct{ ностью М, равной количеству байт в строке N. Такое совмещение (в Кларионе) выглядит сле
unsigned char NH; // Ст.байт длины строки("u.bt.NH"). дующим образом (при N = 75):
unsigned char NL; // Мл.байт длины строки("u.bt.NL").
}bt; S string(75)
}u; M byte,dim(75),over(S)
//
Оператор over (S) как раз и выполняет подобное совмещение. Таким образом, массив
// М размерностью в 75 байт и строка S длиной 75 байт распределяются в одной и той же об
// П/п ввода байта ласти памяти (размером в 75 байт). Причем, элемент массива M[1] соответствует 1му бай
// ту строки S, M[2] — 2му и т. п. Для вывода всей строки S достаточно организовать 75разо
unsigned char inbyte() { вый цикл вывода iго элемента массива M[i]:
.
Прием байта по RS232 loop i=1 to 75
. B=M[i]
return(byte); do OUTBYTE
} .
//
Здесь B — переменная, которая используется в подпрограмме вывода байта OUTBYTE (чтобы
void main(void)
{ не «загромождать» излагаемое лишними подробностями, и подпрограмма OUTBYTE, и пере
u.bt.NL=inbyte(); //Прием мл.байта длины строки. менная B не приводятся).
u.bt.NH=inbyte(); //Прием ст.байта длины строки. Как видно из приведенного примера, совмещения не только экономят память, но и значи
temp_L=u.l; //Переменная u.Nдлина строки(ushort) тельно увеличивают удобство программирования, что повышает надежность программ (оши
//заполняется автоматически после биться с индексом i в приведенном 75циклoвом выводе элемента массива M[i] просто невоз
//заполнения переменных можно).
//u.bt.NL и u.bt.NH.Переменная temp_L Помимо совмещений между собой чисел разного формата, массивов со строками и т. п., име
//введена чтобы показать использование u.l ется возможность совмещения какоголибо бита 1байтного числа с битовой переменной.
Приведем еще пример.
Как можно заметить из приведенного выше фрагмента программы для микроконт Предположим, требуется последовательно вывести байт данных через какойлибо вывод
роллера, при использовании совмещений значительно экономится память программ, микроконтроллера, стробируя вывод каждого бита сигналом, подаваемым с другого вывода.

78 79
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕНЕНИЕ СОВМЕЩЕНИЙ В ПРОГРАММАХ ДЛЯ МИКРОКОНТРОЛЛЕРА И КОМПЬЮТЕРА

Такие задачи часто возникают при «ручном» программировании вывода через различные PDA не проходит). В 99 случаях из 100 программист на Си (даже достаточно высокого класса)
последовательные интерфейсы (например SPI, C2, MicroWare и т. п.). предложит вам нечто, подобное фрагменту, приведенному ниже.
Попросите хорошего программиста выполнить подобную задачу на ассемблере. Скорее
всего, он вам предложит чтото вроде следующего фрагмента: //*************************************************************************
//* prog90x.c
; //* By : Bauke Siderius
; Алгоритм вывода байта в P89LPC938 //* Discription : ISP/ICP gateway code for LPC90x programmer using MCB900
; //*
//*************************************************************************
; //* Versions
; Установка названий бит //*************************************************************************
; //*
PDA: .reg p1.2 ;Бит данных //* v1.2 August 2003
PCL: .reg p1.3 ;Бит строба (Clock) //* Added a delay before entering ICP.
; //*
OUTBLPC .macro //* v1.1 August 2003
mov b,#8 //* Put ports in input only when not in use.
METO#: rrc a //* Fixed CRC read out.
mov PDA,c //*
nop //* v1.0 May 2003
nop //* Initial version.
nop //*
clr PCL //*************************************************************************
nop .
nop .
nop .
setb PCL .
nop
nop //*************************************************************************
nop //* shift_out()
djnz b,METO# //* Input(s) : data_byte.
.endm //* Returns : none.
; //* Description : function to shift out data to the part being programmed
//*************************************************************************
В этом фрагменте (макросе) байт данных, находящийся в аккумуляторе, выводится через void shift_out(char data_byte)
{
порт p1.2 микроконтроллера (обозначенный PDA) и стробируется сигналом, который подается
char shift_bit;
через порт p1.3 (обозначенный PCL). Как можно заметить, байт сдвигается вправо через флаг char temp_byte = 0;
переноса c (команда rrc а), в связи с чем младший бит байта попадает во флаг переноса, а от temp_byte = data_byte; // put databyte in a temp byte
туда уже в битовую переменную PDA, ассоциируемую с портом p1.2 (команда mov PDA,c). for(shift_bit = 0; shift_bit < 8; shift_bit++)// shift out 8 bits
Далее, через некоторое время, равное длительности 3 команд nop и требующееся для более {
стабильной установки бита на выводе PDA, по выводу PCL подается строб, представляющий PCL = 0; // hold clock line low
собой импульс длительностью также 3 команды nop. После 8 сдвигов (число 8 заранее зано if(temp_byte & 0x01) // check if LSB is set
сится в bрегистр) байт полностью выводится. Задача достаточно примитивная, поэтому легко {
выполнимая и ясная для понимания. (Необходимо отметить, что фрагмент приведен из одной PDA = 1; // set dataline high
из программ автора, предназначенной для программирования микроконтроллера }
P80LPC938 в режиме ICP с помощью микроконтроллера MSC1210). else
{
Но попробуйте попросить этого же программиста написать программу для подобной зада
PDA = 0; // set dataline low
чи на Си (а вот там, к сожалению, такая пересылка бита из флага переноса c в переменную }

80 81
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ИСПОЛЬЗОВАНИЕ НОВОГО АЛГОРИТМА ОБМЕНА ИНФОРМАЦИЕЙ ПО RS232 МЕЖДУ КОМПЬЮТЕРОМ И МИКРОКОНТРОЛЛЕРОМ

temp_byte = (data_byte >>= 1); // shift databyte right one, put in temp BYTEIO=OUTB;
PCL = 1; // clock databit for (j=0;j<8;j++){
} PDA=BITIO;
PDA = 1; // set dataline high after transfer PCL=0;
PCL = 1; // hold dataline high after transfer DEL50();
} PCL=1;
//************************************************************************ DEL10();
BYTEIO=_cror_(BYTEIO,1);
Вышеприведенный фрагмент взят из программы для эволюционной платы MCB900, пред }
}
назначенной для программирования микроконтроллеров P80LPC9XX. Как можно убедиться,
//
если внимательно рассмотреть этот фрагмент, выводимый байт, находящийся в байтовой
переменной temp_byte, так же, как и в предыдущем случае, сдвигается вправо и стробирует Здесь использовано совмещение битовой переменной BITIO с младшим (нулевым) битом бай
ся битом PCL. Но как происходит установка и вывод бита данных PDA! А происходит она в товой переменной BYTEIO (конкретно: BYTEIO^0). В связи с этим, биту, выводимому через порт PDA,
зависимости от значения младшего бита байтовой переменной temp_byte. Для анализа просто присваивается значение бита BITIO аналогично присвоению бита переноса c биту PDA, как
и вывода младшего бита используется достаточно громоздкая конструкция: вначале он выде это сделано в вышеприведенной ассемблерной процедуре. Присвоение организуется всего одной
ляется, затем, если равен 1, то бит PDA устанавливается в 1, иначе PDA=0: командой (PDA = BITIO), и никакого выделения и анализа этого бита не требуется. Здесь впо
ру заметить, что «товарищ» мистер Bauke Siderius не любит, не хочет использовать либо просто не
if(temp_byte & 0x01) // check if LSB is set знает подобных битовых совмещений.
{ Приведенные примеры, на взгляд автора, достаточно красноречиво свидетельствуют
PDA = 1; // set dataline high
о явной пользе и большом преимуществе совмещений перед простыми преобразованиями
}
данных из одного формата в другой.
else
{
PDA = 0; // set dataline low
} 2.4. Использование нового алгоритма
обмена информацией по RS232
Между тем, пользуясь совмещением младшего бита выводимого байта с какойлибо бито между компьютером и микроконтроллером
вой переменной, аналогичную процедуру вывода бита можно «уложить» всего в одну команду!
Фрагмент подобной программы (автора) на Cи приведен ниже. 2.4.1. Суть нового алгоритма обмена
Новый алгоритм обмена по интерфейсу RS232, разработанный автором и опубликован
//
//Для P89LPC938
ный в [4], заключается в аппаратной синхронизации каждого передаваемого/принимаемого
// байта линиями данных (TxD и RxD) этого же интерфейса. В этом его существенное отличие от
sbit PDA = P0^4; стандартной аппаратной синхронизации линиями квитирования (DTRDSR или RTSCTS). Кро
sbit PCL = P0^5; ме того, от существующей программной синхронизации линиями данных (TxD и RxD), которую
// принято называть «XonXoff», новый алгоритм отличается именно «аппаратностью», т. е. синхро
//Совмещение бита BITIO с 0м битом байта BYTEIO низация осуществляется не посылкой информационного байта (например, Xoff) по линиям дан
// ных, а изменением их состояния, как это устроено в аппаратной синхронизации линиями
bdata unsigned char BYTEIO; квитирования.
sbit BITIO=BYTEIO^0; Такая аппаратная синхронизация, с одной стороны, экономит линии, по которым осу
// ществляется обмен данными, с другой, — позволяет использовать выходные линии квити
. рования компьютера (DTR и RTS) для управления режимами работы микроконтроллера
.
.
(штатный режим/режим внутрисистемного (ISP) программирования). При этом линия DTR
// управляет сбросом (вывод RESET микроконтроллера), а линия RTS — переводом его из
// П/п ввода/вывода байта в P89LPC9XX штатного режима работы в режим программирования. В большинстве случаев (микро
// контроллеры семейств MSC12XX, ADUC8XX, AT89C51ED2/RD2) линия RTS управляет сиг
void OUTBLPC(unsigned char OUTB) { налом, подаваемым на вывод PSEN. Суть аппаратной синхронизации линиями данных зак
unsigned char j; лючается в следующем.
82 83
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ИСПОЛЬЗОВАНИЕ НОВОГО АЛГОРИТМА ОБМЕНА ИНФОРМАЦИЕЙ ПО RS232 МЕЖДУ КОМПЬЮТЕРОМ И МИКРОКОНТРОЛЛЕРОМ

Предположим, что передается некоторый поток данных от компьютера к микроконтроллеру ти от скорости микроконтроллера). Такой короткий импульс разрешения просто не «пройдет» че
(например 1000 байт). В обмене в этом случае участвует только одна линия интерфейса — линия рез преобразователь интерфейса (ADM3202, MAX1406, ADM231 и др.). В результате обмен мо
ТxD компьютера, которая соединена с линией RxD микроконтроллера. Вторая линия — линия жет просто сорваться. С другой стороны, ждать, пока байт полностью не поступит в микроконт
TxD микроконтроллера, соединенная с линией RxD компьютера, в это время не используется роллер, и уже после этого сбросить разрешение тоже нельзя, поскольку компьютер после окон
(простаивает). Так вот, основная идея нового алгоритма заключается как раз в том, что «проста чательного вывода байта сразу же приступает к анализу линии, по которой передается разре
ивающую» линию можно использовать для аппаратной синхронизации обмена байтами между шение на передачу следующего байта. Поскольку микроконтроллер всетаки более медленное
компьютером и микроконтроллером. Что означает словосочетание «аппаратная синхрониза устройство, чем компьютер, он может не успеть «среагировать» и сбросить это разрешение нем
ция»? Она означает, что синхронизация осуществляется не посылкой информационного байта по ного позже момента начала анализа компьютером линии разрешения. В результате, проанали
простаивающей линии (например Xoff, как это организовано в программной синхронизации), а зировав линию разрешения и определив, что она находится в состоянии разрешения передачи,
изменением состояния линии TxD микроконтроллера (с лог. 1 в лог. 0 и обратно), как это проис компьютер передаст следующий байт, и на этом обмен сорвется.
ходит при аппаратной синхронизации какойлибо линией квитирования (например линией DTR). В связи вышеизложенным, на взгляд автора, идеальным моментом времени сброса раз
В начале передачи каждого байта компьютер запрашивает у микроконтроллера разрешение на решения является момент времени, соответствующий передаче половины байта (т. е. «середи
передачу. Для этого он анализирует свою линию данных RxD (которая соединена с линией TxD мик на» байта). В этом случае потенциалы разрешения и запрета будут чередоваться, и форма сиг
роконтроллера). Если линия находится в состоянии запрета на передачу (например в лог. 1), компь нала на линии разрешения (т. е. на линии TxD микроконтроллера, одновременно являющейся
ютер не передает байт, а продолжает опрашивать эту линию, пока не получит разрешения (напри RxD компьютера) будет представлять собой чтото похожее на прямоугольный меандр. Причем
мер, лог. 0). Получив разрешение, компьютер передает только один байт, ожидает конца переда длительность импульса такого «меандра» будет приблизительно равна половине длительности
чи этого байта (т. е. ждет, пока не выведется последний бит передаваемого байта) и передачи одного байта. Такой длинный импульс, с одной стороны, свободно пройдет через вы
опять переходит в режим опроса линии для получения разрешения на передачу следующего байта. шеупомянутые преобразователи интерфейса, с другой стороны, сброс разрешения в середине
Микроконтроллер, принимающий поток байт, выполняет следующие действия. Вопер передаваемого байта никак не повлияет на передачу следующего байта компьютером, пос
вых, именно он является инициатором начала обмена, поскольку именно он первый дает кольку в это время он анализирует не линию разрешения, а бит, ответственный за конец вы
разрешение компьютеру на передачу очередного (первого) байта. Напомню, что в начале пе вода последнего бита байта. И этим анализом компьютер будет «заниматься» до окончания вы
редачи компьютер ждет разрешения на передачу, т. е. находится в режиме ожидания. Переклю вода байта, прежде чем приступить к анализу линии разрешения. А эта линия разрешения к
чив свою линию TxD из запрещающего состояния в разрешающее (т. е. дав компьютеру раз этому моменту, как можно догадаться, будет уже давно сброшена, что и требуется.
решение на передачу байта), микроконтроллер ожидает передачи байта от компьютера. Подсчитаем длительность времени от момента стартбита до «середины» байта при скорос
В чем суть ожидания передачи байта от компьютера? Суть в том, что в начале поступления ти 115 200 бод. Очевидно, что при частоте 115 200 Гц длительность передачи одного бита бу
байта в микроконтроллер его линия RxD изменяет свое состояние, поскольку передача бай дет: 1/115 200=0,000 008 68 с или около 8,7 мкс.
та начинается со стартбита. Поэтомуто линия RxD микроконтроллера и изменяет свое Передача всех 10 бит (1 стартбит + 8 бит данных + 1 стопбит) будет занимать около
состояние с лог. 1 на лог. 0. В этот момент, с одной стороны, стартбит инициирует UART мик 87 мкс. Половина этого времени составляет около 43 мкс. Если сделать некоторый запас
роконтроллера на прием байта (и этот прием уже происходит без участия процессора микро по реакции микроконтроллера (5÷15 мкс), то после обнаружения стартбита необходимо
контроллера), с другой, — микроконтроллер, «определив», что «процесс пошел», должен сбро сделать задержку в 25÷30 мкс и затем сбросить разрешение. О том, как осуществить
сить разрешение (т. е. установить запрещающий потенциал на своей линии TxD). столь короткую и машиннонезависимую задержку в компьютере, уже говорилось ранее.
Момент времени сброса разрешения компьютеру на передачу следующего байта очень ва В микроконтроллере организовать подобную временную задержку достаточно просто, пос
жен. Другими словами, требуется определить, когда именно микроконтроллер должен сбросить кольку программисту всегда известна частота тактового генератора микроконтроллера.
это разрешение (т. е. установить запрет на передачу). С одной стороны, ответ на этот вопрос Резюмируем вышеизложенное, привязав все к временной диаграмме аппаратной
напрашивается сам собой: именно тогда, когда микроконтроллер определит начало поступле синхронизации передачи байта, составленной на основе предыдущих рассуждений
ния байта (т. е. в момент времени начала стартбита). Но здесь кроется одна «ловушка». Дело в (рис. 2.4.1).
том, что многие современные микроконтроллеры уже достаточно быстрые, по сравнению с Рис. 2.4.1.
предыдущим поколением. Команды современных микроконтроллеров уже выполняются не за Временная диаграмма
аппаратной синхронизации
12 тактов, как это было ранее. Многие из них являются «однотактными», т. е. выполняют коман передачи байта
ду процессора всего за один такт генератора (например микроконтроллеры ADUC8XX,
C8051FXXX), некоторые — 2тактными (P89LPC9XX), 4тактными (MSC12XX) и 6тактными
(AT89C51ED2/RD2). Кроме того, современные компьютеры также уже давно не «медленные».
Поэтому сбрасывать разрешение сразу после начала стартбита нельзя, поскольку вре
мя от начала разрешения передачи и начала стартбита последующего за этим разрешением
передачи байта может составлять от нескольких микросекунд до их долей (в зависимос

84 85
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ИСПОЛЬЗОВАНИЕ НОВОГО АЛГОРИТМА ОБМЕНА ИНФОРМАЦИЕЙ ПО RS232 МЕЖДУ КОМПЬЮТЕРОМ И МИКРОКОНТРОЛЛЕРОМ

Итак, передатчик ожидает разрешение на передачу байта. На временной диаграмме мер в 25 мкс) и т. п. не оказывают никакого влияния на скорость передачи. Например, за
это — время от 0 до получения такого разрешения (до перехода RxD с высокого уровня в держка в 25 мкс и проверка передатчиком сброса разрешения проводятся во время пе
низкий). Далее приемник посылает разрешение на передачу байта по линии RxD передат редачи и приема байта и никоим образом не «тормозят» обмен. Как будет видно из даль
чика, устанавливая ее в нулевой уровень. На верхнем графике этот факт отражен тем, что нейшего изложения, реальная скорость обмена при использовании излагаемого алгорит
уровень RxD переключается с единичного в нулевое состояние. Получив разрешение на ма отличается от идеальной не более чем на 1÷2 % и больше зависит от используемой
передачу байта, передатчик начинает его передавать, но не мгновенно, а спустя некото операционной системы и «метода», примененного для обращения к портам ввода/вывода
рое время реакции на разрешение передачи (на диаграмме оно обозначено Tpp). Далее (в частности к порту RS232). Такое сравнение сделано автором, и его результат будет
приемник ждет начало стартбита, т. е. переключения линии TxD приемника с единичного представлен читателю несколько позже.
уровня в нулевое. После определения факта начала передачи по стартбиту приемник, Вернемся к временной диаграмме. Если посмотреть еще раз на временную диаграм
спустя некоторое время реакции на начало передачи (Трн), запускает задержку длитель му (рис. 2.4.1), то можно заметить, что график зависимости напряжения от времени на
ностью около 25 мкс. линии RxD представляет собой почти симметричный прямоугольный меандр. Длитель
По прошествии времени задержки (Тз) приемник сбрасывает разрешение, т. е. переклю ность импульса такого меандра составляет половину времени на передачу 1 байта. Такой
чает линию RxD передатчика из низкого состояния в высокое. Далее после окончания пере импульс легко воспринимается преобразователем интерфейса (об этом уже было упомя
дачи байта передатчик переходит к анализу разрешения передачи следующего байта, т. е. нуто ранее).
состояния линии RxD. В этот момент она давно уже в единичном состоянии, и передатчик про Теперь несколько слов о том, каким образом компьютер может анализировать
должает ожидать разрешения на передачу. Приемник, приняв байт полностью до последнего линию разрешения. Дело в том, что в интерфейсе RS232 компьютера непосредственные
стопбита и записав его, например, в память, через некоторое время (назовем его временем чтение и анализ состояния самой линии RxD (т. е. лог. 0 или лог. 1) невозможны. Но, нап
реакции на конец приема — Трк), когда он полностью готов принять следующий байт, опять ример, соединив эту линию RxD с какойлибо входной линией квитирования (например
выставляет разрешение на передачу (уже следующего) байта. На временной диаграмме этот DSR), состояние которой поддается чтению, можно добиться требуемого: прочитав
факт отражен переключением линии RxD с единичного состояния в нулевое. Далее процесс (в определенное время) состояние линии DSR, можно узнать и состояние линии RxD,
повторяется. т. e. в то время, когда линия RxD используется как линия разрешения, чтение линии DSR
Необходимо отметить, что достоверность обмена может быть значительно повыше покажет ее состояние. Когда же линия RxD используется как линия данных, т. е. при
на, если передатчик сделает дополнительный анализ линии RxD на сброс разрешения. передаче информации из микроконтроллера в компьютер, состояние линии DSR просто
Как видно из временной диаграммы, сброс разрешения (т. е. установка приемником не нужно читать и анализировать, т. к. в таком режиме ее состояние не представляет
линии RxD передатчика в высокий уровень) происходит гдето в середине (по времени) никакого интереса.
передачи байта. Если передатчик проверит линию RxD на предмет сброса разрешения В обратную сторону, т. е. при передаче информации от микроконтроллера в компьютер,
(т.е. переключения ее в высокий уровень), то этот факт для передатчика будет означать, обмен информацией идет подобным же образом, т. е. логика работы аппаратной синхрони
что приемник начал принимать передаваемый передатчиком байт и именно в связи с зации остается прежней. Есть, правда, некоторые нюансы, на которых мы остановимся
этим сбросил разрешение. Другими словами, дополнительная проверка сброса разре несколько позже.
шения позволяет передатчику определить, что приемник работает «как положено» и пе Резюмируя все вышесказанное, приведем логическую блоксхему сопряжения компьюте
реключает линию RxD передатчика с высокого уровня в низкий (и обратно). Без такой ра и микроконтроллера для целей штатного режима работы при условии аппаратной синхро
проверки можно оказаться в следующей ситуации. Предположим, что приемник вообще низации обмена линиями данных (рис. 2.4.2).
не работает, и какимлибо образом линия RxD передатчика находится в разрешающем
состоянии. В этом случае передатчик будет передавать байт за байтом в «пустоту», посколь
ку он проверяет линию RxD только на предмет разрешения. Проверив же линию RxD на Рис. 2.4.2.
предмет запрета и определив, что приемник такого запрета не выдает, передатчик «мо Логическая блок!схема
сопряжения компьютера
жет сделать вывод», что приемник не работает, что линия RxD не переключается из с микроконтроллером
высокого состояния в низкое (и обратно). В связи с этим передатчик может прекратить для целей штатного режима
передачу (и выдать, например, сообщение об ошибке или какимлибо иным способом работы при аппаратной
синхронизации линиями
просигнализировать о сбое обмена). данных с одним передатчиком
И еще одно существенное замечание. Во время передачи байта, т. е. с начала старт
бита и до конца последнего стопбита, ни процессор передатчика, ни процессор приемни Как можно увидеть из приведенной схемы, линия RxD соединена с линией DSR непосред
ка не принимает никакого участия в обмене, поскольку и в компьютере, и в микроконт ственно в разъеме RS232 компьютера. Такое соединение целесообразно применять, если в
роллере этим занимается UART, т. е. аппаратные средства. Поэтому все проверки состоя примененном преобразователе интерфейса имеется только один передатчик (см. например,
ния линий, переключения их из одного состояния в другое, организация задержек (напри рис. 1.4.1.1, 1.4.4.1.4 и 1.4.4.2.2).

86 87
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ИСПОЛЬЗОВАНИЕ НОВОГО АЛГОРИТМА ОБМЕНА ИНФОРМАЦИЕЙ ПО RS232 МЕЖДУ КОМПЬЮТЕРОМ И МИКРОКОНТРОЛЛЕРОМ

Если же преобразователь интерфейса имеет 2 передатчика, то блоксхема может быть


представлена иначе (рис. 2.4.3). Как можно увидеть из блоксхемы, отсутствующее непосред
ственное соединение линий RxD и DSR (как в блоксхеме рис. 2.4.2) заменено на соответству Рис. 2.4.4.
ющее соединение этих сигналов, когда они имеют еще TTLуровни, т. е. это соединение ор Логическая блок!схема
сопряжения компьютера
ганизовано на входах 2 передатчиков. с микроконтроллерами
семейств C8051FXXX для целей
штатного режима работы
при аппаратной синхронизации
линиями данных с 2 передатчиками
Рис. 2.4.3.
Логическая блок!схема
сопряжения компьютера линия ТxD, то он уже недоступен как обычный порт вывода, и программным способом его
с микроконтроллером
для целей штатного ре! состояние изменять уже невозможно. Тем не менее, решить задачу аппаратной синхро
жима работы при аппа! низации для микроконтроллеров этого семейства возможно, но только привлекая допол
ратной синхронизации нительные аппаратные средства. Одно из решений, предложенное автором, заключается
линиями данных с
2 передатчиками в том, что нужно выбрать еще один какойлибо дополнительный цифровой порт вво
да/вывода (PX.X), состояние выхода которого можно изменять программным способом
(для этого требуется освободить порт от всех альтернативных функций) и объединить его
Использование 2 передатчиков несколько более предпочтительно, чем использова
выход с линией TxD по схеме 2И (этот вариант уже обсуждался в 1.3.9, см. рис. 1.3.9.1).
ние одного, поскольку в этом случае каждый передатчик работает только на один прием
В этом случае логическая блоксхема сопряжения компьютера с микроконтроллером
ник (на одну нагрузку, составляющую 5 кОм). При использовании же одного передатчика
(рис. 2.4.2) он работает уже на 2 приемника, каждый из которых имеет нагрузку в 5 кОм, несколько модифицируется (рис. 2.4.4).
т. е. нагрузка передатчика в этом случае составляет уже 2,5 кОм. Это несколько снижает
длительность фронта и спада сигнала передатчика, но поскольку современные микросхе
2.4.2.Подпрограммы передачи и приема байта для компьютера
мы передатчиков достаточно мощные, то к особым негативным результатам не приводит.
и микроконтроллера, использующие логику
Использование двух передатчиков имеет смысл, если они присутствуют в преобразовате
нового алгоритма обмена
ле интерфейса (не выбрасывать же их!). По блоксхеме (рис. 2.4.3) с компьютером сопря Ниже приведены подпрограммы приема и передачи байта, составленные в соответ
жено большинство микроконтроллеров, приведенных в настоящей книге, поскольку в схе ствии с логикой работы вышеизложенного алгоритма обмена и временной диаграммой
мах их сопряжения используются преобразователи, имеющие два передатчика. Как мож (рис. 2.4.1).
но догадаться, применение двух передатчиков вместо одного никоим образом не наруша Подпрограммы приведены для компьютера на языке Кларион для DOS (Clarion V.3100
ет логику алгоритма обмена. — Clarion Software Inc.), а для микроконтроллера — на 2 языках: ассемблере (8051 Macro
И еще один момент нуждается в обсуждении. Как видно из рис. 2.4.2 и 2.4.3, линия RxD Assembler Version 4.02a 2500 A.D. Software Inc, 1985) и Си (C51 — Keil Software Inc. V6.14).
микроконтроллера не требует «раздвоения», подобного линиям RxD и DSR. Это возможно
потому, что чтение состояния линии RxD микроконтроллером не вызывает никаких труднос Подпрограммы на Clarion v.3100 имеют следующий вид:
тей, поскольку эта линия является, помимо входа приемника RS232, обычным цифровым
входом, т. е. портом ввода/вывода. Точнее, этот цифровой порт микроконтроллера обладает !
! П/п ввода байта (байт в M1[i] )
альтернативной функцией — входом интерфейса RS232. !
При аппаратной синхронизации требуется не только читать состояние линии RxD, но еще INBYTE routine
и устанавливать линию TxD в то или иное состояние, соответствующее разрешению или out(3fbh,Y47h) !Установка TxD (разрешение передачи)
запрету передачи. Линию TxD компьютера возможно установить программно в произвольное loop; in(3feh,B); if band(B,2) then break.. !Ожидание стартбита (устки DSR)
состояние (установив или сбросив бит № 6 регистра управления линиями (адрес 3fbh), т. е. бит do DEL20 !Задержка 20 мкс
BREAK (см. приложение 1). out(3fbh,Y07h) !Сброс линии TxD (запрет передачи)
in(3feh,B) !Очистка регистра 3feh чтением
Что касается микроконтроллеров, то большинство из них позволяет устанавливать
loop;in(3fdh,B);if band(B,1) then break.. !Оже конца прихода байта(бит "DR"data ready)
линию TxD в произвольное состояние, как если бы она являлась обычным выходом циф in(3f8h,M1[i]) !Чтение байта данных
рового порта ввода/вывода. Исключением являются микроконтроллеры семейств !
C8051FXXX ф. Silicon Laboratories. В этих микроконтроллерах, если порт ввода/вывода ! П/п вывода байта (байт в M[i] )
выбран матрицей соединений для передачи информации по интерфейсу RS232, т. е. как !
OUTBYTE routine

88 89
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ИСПОЛЬЗОВАНИЕ НОВОГО АЛГОРИТМА ОБМЕНА ИНФОРМАЦИЕЙ ПО RS232 МЕЖДУ КОМПЬЮТЕРОМ И МИКРОКОНТРОЛЛЕРОМ

loop;in(3fdh,B);if band(B,20h);break.. !Оже готовности передатчика (transmitter empty). mov a,sbuf ;Input byte from buffer
loop;in(3feh,B);if band(B,20h);break.. !Оже разреш.передачи(установки DSR) clr ri ;Clear flag ri
out(3f8h,M[i]) !Вывод байта .endm
loop;in(3feh,B);if band(B,2);break.. !Оже запрета передaчи(сброса DSR)
loop;in(3fdh,B);if band(B,40h);break.. !Ожe выхода байта из РС(OK to send). ;
in(3feh,B) !Очистка регистра 3feh чтением ; Макрос вывода байта
!
;
OUTBYTE .macro
Подпрограммы на Си имеют следующий вид.
jb RxD,$ ;Waiting enable transfer
mov sbuf,a ;Output byte in buffer
//
jnb RxD,$ ;Waiting disable transfer.WARNING!!!
// П/ п вывода байта
// jnb ti,$ ;Waiting output last bit (flag ti)
void outbyte(unsigned char byte) { clr ti ;Clear flag ti
while (RXD); // Ожидание разрешения на передачу байта (от компьютера). .endm
SBUF=byte; // Вывод байта. ;
while (!RXD); // Ожидание запрета на передачу (от компьютера).
while (!TI); // Ожидание окончания вывода байта микроконтроллером. В качестве микроконтроллера взят один из современных — MSC1210Y5. Этот 4тактный мик
TI = 0; // Сброс флага передачи (TI). роконтроллер занимает промежуточное положение по быстродействию между микроконтролле
}
//
рами: достаточно скоростными 1тактными (например ADUC847, C8051F067/330D) и 2тактными
// П/п ввода байта (например P89LPC938), среднескоростным 6тактным (AT89C51ED2) и стандартным 12тактным
// (например AT89S8252). Для микроконтроллера MSC1210 выбранная 10мкс задержка (с учетом
unsigned char inbyte() { времени его реакции на начало передачи Трн — см. рис. 2.4.1) переключает его линию TxD
unsigned char byte; (т. е. RxD компьютера) приблизительно между 4м и 5м битом, т. е. примерно в «середине» прини
TXD=0; // Установка разрешения компьютеру передавать байт. маемого байта.
while (RXD); // Ожидание стартбита.
DEL10(); // Задержка длительностью полбайта (115200 бод).
При использовании более высокоскоростного микроконтроллера, чем MSC1210, заде
TXD=1; // Запрет компьютеру передавать байт. ржку можно немного увеличить (в компьютере — см. подпрограмму на Кларионе), например,
while(!RI); // Ожидание окончания прихода байта в микроконтроллeр. установлена задержка в 20 мкс), в противном случае — уменьшить. Необходимо только пом
byte=SBUF; // Ввод байта в микроконтроллер. нить, что точное значение задержки не так уж и важно. Главное условие, чтобы переключе
RI = 0; // Сброс флага приема байта (RI). ние линии RxD с низкого уровня в высокий (см. рис. 2.4.1) осуществлялось не ранее чем спус
return(byte); тя 1–2 бита (по времени) после начала стартбита (чтобы на такой короткий импульс среаги
}
// ровал преобразователь интерфейса), но и не позже чем за 1–2 бита до начала стопбита
(чтобы передатчик «поймал» запрет передачи).
На ассемблере представлены макросы ввода и вывода байта. В связи с тем, что в макросах зап
рещено использовать комментарии на русском языке, они приведены на английском. Надеюсь, это
2.4.3.Тестовые программы обмена информацией
между микроконтроллером и компьютером
не вызовет особых затруднений у читателя, поскольку их перевод содержится в вышеприведенных
по интерфейсу RS232, использующие логику нового алгоритма
подпрограммах на Кларионе и Си. Макросы на ассемблере даны ниже.

; 2.4.3.1. Общие положения


; Макрос ввода байта
Ниже будут приведены реально работающие программы для микроконтроллеров
;
MSC1210, ADUC834/845, P89LPC938/904, AT89C51ED2/RD2 и C8051F067/F330D, напи
INBYTE .macro
санные на языке C51 (для интересующихся будут приведены программы для некоторых мик
clr TxD ;Enable transfer
jb RxD,$ ;Waiting startbit
роконтроллеров и на ассемблере) и программа для компьютера, написанная на языке Clarion
call DEL10 ;Call delay 10 mks V3.100 и работающая в операционной системе DOS. Что касается программ для компьютера,
setb TxD ;Disable transfer работающих в ОС Win'98/XP, то они будут приведены несколько позже, поскольку, с одной
jnb ri,$ ;Waiting set flag ri стороны, в программах для ОС Win'98/XP за основу будет взята именно программа для DOS,

90 91
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ИСПОЛЬЗОВАНИЕ НОВОГО АЛГОРИТМА ОБМЕНА ИНФОРМАЦИЕЙ ПО RS232 МЕЖДУ КОМПЬЮТЕРОМ И МИКРОКОНТРОЛЛЕРОМ

с другой, — прежде чем приводить программы для Win'98/XP, необходимо будет объяснить unsigned char lenl; // Мл.байт длины строки("u.bt.lenl").
предварительные положения и соображения, без уяснения которых, по мнению автора, по }bt;
нять некоторые моменты программирования в ОС Win'98/XP будет непросто. }u;
Хотя программы для микроконтроллеров и снабжены комментариями, все же автор счел //
нужным привести краткие пояснения к каждой программе, т. к. в комментариях отражены не все
unsigned char c,j,a[80];
моменты и нюансы работы каждого конкретного микроконтроллера. В основном эти пояснения unsigned short temp_L; //Переменная для временного(temp)
будут касаться инициализации интерфейса RS232, таймеров, которые предназначены для гене //хранения длины строки.
рации скорости обмена, и некоторых других особенностей представляемых микроконтроллеров. void DEL10(void) {
for (j=0;j<10;j++);
2.4.3.2. Тестовая программа обмена для микроконтроллера MSC1210 }
Ниже приведены две тестовые программы для микроконтроллера MSC1210: первая — на
void initrs(void) { // Инициализация
Си, вторая — на ассемблере. Программы функционируют при условии сопряжения микроко SCON=0xec; // интерфейса
нтроллера MSC1210 с компьютером по схемам (рис. 1.3.5.1 и 1.3.10). Для функционирования T2CON=0x34; // RS232.
программ совместно с компьютером должна использоваться компьютерная программа, при
веденная в 2.4.3.7. В качестве генератора скорости обмена используются таймер T2 и внеш RCAP2=3; //Vобм.=115200 бод.
ний генератор с кварцевым резонатором частотой 11 059 200 Гц. Скорость обмена установ THL2=3;
лена 115 200 бод.
Программа на Си запоминает принимаемую строку из 75 байт и выводит ее обратно в том // RCAP2=36; //Vобм.=9600 бод.
же порядке, в котором байты поступили в микроконтроллер. // THL2=36;
Программа на ассемблере записывает поступившие байты в стек, а затем считывает их }
оттуда и выводит в компьютер. Поэтому байты выводятся в компьютер в обратном порядке.
void outbyte(unsigned char byte) {
while (RXD); // Ожидание разрешения на передачу байта (от компьютера).
Программа на Си SBUF=byte; // Вывод байта.
while (!RXD); // Ожидание запрета на передачу (от компьютера).
 while (!TI); // Ожидание окончания вывода байта микроконтроллером.
// Программа вывода строки байт для MSC1210, TI = 0; // Сброс флага передачи (TI).
// скорость обмена 115200 бод, кварц 11059200 Гц. }
// см. inrs115.asm
// unsigned char inbyte() {
#include "stdarg.h" unsigned char byte;
#include "stdio.h" /* для printf */ TXD=0; // Установка разрешения компьютеру передавать байт.
#include "stdlib.h" while (RXD); // Ожидание стартбита.
#include "reg1210.h" /* для RS232 */ DEL10(); // Задержка длительностью полбайта (115200 бод).
TXD=1; // Запрет компьютеру передавать байт.
// while(!RI); // Ожидание окончания прихода байта в микроконтроллeр.
// Совмещение "u.l" с "u.bt.lenl" и "u.bt.lenh". byte=SBUF; // Ввод байта в микроконтроллер.
// Переменные u.l (размерностью ushort) и RI = 0; // Сброс флага приема байта (RI).
// u.bt.lenl и u.bt.lenh (обе размерностью byte(unsigned char)) return(byte);
// перераспределяют одно и то же место в памяти микроконтроллера. }
// Порядок расположения переменных lenh(первая) и lenl(вторая)
// в структуре (struct) строго определен и при его нарушении /**************************************************/
// вся конструкция совмещения не работает !!! void main(void)
// {
union{ initrs();
unsigned short l; // Длина строки("u.l"). P3DDRL=0x07;
struct{ REN=1; // Установка на прием.
unsigned char lenh; // Ст.байт длины строки("u.bt.lenh").

92 93
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ИСПОЛЬЗОВАНИЕ НОВОГО АЛГОРИТМА ОБМЕНА ИНФОРМАЦИЕЙ ПО RS232 МЕЖДУ КОМПЬЮТЕРОМ И МИКРОКОНТРОЛЛЕРОМ

; Основная программа inc dptr


; mov a,r1
.org 0060h cjne a,dph,spin
mov sp,#20h mov a,r0
MAIN: cjne a,dpl,spin
; ;
; Вывод байт по посл. порту
; ;
; Инициал. посл. порта clr REN ;Запрет приема.
; spout: pop a
mov SCON,#11101100b ;8 бит,2 стопа,REN=0(запрет приема ReciveENable=0), OUTBYTE
;TI=0,RI=0,Vобм определяется Т1 или Т2, djnz r0,spout
;SM1=SM2=1 режим 3. RB8=TB8=1. ;
; ; Ввод команды продолжения работы
;Инициализация таймерa T2 — как таймера. ;
; setb REN ;Разрешение приема.
mov T2CON,#00110100b; TF2=0,EXF2=0,RCLK=1,TCLK=1,EXEN2=0, IB: INBYTE
; TR2=1start,CNT2=0,CAP2=0. cjne a,#40h,E
; jmp START
mov RCAP2H,#0ffh ;Fобм.=Freq/(32*(65536(RCAP2H,RCAP2L)))
;65536RCAP2H,RCAP2L=6553665533=3 (253=fch) E: mov 0f2h,#0
jmp $
mov RCAP2L,#3 ;Fобм.=11059200/(32*3)=115200 бод. ;
DEL10 mov b,#10
;mov RCAP2L,#6 ;Fобм.=22118400/(32*6)=115200 бод. djnz b,$
;mov RCAP2L,#2 ;Fобм.= 7372800/(32*2)=115200 бод. ret
;mov RCAP2L,#1 ;Fобм.= 3686400/(32*1)=115200 бод. ;
;mov RCAP2L,#36 ;65536RCAP2H,RCAP2L=65536(65536,(25636))=36 .end
;Fобм.=11059200/(32*36)=9600 бод. ;
;mov RCAP2L,#12 ;Fобм.= 3686400/(32*12)=9600 бод.
2.4.3.3. Тестовая программа обмена
для микроконтроллеров ADUC847/834
mov PCON,#80h
mov CKCON,#20h Ниже приведены две тестовых программы для микроконтроллеров ADUC847/834. Пер
mov P3DDRL,#07h вая — на Си, вторая на ассемблере. Программы функционируют при условии сопряжения
; микроконтроллеров с компьютером по схемам (рис. 1.3.6.1 и 1.3.10). Для функционирования
;Ввод байт по посл. порту программ совместно с компьютером должна использоваться компьютерная программа, при
; веденная в 2.4.3.7. В качестве генератора скорости обмена используется таймер T3 и внеш
START: setb REN ;Разрешение приема. ний генератор с кварцевым резонатором частотой 32 768 Гц.
Установка одной и той же скорости обмена (в данном случае 115 200 бод) для микроконт
mov dptr,#0
роллеров ADUC847 и ADUC834 несколько отличается. Различие проявляется в значении реги
INBYTE
mov r0,a ; Мл. байт длины
стра T3CON. При скорости обмена в 115 200 бод T3CON равен 0x82 для ADUC847 и 0x81 для
INBYTE ADUC834. В программе установлена скорость обмена в 115 200 бод для микроконтроллера
mov r1,a ; Ст. байт длины ADUC847.
Подпрограмма задержки длительностью по времени в полбайта, которую вызывает
spin: INBYTE; Байт в a макрос ввода байта, использует разные максимальные значения итерационного цикла:
; для ADUC834 — 7, для ADUC847 — 20.
push a Программа на Си запоминает принимаемую строку из 75 байт и выводит ее обратно в том
; же порядке, в котором байты поступили в микроконтроллер.

96 97
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ИСПОЛЬЗОВАНИЕ НОВОГО АЛГОРИТМА ОБМЕНА ИНФОРМАЦИЕЙ ПО RS232 МЕЖДУ КОМПЬЮТЕРОМ И МИКРОКОНТРОЛЛЕРОМ

mov sbuf,a ;Output byte in buffer mov dptr,#0


jnb RxD,$ ;Waiting disable transfer.WARNING!!! INBYTE
jnb ti,$ ;Waiting output last bit (flag ti) mov r0,a ; Мл. байт длины
clr ti ;Clear flag ti INBYTE
.endm mov r1,a ; Ст. байт длины
;
.DATA spin: INBYTE; Байт в a
; ;
; Переменные push a
; ;
PLLCON equ 0d7h ; Умножитель частоты для работы процессора inc dptr
T3FD equ 09dh mov a,r1
T3CON equ 09eh cjne a,dph,spin
; mov a,r0
.CODE cjne a,dpl,spin
.org 0000h ;Вектор прерывания по RST ;
jmp MAIN ; Вывод байт по посл. порту
.org 0003h ;Вектор прерывания по INT0 ;
reti clr REN ;Запрет приема.
.org 001bh ;Вектор прерывания по TF1 spout: pop a
reti OUTBYTE
.org 0053h ;вектор прерывания от TIC djnz r0,spout
reti ;
; ; Ввод команды продолжения работы
; Основная программа ;
; setb REN ;Разрешение приема.
.org 0060h IB: INBYTE
mov sp,#20h cjne a,#40h,E
jmp START

E: jmp $
MAIN: mov PLLCON,#0h ;
; DEL7 mov b,#20 ;7ADUC834,20ADUC847
djnz b,$
; ret
; Инициал. посл. порта ;
; .end
;
;
;Инициализация таймерa T3 для генерации бод. 2.4.3.4. Тестовая программа обмена
; для микроконтроллеров AT89C51ED2(RD2)
mov T3CON,#82h ;#82hдля ADUC847, #81hдля ADUC834|115200
mov T3FD,#2dh Ниже приведены две тестовых программы для микроконтроллера AT89C51ED2: первая — на
; Си, вторая — на ассемблере. Программы функционируют при условии сопряжения микроконтрол
mov SCON,#40h;52h лера с компьютером по схемам (рис. 1.3.7.1 и 1.3.10). Для функционирования программ совмест
; но с компьютером должна использоваться компьютерная программа, приведенная в 2.4.3.7.
;Ввод байт по посл. порту В качестве генератора скорости обмена используются специальный генератор скорости
;
обмена (Baud Rate Generator — BRG) и внешний кварцевый резонатор частотой 11 059 200 Гц.
START: setb REN ;Разрешение приема.
Скорость обмена установлена 115 200 бод.

100 101
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ИСПОЛЬЗОВАНИЕ НОВОГО АЛГОРИТМА ОБМЕНА ИНФОРМАЦИЕЙ ПО RS232 МЕЖДУ КОМПЬЮТЕРОМ И МИКРОКОНТРОЛЛЕРОМ

Программа на Си запоминает принимаемую строку из 75 байт и выводит ее обратно в том return(byte);


же порядке, в котором байты поступили в микроконтроллер. }
Программа на ассемблере записывает поступившие байты в стек, а затем считывает их /**************************************************/
оттуда и выводит в компьютер. Поэтому байты выводятся в компьютер в обратном порядке. void main(void)
{
initrs();
Программа на Си

REN=1; // Установка на прием.
//
// Программа вывода строки байт для AT89C51ED2,
START:
// скорость обмена 115200 бод, кварц 11059200 Гц.
// см. inrs_ed2.asm
lenl=inbyte();
//
lenh=inbyte();
#include "stdarg.h"
#include "stdio.h" /* для printf */
l=lenh*256+lenl;
#include "stdlib.h"
#include "at89c51xd2.h"
for(i=0;i<l;i++){
unsigned char c,j,lenl,lenh,a[80];
a[i]=inbyte();
int i,l;
}
REN=0; //Передача.
void DEL7(void) {
for (j=0;j<7;j++) {}
for(i=0;i<l;i++){
}
outbyte(a[i]);
}
void initrs(void) {
REN=1; //Прием.
CKCON0=1;
c=inbyte();
PCON=0x80;
if (c==0x40) goto START;
SCON=0xec;
E:
BRL=250; //115200 бод
goto E;
BDRCON=0x1f;
}
}

void outbyte(unsigned char byte) {


Программа на ассемблере

while (RXD); // Ожидание разрешения на передачу байта (от компьютера).
;
SBUF=byte; // Вывод байта.
; Программа приема MK AT89C51ED2 строки символов по RS232 (с передачей
while (!RXD); // Ожидание запрета на передачу (от компьютера).
; длины строки); и вывода символов из МК в компьютер.
while (!TI); // Ожидание окончания вывода байта микроконтроллером.
; Fкв.=11059200 Гц, X2режим. Скорость обмена — 115200 и 9600 бод.
TI = 0; // Сброс флага передачи (TI).
; Синхронизация — с помощью линий TxD и RxD.
} ; Для проверки использовать программы OUTBYTEC.EXE(CLA) и OUTBYTE1.EXE(BAS).
;
unsigned char inbyte() { ;Макрос ввода байта
unsigned char byte; ;
TXD=0; // Установка разрешения компьютеру передавать байт. ; В МАКРОСАХ НЕЛЬЗЯ ИСПОЛЬЗОВАТЬ РУССКИЙ ЯЗЫК В КОММЕНТАРИЯХ !!!!!!!
while (RXD); // Ожидание стартбита. ;
DEL7(); // Задержка длительностью полбайта (115200 бод). ; Алгоритм ввода байта
TXD=1; // Запрет компьютеру передавать байт. ;
while(!RI); // Ожидание окончания прихода байта в микроконтроллeр. INBYTE .macro
byte=SBUF; // Ввод байта в микроконтроллер. clr TxD ;Enable transfer
RI = 0; // Сброс флага приема байта (RI). jb RxD,$ ;Waiting startbit

102 103
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ИСПОЛЬЗОВАНИЕ НОВОГО АЛГОРИТМА ОБМЕНА ИНФОРМАЦИЕЙ ПО RS232 МЕЖДУ КОМПЬЮТЕРОМ И МИКРОКОНТРОЛЛЕРОМ

reti OUTBYTE
.org 001bh ;Вектор прерывания по TF1 djnz r0,spout
reti ;
.org 0053h ;вектор прерывания от TIC ; Ввод команды продолжения работы
reti ;
; setb REN ;Разрешение приема.
; Основная программа IB: INBYTE
; cjne a,#40h,E
.org 0060h jmp START
; mov sp,#20h
MAIN: E: jmp $
; .end
; org $ ;
mov sp,#20h
2.4.3.6 Тестовая программа обмена
; для микроконтроллеров C8051F067/330D
; Инициал. посл. порта
В отличие от ранее рассмотренных микроконтроллеров, программирование микроконт
;
роллеров C8051FXXX имеет свои особенности, основные из которых сводятся к следующему:
SPINIT: mov SSTAT,#00h ;Стандартный 51совместимый RS232.
mov P1M1,#02h ;¦Вместе это означает: ¦ 1. Определить источник тактирования микроконтроллера (SYSCLK) — либо внешний ге
mov P1M2,#01h ;¦TxDpush/pull_output, RxDinput.¦ нератор (например кварцевый), либо внутренний.
mov SCON,#40h ;Все биты SCON,кроме SM1,равны 0, SM1=1. 2. Определить какие выводы микроконтроллера будут принимать участие в работе по
mov BRG0,#30h ;30h=48.Vobm=CCLK/[(BRG1*256+BRG0)+16]= матрице соединений.
mov BRG1,#00h ;7372800/[(0*256+48)+16]=7372800/64=115200. 3. Запретить сторожевой таймер (либо написать и включить в текст своей программы
mov BRGCON,#03h ;Разрешение SBRGS и BRGEN.
специальную программу сторожевого таймера). Без этого ни одна программа рабо
;
тать не будет, поскольку сторожевой таймер по умолчанию включен.
;Ввод байт по посл. порту
; 4. Выводы микроконтроллера, использующиеся как альтернативные функции портов
START: setb REN ;Разрешение приема. ввода/вывода, нельзя больше использовать в качестве портов вывода. Например,
если использовать порт P0.0 в качестве линии TxD (по умолчанию в C8051067), то эту
mov dptr,#0 линию (а именно P0.0) нельзя устанавливать в произвольное состояние командами
INBYTE Си: TxD=0 или TxD=1.
mov r0,a ; Мл. байт длины
INBYTE
Ниже приведены две тестовых программы на Си для микроконтроллеров C8051F067
mov r1,a ; Ст. байт длины и C8051F330D. Программы функционируют при условии сопряжения микроконтроллеров
с компьютером по схемам (рис. 1.3.9.1 и 1.3.10). Для функционирования программ совме
spin: INBYTE; Байт в a стно с компьютером должна использоваться компьютерная программа, приведенная в
; 2.4.3.7.
push a В программе для C8051F067 качестве генератора скорости обмена используется ге
; нератор с внешним кварцевым резонатором с частотой 11 059 200 Гц, в программе для
inc dptr C8051F330D — внутренний генератор частотой 24,5 МГц. Скорость обмена установлена в
mov a,r1 115 200 бод.
cjne a,dph,spin И та, и другая программа запоминает принимаемую строку из 75 байт и выводит ее обрат
mov a,r0
но в том же порядке, в котором они поступили в микроконтроллер.
cjne a,dpl,spin
;
; Вывод байт по посл. порту Программа на Си для C8051F067
; 
clr REN ;Запрет приема. //
spout: pop a // Программа вывода строки байт для C8051F067,

112 113
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ИСПОЛЬЗОВАНИЕ НОВОГО АЛГОРИТМА ОБМЕНА ИНФОРМАЦИЕЙ ПО RS232 МЕЖДУ КОМПЬЮТЕРОМ И МИКРОКОНТРОЛЛЕРОМ

OSCICN = 0x83; //Инициализация внутреннего //заполнения переменных


RSTSRC = 0x06; //генератора. //u.bt.lenl и u.bt.lenh.
//
XBR0 = 0x01; // UART разрешен. for(u.l=0;u.l<temp_L;u.l++){ //Прием из компьютера
XBR1 = 0x40; // Матрица выходов разрешена. a[u.l]=inbyte(); //очередного
P0MDOUT |=0x10; // TxD0двухтактный выход, RxD0вход. } //байта строки.
P1MDOUT |=0x80; // Tx0 — двухтактный выход. //Изменение u.l (например, u.l++)
// //влечет за собой автоматическое
SCON0=0x10; //Инициализация RS232 (UART0). //и соответственное изменение
TH1=(SYSCLK/BAUDRATE/2); //Синхронизация от //u.bt.lenl и u.bt.lenh.
CKCON |= 0x08; //таймера T1. //Если u.l — адрес памяти,
TL1=TH1; //то u.bt.lenl и u.bt.lenh 
TMOD &= ~0xf0; //соответственно младший
TMOD |= 0x20; //и старший байты этого адреса.
TR1=1;
// TI0=1; REN0=0; //Установка RS232 на передачу.
}
for(u.l=0;u.l<temp_L;u.l++){ //Передача в компьютер
void outbyte(unsigned char byte) { outbyte(a[u.l]); //очередного
while (RX0); // Ожидание разрешения на передачу байта (от компьютера). } //байта строки.
SBUF0=byte; // Вывод байта.
while (!RX0); // Ожидание запрета на передачу (от компьютера). REN0=1; //Установка RS232 на прием.
while (!TI0); // Ожидание окончания вывода байта микроконтроллером.
TI0 = 0; // Сброс флага передачи (TI0). c=inbyte(); //Если принятый символ="@",
} if (c==0x40) goto START; //то продолжение работы,
E: //иначе — конец.
unsigned char inbyte() { goto E;
unsigned char byte; }
TX0=NUL; // Установка разрешения компьютеру передавать байт. //
while (RX0); // Ожидание стартбита.
DEL20(); // Задержка длительностью полбайта (115200 бод).
TX0=ONE; // Запрет компьютеру передавать байт.
while(!RI0); // Ожидание окончания прихода байта в микроконтроллeр. 2.4.3.7. Тестовая программа обмена для компьютера в ОС DOS
byte=SBUF0; // Ввод байта в микроконтроллер.
RI0 = 0; // Сброс флага приема байта (RI0). Для функционирования любой из тестовых микроконтроллерных программ, приведен
return(byte); ных в 2.4.3.2 (для MSC1210), 2.4.3.3 (для ADUC847/834), 2.4.3.4 (для AT89C51ED2/RD2),
} 2.4.3.5 (для P89LPC938/904) и 2.4.3.6 (для C8051F067/330D) написана компьютерная
/**************************************************/ программа на языке Clarion V3.100 Hello.cla, работающая в операционной системе DOS.
void main(void) Программа инициализирует интерфейс RS232 компьютера (порт COM 1:N,8,1,115 200),
{ запускает микроконтроллер, передает в него строку из 75 байт (представляющую собой
initrs();
символы латинского и русского алфавита), принимает эту строку от микроконтроллера и
REN0=1; // Установка на прием.
обе строки выводит (для сравнения) на экран монитора. В программу включена (INCLUDE)
START: опция графического интерфейса пользователя (Graphic User Interface). Этот интерфейс
u.bt.lenl=inbyte(); //Прием мл.байта длины строки. позволяет работать в оконном режиме и поддерживает мышь (аналогично всем програм
u.bt.lenh=inbyte(); //Прием ст.байта длины строки. мам для ОС Windows).
temp_L=u.l; //Запоминание длины строки В качестве алгоритма обмена программа использует приведенный в 2.3.1 новый алго
//в переменной temp_L. ритм обмена, разработанный автором. Ниже приведен текст программы Hello.cla, а вслед за
//Переменная u.lдлина строки(ushort) ним — ее файлпроект.
//заполняется автоматически после

118 119
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРОГРАММИРОВАНИЕ ИНТЕРФЕЙСА RS232 В ОС WINDOWS98/XP

!in(3feh,B) !Очистка регистра 3feh чтением Нажатие кнопки «Продолжить» (мышью или клавишей Enter) приведет к повторному
loop;in(3feh,B);if band(B,2);break.. !Оже запрета передaчи(сброса DSR) запуску программы; количество запусков отражает переменная k в левом верхнем углу.
loop;in(3fdh,B);if band(B,40h);break.. !Ожe выхода байта из РС(trasmitter holding В данном случае k = 146.
register empty.OK to send). Нажатие кнопки «Выход» — к выходу из программы.
in(3feh,B) !Очистка регистра 3feh чтением
!

DEL100MS routine
2.5. Программирование интерфейса RS232
T#=CLOCK();loop while CLOCK()T#<10. !Задержка 0,1 с. в ОС Windows98/XP
DEL200MS routine
T#=CLOCK();loop while CLOCK()T#<20. !Задержка 0,2 с. 2.5.1. Предварительные замечания
DEL50 routine
loop 15000 times Программирование интерфейса RS232 в ОС Windows не является чемто сверъесте
. ственным. Внешний вид программ, написанных на идентичных языках программирова
DEL1400 routine ния (например Clarion v3.100 для DOS и Clarion v.6.0 для Windows), также практически
loop j=1 to 1400 одинаков. Исключением (по крайней мере для языка Кларион) является название экран
. ной формы. Если в Кларионе для DOS экранная форма называется SCREEN (Экран), то
DEL20 routine для Windows — Window (Окно). Структуры данных экранных форм также идентичны. Пре
loop 40000 times
имущество экранной формы Window перед SCREEN заключается в том, что она обладает
.
большей универсальностью, имеет больше возможностей и, самое главное, более авто
!
матизирована. Если посмотреть на тексты всех программ, приведенных в книге, то мож
но заметить, что структура Window в них уж очень «навороченная», поскольку там исполь
Файлпроект Hello.pr
 зуются несколько шрифтов и масса разной другой информации. На первый взгляд кажет
#system auto exe ся, что «грамотно» написать структуру экранной формы Window очень сложно и можно
#model extended понаделать массу ошибок. Но на самом деле, ее писать вообще не требуется (!), посколь
ку она генерируется языком Кларион автоматически. Необходимо только выбрать раз
#pragma data(stack_size=>24576,threshold=>4096) мер окна (не в тексте программы, а буквально на экране), установить на нем соответ
#pragma check(stack=>on,index=>on) ствующие кнопки и другие параметры и атрибуты. Все это делается мышью с уже готовым
#pragma link_option(map=>off,case=>on) (выбранным по умолчанию) окном. После того как окно «устраивает» программиста, он
#compile hello.cla /check(stack=>off,nil_ptr=>off,index=>off) нажимает определенную кнопку и экранная форма Window автоматически генерируется
/debug(vid=>off,line_num=>off) (точнее генерируется ее текст на языке Кларион). Более полную информацию по этому
#pragma link(%clapfx%dos.lib)
вопросу можно найти в документации по языку. Все остальные «вещи» в программах для
#pragma link(%clapfx%xgui.obj)
DOS и Windows программируются практически одинаково.
#set exports='hello'
#link hello Есть, правда, одно свойство языка Clarion 6.0 (по сравнению, например, с языком
Clarion5.5 и более ранними версиями), которое необходимо учитывать. Язык Clarion6.0 под
После запуска программы на экран выводится окно (рис. 2.4.3.7). держивает так называемую threadmodel, которая связана с многозадачностью операцион
ной системы (в основном это касается Win'XP). Слово «thread» можно с большим приближе
Рис. 2.4.3.7.
нием перевести как «некий процесс». Если в программе «одновременно идут» несколько
Внешний вид окна процессов, то Clarion 6.0 поддерживает такие задачи. Более подробно с подобными вопро
программы сами можно ознакомиться в руководстве по этому языку.
Здесь же автору хотелось бы предостеречь программистов от одной (нетривиальной)
ошибки, которую можно сделать, в результате чего программа работать не будет.
Рассмотрим фрагмент программы, который присутствует практически во всех задачах
(при программировании в ОС Windows):

124 125
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРОГРАММИРОВАНИЕ ИНТЕРФЕЙСА RS232 В ОС WINDOWS98/XP

START В первом варианте при нажатии кнопки «OK» переменной p присваивается значение 1
 (p=1), и далее следует оператор break, который организует выход из процесса (thread'a) —
 accept … end. При нажатии кнопки «Cancel» переменной p присваивается значение 0
— (p=0) и далее точно также следует оператор break , который аналогично организует выход
accept из процесса (thread'a) — accept … end. После выхода из процесса accept … end ана
! лизируется переменная p, и в зависимости от ее значения программа переходит к метке
case accepted() START (при p=1) либо к метке Е (при p=0), по которой осуществляется выход из программы.
of ?Ok
В отличие от первого варианта второй более простой. Там нет никакой переменной p, и
p=1
ветвление происходит сразу: при нажатии кнопки «ОК» программа переходит к метке START
break
of ?Cancel (goto START), а при нажатии кнопки «Cancel» — к метке E (goto E), и далее осущес
p=0 твляется выход из программы.
break С точки зрения синтаксиса языка оба варианта безупречны. Мало того, в Clarion 5.5 (и в
end ! ot case Clarion v.3.100 для DOS) оба варианта будут безукоризненно работать и не будут вызывать ни
! каких проблем.
end ! от accept В Clarion6.0 второй вариант может в лучшем случае остановить программу, которая не бу
дет подавать никаких «признаков жизни», и выход из ситуации можно осуществить, нажав
if p=0 then goto E. классическое «CTRLALTDEL», а затем «завершить процесс». В худшем случае второй вариант
может «повесить» компьютер, да так, что выход из ситуации можно будет осуществить только,
goto START
нажав кнопку «RESET» на системном блоке. Отчего это? А от того что цикл accept…end — это
процесс (thread), который «по умолчанию» организует Clarion6.0, выход из которого (процесса)
E return
во втором варианте не завершает его. А незавершенный процесс будет продолжаться бес
конечно (вот отчего компьютер может «повиснуть»!).
В приведенном фрагменте используется конструкция accept…end, которая применяет
В первом варианте при любом условии (неважно «OK» или «CANCEL») вначале произво
ся для определения ветвления программы в зависимости от нажатия кнопок «OK» или
дится явное завершение процесса accept…end, а затем, когда процесс accept…end за
«Cancel»(Выход). Эти кнопки расположены внизу любого окна. Нажатие кнопки «OK» приведет
вершен, уже анализируется переменная p и в зависимости от ее значения осуществляется со
к тому, что в программе будет осуществлен переход к метке START. Нажатие кнопки «Cancel»
ответствующий переход. Но — и в этом вся соль — этот анализ происходит уже после того, как
приведет к переходу к метке E, т. е. к выходу из программы. Конструкция на первый взгляд до
процесс accept…end завершен.
вольно тривиальная и может быть, например, легко упрощена. Например так, как это сделано
Столь подробное объяснение приводится здесь для того, чтобы незадачливый програм
в программе на Кларионе для DOS (см. 2.4.3.7):
мист «не попался».
START Но это лишь исключительный случай. В основном (еще раз повторюсь), программы в Кла
 рион для DOS и Windows отличаются очень мало.

— 2.5.2. Варианты программирования интерфейса RS232 в Win'98/XP
accept
Как уже упоминалось, программирование интерфейса RS232 в операционных системах
!
Windows возможно двумя способами. Первый способ — использование функций API (Application
case accepted()
of ?Ok Program Interface) — программный интерфейс для разработки приложений. Второй способ — ис
goto START пользование прямых команд ввода/вывода в порт (в данном случае — RS232 или COMпорт).
of ?Cancel Использование функций API — стандартный путь, на который указывают все документиро
goto E ванные источники по программированию в Windows. Применение APIфункций наталкивается
end ! ot case на ряд проблем. В частности, APIфункции работают очень медленно, и, если речь идет о быст
! рой реакции на какоелибо кратковременное (например, несколько микросекунд) внешнее
end ! от accept воздействие на порт RS232, то функции API не успевают отследить такое воздействие. Кроме
E return того, некоторые функции работают с явными ошибками, т. е. либо выполняют не совсем те
действия, которые, например, указаны в описании на конкретную функцию API, либо выполня
В чем отличие этих двух вариантов? ют дополнительные действия, которые не описаны.

126 127
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРОГРАММИРОВАНИЕ ИНТЕРФЕЙСА RS232 В ОС WINDOWS98/XP

Использование прямых команд ввода/вывода в порт также имеет свои проблемы (на Для получения параметров уже работающего порта можно использовать функцию
них мы остановимся позже). Однако программирование интерфейса прямыми командами GetCommState — получить статус порта. Эта функция возвращает handle порта, его структу
ввода/вывода в порт хорошо известно, поскольку используется в DOS. Кроме того, прямые ру (PortStruct) и претензий не вызывает.
команды ввода/вывода в порт выполняются очень быстро, т. к. это «машинные» кoманды Для передачи данных по последовательному порту можно использовать две функции API:
процессора. Они позволяют отследить самые быстротекущие процессы, происходящие с ин TransmitCommChar (послать символ через COMпорт), которая выводит в порт один байт
терфейсом RS232. или WriteFile (запись файла), которая может выводить как массив (буфер) байт, так и все
В связи с вышеизложенным, рассмотрим программирование интерфейса RS232 вначале го один байт. Эти функции не вызывают претензий и работают правильно.
с помощью функций API, а затем — с помощью прямых команд ввода/вывода в COMпорт. Чтение информации из порта возможно только функцией ReadFile. Эта функция может
прочитать из порта либо один байт, либо массив (буфер) байт только в том случае, если этот байт
2.5.3. Программирование интерфейса RS232 с помощью функций API (или массив байт) поступил в COMпорт. В противном случае функция возвращает ошибку и мо
жет, кроме того, «повесить» компьютер на неопределенно долгое время, если байт в порт не
Рассмотрим кратко те функции API, которые имеют непосредственно отношение к програм
поступал. При чтении, например, одного байта, размер входного буфера уменьшается на 1. Раз
мированию интерфейса RS232 в 32разрядном режиме. Полное описание всех функций API
мер входного буфера указывается в функции SetupComm (установка COMпорта), но если, нап
можно найти в MSDN (об этом уже говорилось ранее).
ример, в порт поступает байт больше, чем указанный размер буфера (например 1), то байты не
Прототипирование функций API на Clarion 6.0 приводится в программе «Hello.clw», напи
теряются, а накапливаются в буфере, и размер буфера растет. Этот факт является злейшей
санной для работы в Windows98/XP (и приведенной ниже). Там же можно найти числовые
ошибкой, и исправлять ее пока никто не собирается. Возможно, до исправления этой ошибки в
значения констант, использующихся в APIфункциях. Необходимо отметить, что в Clarion 5.5
и 6.0 есть программа (WINAPI.EXE), в которой также описаны прототипы и значения кон конце концов и доберутся разработчики WindowsXP (или последующих версий Windows).
стант APIфункций. Некоторые из них в этой программе неверны, поэтому пользоваться ими Функция PurgeComm (очистка COMпорта) предусмотрена для очистки входного буфера
от поступивших байт, если, например, они не нужны. Очистить входной буфер можно, приме
нужно с осторожностью.
нив ту же функцию ReadFile. Если указать количество байт для чтения равным 1, то для
Первой функцией API, которой должно предваряться программирование RS232, является
очистки буфера размером в 10 байт необходимо 10 раз вызвать функцию ReadFile, если же
функция открытия порта — CreateFileA (создать файл). Она возвращает «hаndle» порта —
равным 10, то эту функцию необходимо вызвать 1 раз.
числовое значение, которое операционная система приписывает открытому порту. Дословно
У читателя может возникнуть вопрос: а зачем вообще очищать входной буфер? Если в порт
«handle» — ручка (потянув за которую можно «открыть» порт). Функция CreateFileA работа
приходит 10 байт, то и читать нужно 10 байт. Здесь несколько причин.
ет правильно и претензий не вызывает.
Вопервых, одним из параметров функции CreateFileA, открывающей COMпорт,
После открытия порта необходимо обратиться к функции построения контрольного блока
является 5й по счету параметр (всего их 7), который именуется CreationDisposition
COMпорта: BuildCommDCBA, в которой требуется перечислить параметры порта (скорость
(создание диспозиции) и который должен принимать значение Open_Existing (т. е. отк
обмена, формат данных, количество стопбит и т. п.). Эта функция включает в себя два пара
рыть существующий). Это означает, что открывается COMпорт со своим, уже построен
метра: ControlString и PortStruct.
ным, контрольным блоком (DCB), у которого все параметры приняты по умолчанию и, в
ControlString — строка символов, которая, например, может принимать следующее
частности, состояния линий квитирования DTR и RTS, как правило, установлены в высо
значение: ControlString='Com1:115 200,N,8,1', означающее, что будет открыт порт
кий уровень. После открытия порта (т. е. после того как отработала функция
COM1 (который будет работать на скорости 115 200 бод), бит паритета не используется, коли
CreateFileA), но перед тем как будут выполнены функции BuildCommDCBA и
чество бит данных — 8 и стопбит — 1.
SetCommState, в которых, например, линии DTR и RTS должны быть в состоянии сброса
Параметр PortStruct — это массив байт, который определяет более полно струк
(т. е. низкого уровня), эти линии установятся в высокий уровень и будут в нем находиться
туру работы COMпорта и в который, в частности, входят параметры из
до тех пор, пока функции BuildCommDCBA и SetCommState не отработают. После того
ControlString (скорость, бит паритета, количество бит данных и стопбит). Так вот,
как функции BuildCommDCBA и SetCommState отработают, состояния линий DTR и RTS
если, например, указать в ControlString скорость 115 200, а в PortStruct скорость установятся уже в низкий уровень. Таким образом, уровни напряжений на линиях DTR и
9600, то порт будет работать на скорости 9600 бод. Если же в ControlString указать RTS кратковременно перейдут из низкого состояния в высокий и обратно. Если использу
9600, а в PortStruct 115 200, то скорость работы порта может принять непредсказуе ется гальванически развязанный интерфейс с питанием от линий RTS и DTR, то на линии
мое значение. По этой причине изменять в PortStruct параметры, установленные RxD появятся несколько импульсов. Поскольку это — линия данных, то, как следствие, в
в ControlString, не рекомендуется. буфер COMпорта введутся несколько байт (1–3), которые (это уже понятно) являются
Необходимо отметить, что функция BuildCommDCBA не производит никаких действий с «бросовыми» и которые необходимо сбросить (т. е. очистить от них приемный буфер).
портом; в ней только перечисляется, какие параметры порта необходимо установить, но уста Сколько этих байт введется и сколько раз надо применить функцию ReadFile, чтобы
новку этих параметров функция не производит. очистить буфер, — с точностью сказать невозможно. Если, предположим, ввелось
Для установки параметров, указанных в функции BuildCommDCBA, в COMпорт исполь 3 байта, а функцию ReadFile применили 2 раза, то в буфере будет «сидеть» один невер
зуется функция SetCommState (установить статус порта). Эта функция претензий не вызы ный байт. Если же ввелось 2 байта, а функцию применили три раза, то компьютер «повис
вает и работает правильно. нет» и будет «ждать» прихода третьего байта (который может не прийти вовсе!).
128 129
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРОГРАММИРОВАНИЕ ИНТЕРФЕЙСА RS232 В ОС WINDOWS98/XP

Вовторых, если опять же используются развязки с питанием от линий квитирования, то вить указанные линии в определенное состояние (какую конкретно и в какое состояние — ука
при установки этих линий в соответствующее состояние (уже по программе) на линии дан зывается в параметрах для этой функции;
ных (RxD) опять может возникнуть несколько импульсов и во входной буфер опять введутся 2) SetCommBreak (установка сигнала Break) — устанавливает линию TxD в единичное
несколько байт. Это приведет к ситуации, описанной выше. состояние (высокий уровень)
Эти две причины являются некоторым препятствием к применению таких гальванических 3) ClearCommBreak (сброс сигнала Break) сбрасывает линию TxD в нулевое состояние.
развязок, если для программирования RS232 используются функции API. Как видно, функция EscapeCommFunction дублирует две последних.
Втрeтьих, если сигнал DTR используется для сброса и запуска микроконтроллера (т. е. ес Для чтения состояния входных линий DSR, CTS, DCD и RI существует функция
ли он управляет сигналом RST), то при кратковременном пребывании сигнала DTR в высоком GetCommModemStatus (получить статус модема). Эта функция поразному работает в Windows98
уровне микроконтроллер может запуститься и изменить (уже по своей программе) состояние и WindowsXP. Если, например, линия DSR соединена с линией RxD и по ней поступает какаялибо ин
линии RxD (например, дать разрешение на передачу байта). Это приведет к поступлению еще формация, то при вызове этой функции в Windows 98 она даст правильный результат. В Windows XP
одного (неверного) байта во входной буфер. По этой причине, даже если не используются в такой ситуации эта функция ведет себя непредсказуемо и пользоваться ей не рекомендуется.
гальванические развязки или используются, но питаются энергией от отдельного источника Для чтения состояния указанных линий (точнее — для проверки факта изменения этих
питания, в микроконтроллере желательно предусмотреть некоторую (небольшую) аппаратную, состояний) и для других целей используются совместно две функции API — SetCommMask
либо программную задержку для исключения этого эффекта. (установка маски COMпорта) и WaitCommEvent (ожидание наступления события COMпор
И наконец вчетвертых. При использовании алгоритма обмена по RS232, применяю та). Эти функции работают правильно и претензий не вызывают, однако во многих справочни
щего синхронизацию по линии RxD для разрешения и запрещения компьютеру передавать ках и руководствах приводится неправильное толкование их совместного функционирования.
очередной байт, в буфер опять будут вводиться байты, правда, в этом случае их количест Функция SetCommMask устанавливает так называемую маску порта, в которой в качест
во уже строго определено и равно в точности тому количеству байт, синхронизацию поступ ве параметра или параметров указываются те биты, которые отвечают за наступление того
ления которых и обеспечивает такой алгоритм. Если, например, из компьютера в микроко или иного события. Если требуется отследить одно событие, то указывается один бит (точнее
нтроллер передается 75 байт, с 2 байтами длины (т. е. всего 77), а принимается также его название), если несколько — то несколько бит.
75 байт, то ясно, что первые 77 байт, которые ввелись в буфер, необходимо очистить, при Функция WaitCommEvent выполняет 2 задачи. 1я задача — при наступлении одного из
менив функцию ReadFile 77 раз (читая по 1 байту) или 1 раз (читая сразу 77 байт). После указанных в функции SetCommMask событий она выдает ненулевое значение. Для определе
этого следующий прочитанный байт (78й) уже будет верен. ния, какое именно событие произошло, функция возвращает параметр, по которому это мож
Для определения сколько байт находится во входном буфере, существует структура но определить, прочитав этот параметр. Это ее 2я задача.
COMSTAT (статус COMпорта), в которой это количество байт присутствует в переменной Если требуется отследить наступление каждого из 2 событий, но в разное время, то
CbInQue (размер в байтах входной очереди). Структуру COMSTAT, в частности, заполняет API в функции SetCommMask необходимо указать 2 события, вызвать 2 раза функцию
функция ClearCommError (сброс ошибки COMпорта). Поскольку, как указывалось, в неко WaitCommEvent, в которой каждый раз необходимо проверить статус и сравнить его с
торых случаях предсказать точное значение ненужных байт нельзя, то возможно применение битами того или иного события.
следующего автомата: вызывается APIфункция ClearCommError, определяется количество Пример. Отследить 2 события: поступление байта в COMпорт (EV_RXCHAR) и установку
байт во входном буфере CbInQue, затем 1 раз вызывается APIфункция ReadFile с DSR в высокий уровень (EV_DSR).
CbInQue количеством читаемых байт. Применив APIфункцию PurgeComm совместно с опи
санным автоматом, можно исключить «зависание» компьютера.
Необходимо отметить, что при программировании COMпорта прямыми командами вво 1. Устанавливаем маску с 2 событиями: EV_RXCHAR+EV_DSR:
да/вывода в порт в DOS и в Windows98/XP таких проблем не возникает по нескольким причи
нам. Вопервых, линии DTR и RTS изначально находятся в низком уровне и при инициализации !
порта не изменяются без нашего на то ведома (как в функциях API). Вовторых, размер буфера loop
там аппаратный и умещает только 1 байт, т. е. если в буфере уже есть байт и приходит еще if SetCommMask(CommPort,EV_RXCHAR+EV_DSR) |
один, то предыдущий байт теряется. Втретьих, прямую команду процессора in, которая очища then break. !Маска на приём байта и DSR
ет аппаратный буфер COMпорта, можно применять хоть 100 раз; при этом компьютер ни разу .
!
не зависнет, даже если во входном буфере давно уже нет байта и в помине. APIфункции же на
писаны так, что приходящий байт вводится в программный буфер не зависимо от того,
2. Ожидаем установки DSR в высокий уровень, после чего, например, выполняем
требуется ли нам это или нет. Вот что является причиной вышеописанных «глюков».
команду ClearCommBreak:
Для установки выходных линий (DTR, RTS и TxD) COMпорта в произвольное состояние
имеются три функции API, которые претензий не вызывают и работают правильно: !
1) EscapeCommFunction — переназначить функцию COMпорта (вспомним клавишу loop
Escape (Esc), находящуюся в самом верхнем левом углу клавиатуры), которая может устано loop until WaitCommEvent(CommPort,EvtStatus,0).

130 131
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРОГРАММИРОВАНИЕ ИНТЕРФЕЙСА RS232 В ОС WINDOWS98/XP

if band(EvtStatus,EV_DSR) !DSR Sleep(100)


if ClearCommBreak(CommPort) then break. После этого программа будет ждать 100 мс, а затем будет выполнять следующий оператор.
. Приведенные функции API для COMпорта — это далеко не полный их перечень. Как
. уже указывалось, полный перечень находится, например, в MSDN. Для более детально
!
го уяснения функций API рекомендуется просмотреть в MSDN хотя бы те, что были
описаны выше, поскольку именно они используются для программы, приведенной авто
3. Ожидаем приема байта в COMпорт:
ром далее.
!
loop
2.5.3.1. Тестовая программа обмена для компьютера,
loop until WaitCommEvent(CommPort,EvtStatus,0). использующая функции API, в ОС Win'98/XP
if band(EvtStatus,EV_RXCHAR) then break. После такого несколько «сумбурного» изложения автором основных функций API, читате
. лю может показаться, что запрограммировать интерфейс RS232 с их помощью просто невоз
!
можно либо достаточно сложно. Отчасти это так и есть. Тем не менее автору удалось написать
достаточно стабильно работающую программу HELLO.CLW, которая приводится ниже. Програм
Если требуется отследить только одно событие, то можно установить маску на это событие, ма выполняет те же функции, что и тестовая программа для DOS (Clarion v.3.100), приведенная
а затем просто вызвать функцию WaitCommEvent и не проверять возвращаемый им статус: в 2.4.3.7, написана на языке Кларион для Windows — Clarion 6.0. Для работы с программой
может использоваться любой из микроконтроллеров, работающий с программой для
1. Устанавливаем маску на поступление байта в COMпорт: DOS (см. 2.4.3.7).
В программе HELLO.CLW пользователь может выбрать скорость обмена по интерфейсу
!
RS232 (9600 или 115 200 бод). Разумеется, программа для микроконтроллера должна быть
loop
if SetCommMask(CommPort,EV_RXCHAR)| написана так, чтобы указанные скорости обмена по RS232 микроконтроллера и компьютера
then break. !Маска на приём байта совпадали.
. Ниже приведен текст программы HELLO.CLW и ее файлапроекта Hello.prj.
!
Программа HELLO.CLW
2. Oжидаем наступление этого события (без проверки статуса, как в предыдущем случае): 
!
! ! Программа передачи и приема строки из 75 символов по RS232
loop until WaitCommEvent(CommPort,EvtStatus,0). ! с помощью APIфункций Windows98/XP.
! ! Используется программа для микроконтроллера: INRS115.c
!

Совершенно очевидно, что в последнем случае функция WaitCommEvent выполняется PROGRAM


намного быстрее, т. к. содержит не тройную проверку в цикле, а единственную. Во многих ру
ководствах по программированию APIфункций, как уже упоминалось по поводу их не совсем !========================
правильного толкования, помимо проверки факта наступления события (п. 2) опять, как в пре INCLUDE('Equates.CLW')
дыдущем примере, сравнивается статус порта с битом этого единственного сoбытия INCLUDE('TplEqu.CLW')
(EV_RXCHAR), что является лишним и требует дополнительного времени (а иногда счет идет на INCLUDE('Keycodes.CLW')
доли микросекунды!). INCLUDE('Errors.CLW')
!========================
После окончания работы с COMпортом его необходимо закрыть. Это делается с помощью
вызова функции CloseHandle (закрыть Handle), которая претензий не вызывает и работа !
ет правильно. ! Определение переменных
И последняя функция API, которой хотелось бы коснуться, — установка временной заде !
ржки — функция Sleep (спать). Эта функция, вообще говоря, не принадлежит к функциям COM C byte
порта, но в связи с тем, что она отсутствует в Clarion 6.0, автор рекомендует ее использовать. A byte
Вызвать эту функцию просто: B byte

132 133
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРОГРАММИРОВАНИЕ ИНТЕРФЕЙСА RS232 В ОС WINDOWS98/XP

#pragma optimize(cpu=>386) При запуске программы в Win'XP на экране монитора появляется окно (рис. 2.5.3.3), а
#pragma optimize(speed=>on) после выбора необходимой скорости обмена, № COMпорта и нажатия кнопки «Запуск» —
#pragma define(NULL=>off) следующее окно (рис. 2.5.3.4).
#compile "hello.clw"
#pragma link("hello.lib") Рис. 2.5.3.3.
Окно выбора параметров
#pragma link("WindowsShell.Manifest") порта (Win'XP)
#link "hello.exe"

Программа работает в ОС Win'98(SE2) и Win'XP(SP2).


При запуске в Win'98 на экране монитора появляется окно (рис. 2.5.3.1). Необходимо
выбрать № COMпорта, к которому подключено соответствующее устройство (или одна из макет
ных плат, описанных ранее). Соответствующая скорость обмена должна быть запрограммирова
на в микроконтроллер. Питание устройства (или макетной платы) должно быть включено.
Рис. 2.5.3.4.
При выборе 1го COMпорта и скорости обмена в 115 200 бод (как на рис. 2.5.3.1) и нажатии Основное окно работы
кнопки «Запуск» на экран выводится окно (рис. 2.5.3.2). Нажатие кнопки «Продолжить» приведет программы (Win'XP)
к повторному запуску программы передачи и приема строки. При этом количество перезапусков
отражается переменной k, показанной в верхнем левом углу окна (k = 179, т. к. при большем ко
личестве нажатий на кнопку «Продолжить» указательный палец начинает неметь :) ). Если срав
нить окна, показанные на рис. 2.5.3.2 и 2.4.3.7, то можно заметить их логическую (но не внеш
нюю) идентичность. Это не удивительно, поскольку программы выполняют одну и ту же функцию,
но в разных ОС (DOS и Win'98).
Рис. 2.5.3.1.
Окно выбора параметров
порта (Win'98)

Рис. 2.5.3.2.
Основное окно работы
программы (Win'98)

2.5.4. Программирование интерфейса RS232


с помощью прямых команд ввода/вывода в COM-порт

2.5.4.1. Общие положения


Программирование интерфейса RS232 в ОС Windows с использованием прямых команд
ввода/вывода в COMпорт сопряжено с некоторыми проблемами, которые, к счастью, разре
шимы.
Первая проблема — каким образом вообще вывести в порт и ввести из порта информа
цию. Дело в том, что в Кларионе для DOS (Clarion v.3.100), на котором написана программа,
приведенная в 2.4.3.7, есть встроенные команды ввода/вывода в порт — in (№ Порта, Дан
ные) и out (№ Порта, Данные). Эти команды и применялись для программирования интерфей
са RS232 (COMпорта). В Кларионе для Windows (Clarion 6.0) таких встроенных команд вво
да/вывода в порт нет.

142 143
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРОГРАММИРОВАНИЕ ИНТЕРФЕЙСА RS232 В ОС WINDOWS98/XP

Вторая проблема касается разрешения применения команд прямого ввода/вывода (in( ) INP(USHORT),BYTE,PASCAL,NAME('Inp32')
и out( ) ) в порт. В ОС Win'98 эта проблема не стоит, поскольку в этой ОС прямые команды вво OUTP(USHORT,BYTE),PASCAL,NAME('Out32')
да/вывода в порт разрешены. В ОС Win'XP команды прямого ввода/вывода (in( ) и out( ) ) в END
порт запрещены (по крайней мере в официальной документации). !
Третья проблема также касается только ОС Win'XP и состоит в том, что если даже какимлибо
способом обойти запрещение на применение прямых команд ввода/вывода в порт, то для того После этого можно использовать 2 вышеуказанные функции.
чтобы они работали с портом (в данном случае с COMпортом), этот порт необходимо открыть. Использование библиотеки inpout32.dll для прямого ввода/вывода в порт имеет свои
Смысл слова «открыть» состоит в том, чтобы разрешить работу самого COMпорта (в т. ч. и для пря преимущества и недостатки.
Преимущества заключаются в достаточной простоте применения функций INP( ) и OUTP( ),
мого ввода/вывода туда/оттуда информации). В Win'98 этого «открытия» делать не требуется,
а также в том, что применение этих функций автоматически разрешает их использование в
поскольку там прямые команды ввода/вывода в порт разрешены и этот вопрос не стоит.
Win'XP (другими словами, применение этих функций автоматически снимает запрет на прямой
Забегая вперед, сразу заметим, что все эти три проблемы решаемы (и каждая из них мо
ввод/вывод в порт в Win'XP).
жет быть решена несколькими способами). Недостатки использования функций INP( ) и OUT( ) состоят в том, что: а) требуется привле
кать дополнительную библиотеку (inpout32.dll), что сопряжено с дополнительными «манипуля
2.5.4.2. Применение команд ввода/вывода в порт циями» в программе и необходимостью иметь эту библиотеку, и б) эти функции выполняются
в Clarion 6.0 для Win 98/XP не очень быстро (но, конечно, на порядок быстрее, чем функции API). Правда, быстродействия
Задача использования отсутствующих команд ввода/вывода в порт в Clarion 6.0 может их хватает, чтобы отследить самые быстротекущие процессы в интерфейсе RS232.
быть решена по крайней мере 2 способами. Второй способ (Б) применения прямых команд ввода/вывода в порт заключается в сле
Первый способ (назовем его способом А) заключается в том, что существует специально дующем.
написанная и бесплатно распространяемая библиотека (inpout32.dll), которая решает сразу Хотя в самом языке Clarion 6.0 и отсутствуют команды прямого вывода в порт (in и out), эти
2 задачи — дает в распоряжение пользователя 2 внешних библиотечных функции: INP(Адрес команды присутствуют в языке Си (C++), который встроен в Clarion 6.0. Написав на этом язы
порта) и OUTP (Адрес порта, Данные) и разрешает их применение в Win'XP (напомню, этого ке две внешних подпрограммы ввода и вывода в порт и обратившись к ним из программы на
Clarion6.0 как к внешней функции, можно решить поставленную задачу. Ниже приведен текст
разрешения в Win'98 не требуется). Применение этих функций и позволяет производить
2 внешних подпрограмм In.cpp и Out.cpp, написанных автором на встроенном C++, для прямо
ввод/вывод в порт, а заодно и разрешает этот ввод/вывод в Win'XP. Адрес порта должен быть
го ввода и вывода в порт.
переменной типа USHORT, а данные — типа BYTE.
Для того чтобы вывести в порт информацию, достаточно применить функцию //
OUTP(USHORT,BYTE). Предположим, требуется вывести в порт данных (3f8h) порта COM 1 сим //Подпрограмма In.cpp
вол 'A', имеющий код ASCII — 41h. Для этого достаточно написать: //
#pragma save
OUTP(3f8h,41h) #pragma call(inline => on, reg_param => (dx), reg_return => (ax))
static unsigned char inportb(unsigned int Port_number)=
Чтобы ввести данные из порта, достаточно применить функцию INP(USHORT). Предположим, {
требуется ввести данные из порта состояния COM1 (3feh). Для этого достаточно написать: 0xEC, // in al,dx
};
B=INP(3feh) #pragma restore

где переменная B должна быть типа BYTE. extern "C" unsigned char INP(unsigned int Port_number)
Чтобы воспользоваться в программе вышеуказанными функциями, требуется сделать две {
вещи: 1) преобразовать библиотеку inpout32.dll в inpout32.lib с помощью программы unsigned char byte;
libmaker.exe, входящей в комплект поставки Clarion6.0 (о том, как это сделать, написано в руково byte=inportb(Port_number);
дстве пользователя по языку Clarion 6.0), и уже библиотеку inpout32.lib вставить в проект своей return byte;
программы; 2) в тексте программы необходимо указать прототипы использования команд }
INP(USHORT) и OUTP(USHORT,BYTE). Прототипирование осуществляется стандартным образом, //
как это обычно делается в Кларионе:
//
! // Подпрограмма Out.cpp
MODULE('INPOUT32') //

144 145
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРОГРАММИРОВАНИЕ ИНТЕРФЕЙСА RS232 В ОС WINDOWS98/XP

#pragma save то вторая подпрограмма помещает значение адреса 3f8h в переменную Port_number, обра
#pragma call(inline => on, reg_param => (dx,ax)) щается к первой подпрограмме с помощью инструкции byte=inportb(Port_number); и,
static void outportb(unsigned int port, unsigned char byt)= получив значение введенного байта в переменной byte, возвращает это значение в Клари
{ он с помощью инструкции return byte.
0xEE, // out dx,al Столь подробное описание подпрограммы In.cpp приводится здесь потому, что, хотя внеш
}; не эта подпрограмма выглядит достаточно простой, она является ключевым решением пробле
#pragma restore мы прямого ввода из порта, который (ввод) в Кларионе для Windows (Clarion6.0) отсутствует.
Аналогично работает и подпрограмма Out.cpp. Разница состоит в том, что в подпрограмме
extern "C" void OUTP(unsigned int Port_Number, unsigned char byte) In.cpp передается один параметр (адрес порта) и возвращается значение, прочитанное из это
{ го порта, а в подпрограмме Out.cpp передаются два параметра (адрес порта — в регистр dx и
outportb(Port_Number,byte); значение, которое требуется вывести в этот порт — в регистр ax). Поэтому такое подробное
} описание подпрограммы in.cpp приводится еще и для того, чтобы читатель смог проследить эту
// аналогию в подпрограмме Out.cpp.
Но это еще не все.
Основная идея этих 2 подпрограмм заключается в следующем. Вначале рассмотрим Чтобы эти подпрограммы работали, необходимо: а) написать в языке Кларион для них про
подпрограмму In.cpp. тотипы, и 2) включить их в проект программы на Кларионе.
Во встроенном в Clarion6.0 языке C++ есть возможность использования «inline» проце Прототипирование подпрограмм должно осуществляться в программе на Кларионе следу
дур, чтобы в текст программы (на C++) можно было вставлять машинные коды команд процес ющими инструкциями:
сора. Эти inlineпроцедуры возможно применять только в том случае, если функция, в которой
они используются, имеет атрибут «static». Но атрибут «static» не позволяет вызвать эту функцию MODULE('IN.CPP')
из программы пользователя, другими словами, — из языка Кларион (но позволяет осущест INP(USHORT),BYTE,NAME('_INP')
вить ее вызов из программы на C++ из того же модуля). С другой стороны, программа, кото END
рая может быть вызвана из языка Кларион, должна быть «внешней» по отношению к нему; в MODULE('OUT.CPP')
этом случае внешняя подпрограмма (или функция) должна иметь атрибут «extern», т. е. «внеш OUTP(USHORT,BYTE),NAME('_OUTP')
ний». Поэтому подпрограмма in.cpp состоит из 2 программ. END
Первая — подпрограмма, имеющая атрибут «static», осуществляет непосредственное ис
пользование inlineкоманды процессорa (in al,dx), машинный код которой 0xEC. Эта ко Здесь также есть одна тонкость. Символ подчеркивания ( «_» ) перед названиями INP и
манда процессора осуществляет ввод данных (команда in), расположенных по адресу, нахо OUTP отражает тот факт, что эти подпрограммы написаны именно на языке Си. Если посмот
дящемуся в регистре dx процессора, в младший байт аккумулятора (al). Для осуществления реть на подпрограммы In.cpp и Out.cpp, то можно заметить, что в них используется инструкция
такого действия необходимо, вопервых, запомнить текущее состояние процессора (что вы extern «C». Символ «C» и есть причина символа подчеркивания. Без символа подчеркивания в
полняет команда #pragma save), вовторых, включить опцию «inline», передать адрес порта прототипе и символа «С» в подпрограмме вся конструкция работать не будет.
(RS232) в регистр dx и получить результат ввода в регистре ax (что выполняет инструкция Для того чтобы вставить подпрограммы In.cpp и Out.cpp в проект, необходимо открыть в
#pragma call(inline  on, reg_param  (dx), reg_return  (ax))). проекте папку «External source files» (Внешние файлы), выбрать опцию «Add» (Добавить) и ука
Далее следует процессорная команда непосредственного ввода из порта, имеющая шестнад зать подпрограмму, например, «In.cpp». Забегая немного вперед, отметим, что для нижеприве
цатеричный код 0xEC, что означает ввод из порта, адрес которого находится в регистре dx, денной тестовой программы «Hello.clw», использующей прямые команды ввода/вывода в пор
а результат этого ввода помещается в регистр al. Последней инструкцией подпрограммы яв ты, будет приведен и текст файлапроекта («Hello.prj»), где все это уже сделано.
ляется инструкция #pragma restore, что означает восстановление первоначального А сейчас возвратимся ко второй проблеме использования команд прямого ввода/вывода
состояния процессора. через порты в Win'XP, а именно к тому, как обойти запрещение применения таких команд.
Вторая — это подпрограмма, к которой уже можно обратиться из программы на Кларио
не и которая в связи с этим уже имеет атрибут extern. Она является как бы связующим зве
ном между первой подпрограммой (к которой она и обращается) и программой на Кларионе,
2.5.4.3. Снятие запрета на применение команд ввода/вывода
откуда и идет обращение к ней. в порт для Win'XP
Действие этой подпрограммы заключается в следующем. Когда в Кларионе осуществля Как уже было упомянуто, одним из способов, разрешающих применение прямых команд
ется обращение ко второй подпрограмме командой B=INP (адрес порта ввода), где B — пере ввода/вывода в порт, является использование библиотеки inpout32.dll. Но в этой библиотеке
менная типа BYTE, а адрес порта типа USHORT (например 3f8h), т. е. пишется: уже приведены подпрограммы ввода/вывода в порты (INP( ) и OUTP( ) ), поэтому надобность в
подпрограммах In.cpp и Out.cpp отпадает. В связи с этим использование библиотеки
B=INP(3f8h), inpout32.dll становится бессмысленным, если предполагается работа с подпрограммами
In.cpp и Out.cpp.

146 147
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРОГРАММИРОВАНИЕ ИНТЕРФЕЙСА RS232 В ОС WINDOWS98/XP

«Покопавшись» в Интернете, можно обнаружить сразу несколько программ, целью кото


рых является разрешить использование прямых команд ввода/вывода в порты в Win'XP. Пе
репробовав некоторые из них, автор обнаружил, что реально работают только 2 программы:
UserPort, написанная Томасом Франзоном (Tomas Franzon), которую очень просто найти лю
бым поисковиком, и Portmon, написанная Марком Русиновичем (Mark Russinovich) (www.sys
internal.com). Ниже будут приведены примеры применения этих программ.
Первая программа — программа UserPort. Эта бесплатно распространяемая програм
ма довольно остроумно обходит запрет на использование прямых команд ввода/вывода в
порты в Win'XP. Идея программы — в использовании недокументированных команд
Win'XP в привилегированном режиме. Подробное описание работы программы UserPort
приводится в файле UserPort.pdf. Программа UserPort работает с драйвером UserPort.sys,
который входит в комплект поставки программы. Чтобы разрешить ввод/вывод в порты
драйвер UserPort.sys необходимо скопировать в папку C:\WINDOWS\SYSTEM32\DRIVERS\
и перезагрузить компьютер. После такой манипуляции уже возможно использование вы
шеописанных подпрограмм In.cpp и Out.cpp. Необходимо, однако, заметить, что использо
вание драйвера UserPort.sys для работы подпрограмм In.cpp и Out.cpp с COMпортом порт) будет «перехвачена» и выведена на экран, что резко «затормозит» такой ввод/вывод Рис. 2.5.4.3.2.
компьютера является условием необходимым, но недостаточным. Как было упомянуто ра (рис. 2.5.4.3.2). Далее установить («открыть») порты, к которым будет осуществляться обраще Выключение
опции Capture
нее, требуется еще «открыть» COMпорт. О способах открытия COMпорта будет изложено ние. В нашем случае это COM 1 (и, например, COM 2). Для этого необходимо выбрать опцию (захват)
несколько позже. Здесь же пока возвратимся к программам, разрешающим использова Capture, в открывшемся подменю выбрать опцию Ports (порты) и в еще одном открывшемся
ние прямых команд ввода/вывода в порты в Win'XP. подменю отметить порты COM 1: Serial0 и COM 2:Serial1 (см. рис. 2.5.4.3.3). Далее необходимо
Вторая программа, которую хотелось бы представить, — программа Portmon (Портмони выйти из программы Portmon. После таких манипуляций можно уже производить прямой
тор). Она предназначена для решения более широкого круга задач, чем просто разрешение на ввод/вывод в порты COM 1 и COM 2 не только из программы на Clarion6.0 (т. е. использовать
ввод/вывод в порты. Она, например, позволяет «отслеживать» обращение к портам из той или подпрограммы In.cpp и Out.cpp), но и вообще использовать прямые команды ввода/вывода в
иной программы (при выборе опции «Capture» — захват) и выполнять некоторые другие функ порты COM 1 и COM 2 в любой другой программе (в частности, даже в DOSпрограммах, напри
ции. Применительно к использованию подпрограмм In.cpp и Out.cpp для ввода/вывода в пор мер, в турбобэйсике tb.exe, Clarion v3.100 и.т.п). Можно, например, запустить программу
ты из языка Clarion6.0 программа Portmon выполняет сразу две задачи: 1) разрешает приме Hello.exe, написанную на языке Кларион для DOS — Clаrion v.3.100 (Hello.cla) и приведенную в
нять прямой ввод/вывод в порты, и 2) открывает порт (в нашем случае COMпорт) для работы. 2.4.3.7. Правда, чтобы в DOSпрограммах правильно отражались символы русского языка на экра
Для использования этой программы в нашем случае, необходимо выполнить следующее. не, в конец файла AUTOEXEC.NT необходимо вставить какойлибо DOSдрайвер монитора, например:
Рис. 2.5.4.3.1.
Исходный вид окна После инсталляции и запуска программы на экран выведется окно (рис. 2.5.4.3.1). Необхо
программы Portmon димо отключить опцию Capture (захват), иначе каждая попытка ввода или вывода в порт (COM tdrvses.exe,
после запуска

а в файл CONFIG.NT — следующие команды:

dos=high, umb
device=%SystemRoot%\system32\himem.sys
files=40

Необходимо отметить, что файлы AUTOEXEC.NT и CONFIN.NT находятся в папке C:\WIN


DOWS\SYSTEM32\. Если же использование программ для DOS не предполагается, то файлы
CONFIG.NT и AUTOEXEC.NT лучше не трогать.
Вернемся к Win'XP, прямым командам ввода/вывода в COMпорт и сравнению 2 про
грамм UserPort и Portmon на предмет их преимуществ и недостатков. Вначале о програм
ме Portmon. Эту программу рекомендуется использовать только для разработки и про
верки работоспособности новых программ, поскольку после запуска Win'XP каждый раз
необходимо производить манипуляции, показанные на рис. 2.5.4.3.1–2.5.4.3.3.

148 149
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРОГРАММИРОВАНИЕ ИНТЕРФЕЙСА RS232 В ОС WINDOWS98/XP

MODULE('Comm Prototipes')
!
CreateFileA(*CSTRING,ULONG,ULONG,LONG,ULONG,ULONG,UNSIGNED),|
SIGNED,RAW,PASCAL,NAME('CreateFileA')
CloseHandle(SIGNED),BOOL,PROC,PASCAL
!
END

Для использования этих APIфункций требуется определить несколько переменных:

!
!Переменные для APICOM — 1й способ открытия порта.
!
CommPort UNSIGNED !(handle).
PortCString CSTRING(10) !'COM1/COM2'
OPEN_EXISTING ULONG(3)
Рис. 2.5.4.3.3. !
Это может легко сделать программист, но ни в коем случае не пользователь програм
Открытие портов
COM 1 и COM 2
мы, «заставлять» которого производить подобные манипуляции просто недопустимо.
Открыть COMпорт можно следующими командами:
для работы Пользователь должен запустить программу, написанную для его целей, и программа
должна работать с портами ввода/вывода. Другими словами, работа с портами вво PortCString='COM1'
да/вывода должна быть осуществлена автоматически после запуска программы CommPort=CreateFileA(PortCString,0,0,0,OPEN_EXISTING,0,0)
пользователя.
Как было упомянуто ранее, программа UserPort (а точнее — драйвер UserPort.sys, Как можно увидеть по этим командам, переменной PortCString присваивается значение 'COM1',
установленный в папку C:\WINDOWS\SYSTEM32\DRIVERS\) «автоматически» разреша a APIфункция CreateFileA() используется с нулевыми параметрами. Другими словами, парамет
ет использование прямых команд ввода/вывода в порт после запуска Win'XP. Програм ры COMпорта (скорость обмена, бит паритета, количество бит данных и количество стопбит) не опре
ма же Portmon.exe не обладает такой возможностью. Другими словами, «заставить» делены. Это определение можно будет сделать позже уже прямыми командами ввода/вывода
программу Portmon автоматически произвести манипуляции, показанные на рис. в COMпорт.
2.5.4.3.1–2.5.4.3.3 нельзя. Поэтому для написания пользовательской программы, в ко Для закрытия COMпорта должна использоваться APIфункция CloseHandle():
торой предполагается применение прямых команд ввода/вывода в порт, допустимо
только применение драйвера UserPort.sys, который требуется установть только один loop until(CloseHandle(CommPort)). !Закрытие CommPort'a.
раз.
Напомним еще раз, что установка драйвера UserPort.sys является необходимым услови Вторым способом, которым можно осуществить открытие COMпорта, является использо
ем работы с портами ввода/вывода, но недостаточным. Требуется еще «открыть» COMпорт вание бесплатно распространяемой библиотеки clacom32.dll, с помощью которой приводятся
для работы. Каким образом это сделать? Об этом будет рассказано далее. примеры применения программ работы с COMпортом в Windows, разработанных компанией
Gap Development Company (www.gapdev.com) под общим названием ClaCom (и распространя
2.5.4.4. Открытие COM-порта для использования прямых команд емых уже небесплатно).
ввода/вывода в Win'XP Чтобы использовать библиотеку clacom32.dll для открытия COMпорта, требуется осущест
Расскажем о двух способах «открытия» COMпорта. вить следующие действия: а) необходимо преобразовать библиотеку clacom32.dll в clacom32.lib с
Первый способ, которым возможно «открыть» COMпорт, — уже небезызвестные API помощью входящей в состав Crarion 6.0 программы libmaker.exe и включить ее в проект програм
функции (которые, по мнению автора, только на это и годятся). Прототипы APIфункций, мы на Clarion 6.0; б) определить прототипы использования команд открытия и закрытия COM
использующихся для работы с COMпортом, были уже приведены в 2.5.3 (в рассмотрен порта:
ной там же программе Hello.clw). Из всех APIфункций нам потребуются только 2: для
«открытия» COMпорта и его «закрытия». Первый прототип — (CreateFileA()) предназ MODULE('CLACOM')
начен для открытия порта, второй (CloseHandle()) — для его закрытия. Ниже приведены SetPort(SHORT),PASCAL,NAME('_SetPort@8')
эти два прототипа. ResetPort(SHORT),PASCAL,NAME('_ResetPort@8')
END

150 151
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРОГРАММИРОВАНИЕ ИНТЕРФЕЙСА RS232 В ОС WINDOWS98/XP

и переменную для номера COMпорта: Программа Hello.clw



ComNum short !
! Программа передачи и приема строки из 75 символов по RS232
Для открытия COMпорта требуется использовать следующие команды: !

ComNum=0 ! 0COM1,1COM2 PROGRAM


SetPort(ComNum)
ResetPort(ComNum) INCLUDE('Equates.CLW')
INCLUDE('TplEqu.CLW')
INCLUDE('Keycodes.CLW')
Как видно из последних команд, для открытия порта COM 1, переменной ComNum необходи
INCLUDE('Errors.CLW')
мо присвоить нулевое значение, для открытия COM2 — единичное. Открытие порта осу
!
ществляется командой SetPort(ComNum), приведение его в рабочее состояние — коман ! Определение переменных
дой ResetPort(ComNum). Эти две команды необходимо использовать в программе на !
Clarion6.0 только один раз — в начале программы. C byte
A byte
2.5.4.5. Тестовая программа, использующая прямые команды B byte
ввода/вывода в COM-порт в ОС Win'98/XP S string(80)
BT byte
Итак, подытожим все выше изложенное в п. 2.5.4.2–2.5.4.4. M byte,dim(80),over(S)
Для использования в Clarion 6.0 прямых команд ввода/вывода в порт в ОС Win'98/XP S1 string(80)
необходимо осуществить следующие 3 действия. M1 byte,dim(80),over(S1)
1. Включает в себя два варианта: i ushort
j ushort
а) написать программы для прямого ввода/вывода в порт на встроенном в Clarion6.0
k ushort
языке C++ (In.cpp и Out.cpp), прототипы для них и включить их в файлпроект (*.prj);
CH byte
б) не писать никаких программ ввода/вывода, a использовать готовую библиотеку N1 long
inpout32.dll, преобразовать ее в библиотеку inpout32.lib с помощью программы lib STR string(5)
maker.exe и включить ее в файлпроект (*.prj). Кроме того, написать прототипы для ис p byte
пользования команд INP( ) и OUTP( ). !
2. Разрешить использование прямых команд ввода/вывода в порт, установив ! Переменные для QueryPerformanceCounter
драйвер UserPort.sys в папку C:\WINDOWS\SYSTEM32\DRIVERS\. При исполь !
зовании библиотеки inpout32.dll в применении драйвера UserPort.sys нет необ CSTARTL ulong
ходимости. CSTARTH long
3. «Открыть» COMпорт для работы с помощью: а) APIфункций или б) библиотеки cla CSTOPL ulong
com32.dll. CSTOPH long
DC long
Ниже приведен текст тестовой программы Hello.clw, в котором показаны все вариан
DELTAC long
ты. Неиспользуемые варианты закомментированы (перед ними установлен восклица !
тельный знак). В файлпроект, который приведен вслед за текстом программы Hello.clw,
включены все варианты. В самой же программе используются подпрограммы In.cpp
и Out.cpp и драйвер UserPort.sys; открытие COMпорта сделано с помощью библиотеки !
clacom32.dll. Отметим, что для того, чтобы получить «картинку» окна, вид «кнопок» и другие !Переменные для APICOM — 1й способ открытия порта.
атрибуты ОС Win'XP, в файлпроект необходимо дополнительно включить файл !
«WindowsShell.Manifest». CommPort UNSIGNED !(handle).
В программе установлены следующие параметры COMпорта: COM 1: N,8,1, 115 200. Програм PortCString CSTRING(10) !'COM1/COM2'
ма использует алгоритм аппаратной синхронизации, о котором уже не раз говорилось. OPEN_EXISTING ULONG(3)
!

152 153
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕНЕНИЕ ИНТЕРФЕЙСА RS232 ДЛЯ ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ В СИСТЕМЕ (ISP)

#pragma define(NULL=>on)
#compile "Hello.clw"
#compile "In.cpp"
#compile "Out.cpp"
#pragma link("hello.lib")
#pragma link("inpout32.lib")
#pragma link("clacom32.lib")
#pragma link("WindowsShell.Manifest")
#link "hello.exe"

Сравнив подпрограммы инициализации COMпорта, микроконтроллера, ввода и вывода


байта приведенной выше программы с программой Hello.cla, написанной на языке Кларион
для DOS (Clarion v.3100) и приведенной в п. 2.4.3.7, можно отметить практичеки полную их
идентичность. Если же сравнить текст приведенной программы с текстом программы, исполь
зующей APIфункции и приведенной в п. 2.5.3, то можно увидеть насколько неуклюжи и гро
моздки APIфункции. Кроме того, сравнив подпрограммы для ввода и вывода байта этих двух
программ, можно заметить, что подпрограммы ввода и вывода байта в программе, использу
ющей APIфункции, выполняют не все действия, которые выполняют эти же подпрограммы в
программе, использующей прямой ввод/вывод в порты. Причиной этому является «непово Рис. 2.5.4.5.2.
ротливость» APIфункций, не позволяющая отслеживать быстротекущие процессы в интерфей Общий вид окна программы
се RS232. 2.6. Применение интерфейса RS232 Hello.exe в ОС Win'XP
Программу следует запускать совместно с подключенной к COMпорту какойлибо из ма для программирования микроконтроллеров
кетных плат с микроконтроллером, описанных в главе по аппаратным средствам. Перед за в системе (In_System_Programming)
пуском программы Hello.exe кабель от макетной платы должен быть соединен с портом COM1,
а питание макетной платы включено. 2.6.1. Общие положения
После запуска программы Hello.exe в ОС Win'98 на экране монитора появится окно
(рис. 2.5.4.5.1). Нажатие кнопки «Продолжить» приведет к повторному запуску программы Как уже упоминалось ранее, когда речь шла об аппаратных средствах сопряжения микро
(количество нажатий на кнопку, или количество запусков, k равно 176), нажатие кнопки контроллеров с компьютером по интерфейсу RS232, эти аппаратные средства работают как в
Рис. 2.5.4.5.1. «Выход» — к выходу из программы в Windows. штатном режиме, так и в режиме программирования. Программное обеспечение режима ISP
Общий вид окна для микроконтроллеров MSC12XX, ADUC8XX и P89LPC9XX, разработанное ф. Texas Instru
программы Hello.exe При запуске программы в ОС Win’ XP появится окно (рис. 2.5.4.5.2), где k = 239.
в ОС Win'98
ments, Analog Devices и Philips для соответствующих микроконтроллеров имеет много недос
татков.
Так, например, программное обеспечение от Texas Instruments для программирования
микроконтроллеров MSC12XX стабильно работает на скорости, не превышающей 19 200 бод;
программное обеспечение от Analog Devices предназначено только для эволюционных плат
(где используются микроконтроллеры ADUC8XX), схемы сопряжения которых с компьютером
не приводятся или приводятся недостаточно полно; программное обеспечение микроконт
роллеров P89LPC9XX также предназначено для эволюционных плат, в которых используют
ся эти микроконтроллеры. В связи с этим автором написаны программы для программиро
вания микроконтроллеров MSC12XX, ADUC8XX и P89LPC9XX в режиме ISP для схем сопря
жения этих микроконтроллеров с компьютером, приведенных на рис. 1.3.5.1 (MSC12XX),
рис. 1.3.6.1 (ADUC8XX), рис. 1.3.8.1 — 1.3.8.3 (P89LPC9XX) и рис. 1.3.10 (схема кабеля свя
зи с компьютером).
Бесплатно распространяемое программное обеспечение для программирования
микроконтроллера AT89C51ED2(RD2), сопряженного с компьютером по схеме
(рис. 1.3.7.1), разработанное ф. ATMEL (программа FLIP v.2.4.4), имеет настолько высо
кое качество, что не только не вызывает у автора (книги) никаких претензий, но и наоборот

160 161
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕНЕНИЕ ИНТЕРФЕЙСА RS232 ДЛЯ ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ В СИСТЕМЕ (ISP)

— вызывает чувство восхищения его прекрасной работой. Программа FLIP v.2.4.4 иде PROGRAM
ально работает на скорости 115 200 бод и имеет массу интересных возможностей. Авто !
ру остается только поблагодарить эту фирму за такую прекрасную программу и поже ! Определение переменных
лать, чтобы и другие фирмы разработали для своих микроконтроллеров подобную про !
M byte,dim(100) !Массив для вывода OUTBYTE.
грамму. Для работы этой программы со схемой сопряжения с компьютером, приведен
S string(100),over(M) !Строка для вывода OUTBYTE.
ной на рис. 1.3.7.1, требуется только некоторые настройки этой программы, о которых M1 byte,dim(100) !Массив принимаемых байт INBYTE.
будет рассказано несколько позже. S1 string(100),over(M1) !Строка принимаемых байт.
Что касается программирования микроконтроллеров C8051F067 и C8051F330D !
от ф. Silicon Laboratories в режиме ISP: по интерфейсу JTAG и C2 (с помощью USB ! Строка и массив со значением регистра USEC.
DEBUGАдаптера), схема сопряжения которых приведена на рис. 1.3.9.1, то здесь авто ! Для 11.059 МГц => 10=0Ah => 30h,41h.
ру тоже остается только привести некоторые уточнения, касающиеся настройки програ ! Для 22.118 МГц => 20=14h => 31h,34h.
ммного обеспечения IDE v.2.5.2. SUSEC string('<52h,57h,46h,42h,30h,41h>')
Поэтому дальнейшее изложение будет построено следующим образом. !MUSEC byte,dim(6),over(SUSEC)
Вначале будут приведены программы для программирования микроконтроллеров !
в режиме ISP: ! Строка и массив со значением регистра MSECL.
! Для 11058 => 32h => 33h,32h.
— по интерфейсу RS232 (MSC1210XX, ADUC8XX и P89LPС93X),
! Для 22117 => 65h => 36h,35h.
— по интерфейсу C2 (P89LPС9XX); SMSECL string('<52h,57h,46h,43h,33h,32h>')
далее — некоторые рекомендации по настройке параметров программ для !MMSECL byte,dim(6),over(SMSECL)
программирования микроконтроллеров в режиме ISP: !
— FLIP v.4.4 от ф. AMTEL (FN89C51TD2(RD2) по интерфейсу RS 232, ! Строка и массив со значением регистра MSECH.
— IDE v.2.5.2 от ф. Silicon Laboratories (C8051F067 по интерфейсу JTAG и ! Для 11058 => 2Bh => 32h,42h.
C8051F330D) по интерфейсу C2 с помощью USBDEBURGадаптера. ! Для 22117 => 56h => 35h,36h.
SMSECH string('<52h,57h,46h,44h,32h,42h>')
!MMSECH byte,dim(6),over(SMSECH)
2.6.2. Программирование микроконтроллеров MSC12XX в режиме ISP !
! Строка и массив стирания памяти программ M0000.
по интерфейсу RS232 SM0000 string('<4dh,30h,30h,30h,30h>')
Для программирования микроконтроллеров MSC12XX в режиме ISP по интерфейсу !MM0000 byte,dim(5),over(SM0000)
RS232 должна использоваться схема сопряжения этого семейства микроконтроллеров с !
компьютером (рис. 1.3.5.1). Далее приведены тексты двух программ для программирования ! Строка и массив стирания памяти данных M8000.
микроконтроллера MSC121X в режиме ISP по интерфейсу RS232. SM8000 string('<4dh,38h,30h,30h,30h>')
!MM8000 byte,dim(5),over(SM8000)
Первая программа downti.cla написана на языке Кларион для DOS (Clarion v.3.100) и ра
!
ботает либо в ОС DOS, либо в режиме эмуляции DOS — в Win'98 и Win'XP. Текст файлпроек L ulong ! Длина файла в байтах.
та ее (downti.pr) приведен вслед за текстом самой программы. N ushort
Вторая программа написана на языке Кларион для Windows (Clarion6.0). Она работает в NSTROK ushort(0) ! Количество строк в *.hexфайле
ОС Win'98 и Win'XP. Название программы — Ispmsc.clw, а ее файлпроекта — Ispmsc.prj NOST ushort ! Остаток
Обе программы работают с портом COM 1 на скорости 115 200 бод. Они используют для NSYMB ushort ! Количество символов .
программирования одно и то же имя файла: file.hex. Длина файла file.hex составляет чуть бо NP ushort(0) ! Количество точек в символе .
лее 92 кБ, что в формате исполняемой программы (*.binформат) составляет ровно 32 кБ NP1 ushort
(максимальный размер памяти микроконтроллера MSC1210Y5). k ushort
k1 ushort
KL ushort
Программа downti.cla
B byte
i ushort

j ushort
!
i1 ulong
! Программа программирования файла file.hex в msc1210.
T1 long
!

162 163
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕНЕНИЕ ИНТЕРФЕЙСА RS232 ДЛЯ ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ В СИСТЕМЕ (ISP)

Программа down834c.cla

!
! Программа программирования файла file.tsk в ADUC8XX.
!_
PROGRAM
!
! Определение переменных
!
CER string('<07h,0eh,01h,41h,beh>') !Строка с командой ERASE.
MER byte,dim(5),over(CER) !Массив для передачи ERASE.
C115 string('<07h,0eh,03h,42h,81h,2dh,0dh>') !Строка с командой 115 кбод.
M115 byte,dim(7),over(C115) !Массив для передачи 115 кбод.
M1 byte,dim(25) !Массив принимаемых байт.
Рис. 2.6.2.2. S1 string(14),over(M1) !Строка идентификации ADUC.
Общий вид окна SN string(3)
при программирова!
LEND byte !Длина строки данных.
нии микроконтролле!
ра MSC1210 програм! NB byte !Количество байт в массиве вывода.
мой Ispmsc.clw L ushort !Длина файла в байтах.
LOST byte !Длина остатка L%16 в байтах.
D byte,dim(16) !Массив данных для программирования.
Как видно из сравнения времени программирования одного и того же файла — S0 string(16),over(D) !Строка данных для программирования.
file.hex, длина которого в исполняемом формате составляет ровно 32 кБ, обе программы SD ushort !Сумма данных.
показывают примерно одно и то же время (чуть менее 11 с), причем программа в Win'XP ADR ushort !Двуxбайтный адрес.
ничуть не уступает по быстродействию программе в DOS. Это вполне объяснимо, посколь ADRMAX ushort !Максимальный адрес.
ку программа на Win'XP использует прямые команды ввода/вывода в порт. Разделив M byte,dim(25) !Массив для вывода OUTBYTE.
32 кБ на 11 с, получим 2,9 кБ/с — с такой скоростью идет программирование микроконт MKS byte,dim(21) !Массив для расчета контрольной суммы.
роллера MSC1210 в режиме ISP. SUM ushort !Сумма байт данных.
KSUM byte !Контрольная сумма.
2.6.3.Программирование микроконтроллеров ADUC8XX в режиме ISP N ushort
по интерфейсу RS232 k ushort
B byte
Для программирования микроконтроллеров ADUC8XX в режиме ISP по интерфейсу RS232 i ushort
должна использоваться схема сопряжения этого семейства микроконтроллеров с компьюте Y00h byte(00h)
ром (рис. 1.3.6.1). Y01h byte(01h)
Ниже приведены тексты двух программ для программирования микроконтроллеров Y02h byte(02h)
ADUC8XX в режиме ISP по интерфейсу RS232. Первая программа aduc834c.cla написана на Y03h byte(03h)
Y04h byte(04h)
языке Кларион для DOS (Clarion v.3.100) и работает либо в ОС DOS, либо в режиме эмуляции
Y06h byte(06h)
DOS — в Win'98 и Win'XP. Файлпроект — aduc834c.pr.
Y07h byte(07h)
Вторая программа ispaduc.clw написана на языке Кларион для Windows (Clarion6.0). Она Y12 byte(12)
работает в ОС Win'98 и Win'XP. Файлпроект — ispaduc.prj. Y47h byte(07h)
Обе программы работают с портом COM 1 на скорости 115 200 бод. Они использу Y80h byte(80h)
ют для программирования одно и то же имя файла: file.tsk. Поскольку ISP микроконт Y0fh byte(0fh)
роллеров ADUC8XX (загрузчик программы, расположенный в памяти микроконтролле
ра) поддерживает загрузку файла в исполняемом формате, то длина файла file.tsk сос BINARY FILE,PRE(BIN),DRIVER('DOS'),NAME('file.tsk')
тавляет ровно 63 488 байт (62 кБ) — максимальный размер памяти микроконтроллера RECORD RECORD
ADUC847BS625. STR string(65500) !Строка с прочитанным файлом
..
!

184 185
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕНЕНИЕ ИНТЕРФЕЙСА RS232 ДЛЯ ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ В СИСТЕМЕ (ISP)

Рис. 2.6.3.1.
Вид экранов Рис. 2.6.3.2.
при программировании Окончание
микроконтроллера
ADUC847

а)

б)

2.6.4. Программирование микроконтроллеров P89LPC9XX в режиме


ISP по интерфейсу RS232 и в режиме ICP по интерфейсу C2

б) 2.6.4.1. Предварительные замечания


Микроконтроллеры P89LPC9XX допускают два режима программирования в системе. Пер
Как видно из сравнения времени программирования одного и того же файла — file.tsk, длина
вый режим, который осуществляется по интерфейсу RS232, уже defacto называют InSystem
которого составляет ровно 63 488 байт (62 кБ), обе программы показывают примерно одно и то Programming (ISP), т. е. «программирование в системе». Второй режим, который осуществляется
же время (около 22 с), причем программа в Win'XP ничуть не уступает по быстродействию програм по интерфейсу C2, также является режимом программирования в системе, но только по друго
ме DOS, а даже опережает ее на 1 с. Скорость программирования микроконтроллера ADUC847 му интерфейсу. Для того чтобы не путать эти два режима между собой, разработчики микроко
можно подсчитать, разделив 63 488 байт на 22 с. Она составит около 2,83 кБ/с. нтроллеров P89LPC9XX назвали этот режим InCircuitProgramming (ICP), т. е. программирова
ние в схеме. Режим программирования по интерфейсу C2 имеют некоторые микроконтроллеры
Рис. 2.6.3.2. ф. Silicon Laboratories (например C8051F330D).
Общий вид окон
при программировании Режим программирования ICP допускают практически все микроконтроллеры P89LPC9XX
микроконтроллера ADUC847 (исключение — микроконтроллер P89LPC932), а вот режим программирования ISP — только
программой Ispaduc.clw часть их. Причем микроконтроллеры, допускающие режим ISP, имеют также и режим ICP. Это
в процессе (а) и при окончании (б)
программирования относится к микроконтроллерам P89LPC92X и P89LPC93X — наиболее сложным и «крупнога
баритным» микроконтроллерам из всего семейства микроконтроллеров P89LPC9XX. Микро
контроллеры P89LPC90X называют «маленькими» (у них всего 8 выводов). Эти микроконтрол
леры допускают только режим программирования ICP.
В настоящий момент (на конец 2005 г.) наиболее новыми являются: микроконтрол
лер P89LPC938 из микроконтроллеров P89LPC93X и микроконтроллер P89LPC904 из
микроконтроллеров P89LPC90X. В связи с этим именно эти 2 микроконтроллера
(P89LPC938 и P89LPC904) были выбраны в качестве «подопытных кроликов», для того
чтобы проверить на них режимы программирования ISP и ICP. Микроконтроллер
P89LPC938 допускает два режима программирования: ISP и ICP, a микроконтроллер
а)
P89LPC904 — только режим ICP.

202 203
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕНЕНИЕ ИНТЕРФЕЙСА RS232 ДЛЯ ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ В СИСТЕМЕ (ISP)

4) программа ICPlpcTI.clw для компьютера, написанная на Кларионе для Windows (Clarion


v.6.0) и работающая в Win'98/XP, и ее файлпроект ICPlpcTI.prj.
Рис. 2.6.4.3.2.
Общий вид окна программы Все 4 программы используют новый алгоритм обмена компьютера с микроконтроллером, раз
isp938.clw (Win'XP) работанный автором и приведенный в 2.4.
Приведены также общие виды окон, на которые выводится информация, отражающая ре
зультаты работы программ для компьютера.

Программа B938_9XX.C

//
// Программа на P89LPC938 для программирования P89LPC938/904(ICP).
// скорость обмена 115200 бод, генератор внутренний 7372800 Гц.
//
#include "stdarg.h"
#include "stdio.h"
#include "stdlib.h"
#include "intrins.h"
//#include "reg1210.h"
#include "reg935.h"
Как видно из сравнения времен программирования одного и того же файла (file.hex), //
программы имеют примерно одну и ту же скорость работы и программируют этот файл за // Определение переменных
//
время чуть более 2,6 с. Необходимо отметить, что если перевести этот файл в *.binформат
(например программой hex2bin), то он будет иметь размер 5917 байт (т. е.около 6 кБ).
//
Разделив 5917 байт на 2,64 с, получим 2,24 кБ/с — с такой скоростью идет программи // Для MSC1210
рование микроконтроллера P89LPC938 в режиме ISP. Сравнив эту скорость программиро //
вания со скоростью программирования микроконтроллера MSC1210 (2,9 кБ/с — рис. 2.6.2.2) // sbit VDD = P1^0;
и микроконтроллера ADUC847 (2,83 кБ/с — рис. 2.6.3.2), можно заметить, что скорость // sbit RST = P1^1;
программирования микроконтроллера P89LPC938 немного меньше соответствующих ско // sbit PDA = P1^2;
ростей программирования микроконтролеров MSC1210 и ADUC847. // sbit PCL = P1^3;
//

2.6.4.4. Программирование микроконтроллеров P89LPC9XX //


в режиме ICP //Для P89LPC938
//
sbit VDD = P0^3;
Для программирования микроконтроллеров P89LPC938 и P89LPC904 используются схе sbit RSTLPC = P0^2;// RST у LPC904 уже есть.
мы, показанные на рис. 1.3.8.1–1.3.8.3, а также 1.3.5.1. Далее приведены следующие прог sbit PDA = P0^4;
раммы, предназначенные для программирования микроконтроллеров P89LPC938 sbit PCL = P0^5;
и P89LPC904 в режиме ICP и программы для компьютеров: //
1) программа B938_9XX.C, написанная на Си, для микроконтроллера P89LPC938, рабо
bdata unsigned char BYTEIO;
тающего в качестве ведущего микроконтроллера;
sbit BITIO=BYTEIO^0;
2) программа BMSC_9XX.C, написанная на Си, для микроконтроллера MSC1210, работа
ющего в качестве ведущего микроконтроллера; //
3) программа PROGLPC.CLA для компьютера, написанная на Кларионе для DOS (Clarion // Совмещение "u.adr" с "u.bt.adrl" и "u.bt.adrh".
v.3.100) и работающая в DOS или в Win'98/XP в режиме эмуляции DOS, и ее файл // Переменные u.adr (размерностью ushort) и
проект proglpc.pr; // u.bt.adrl и u.bt.adrh (обе размерностью byte(unsigned char))

236 237
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕНЕНИЕ ИНТЕРФЕЙСА RS232 ДЛЯ ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ В СИСТЕМЕ (ISP)

2.6.5. Программирование микроконтроллеров AT89C51ED2(RD2)


в режиме ISP по интерфейсу RS232
Для программирования микроконтроллера AT89C51ED2 используется схема сопряжения
этого микроконтроллера с компьютером (рис. 1.3.7.1) и бесплатно распространяемая прог
рамма FLIP v.2.4.4 от ф. ATMEL. Далее приведены некоторые рекомендации по настройке этой
программы для работы со схемой сопряжения (рис. 1.3.7.1).
Перед запуском программы необходимо подключить плату со схемой (рис. 1.7.7.1) к порту
Рис. 2.6.4.4.2.
Общий вид окон программы
COM1 компьютера и включить питание платы. После запуска программы FLIP v.2.4.4 на экра
ICPlpcTI.clw(Win'XP), не появляется окно (рис. 2.6.5.1,а). Необходимо выбрать опцию «Setting» («Установки») и далее
работающей с ведущим опцию «Preferences» («Предварительные»). В появившемся окне (рис. 2.6.5.1,б) установить галоч
микроконтроллером
P89LPC938 по программе
ку в поле «AutoISP» («АвтоISP») и нажать кнопку «More» («Далее»); в появившемся новом окне
B938_9XX.C при «Advanced RESET» («Расширенная опция RESET») (рис. 2.6.5.1,в) установить поля радиокнопок
программировании в режиме «RST(DTR)» и «PSEN(RTS)» в состояние «low» ( «низкий») и нажать кнопку «OK». Этим обеспечивается
ICP микроконтроллеров
P89LPC938 (a) и P89LPC904 (б)
согласование программы FLIP со схемой сопряжения (рис. 1.3.7.1).
а) Далее необходимо выбрать интерфейс сопряжения «RS232» (рис. 2.6.5.1,г); в появившем
ся окне (рис. 2.6.5.1,д) установить порт COM 1, скорость обмена 115 200 и нажать кнопку
«Connect» («Связь»). Если все проделано правильно, на экран выведется окно (рис. 2.6.5.1,е),
свидетельствующее о том, что с микроконтроллером установлена связь.
Далее необходимо выбрать программируемый файл в *.hex формате (рис. 2.6.5.1,ж, з,
например «inrsed2c.hex»).

Рис. 2.6.5.1.
Настройка и последова!
тельность работы
с программой FLIP
при программировании
микроконтроллера
AT89C51ED2 (см. также
б–к на с. 282—286)

б)

Из анализа результатов (рис. 2.6.4.4.1) можно сделать выводы о том, что программы
PROGLPC.CLA (DOS) и ICPlpcTI.clw (Win'XP), работающие с одним и тем же ведущим микроконтрол
лером P89LPC938 по программированию микроконтроллера P89LPC938 в режиме ICP, имеют
практически идентичные скоростные характеристики (времена программирования (6,42 и 6,41 с)
файла file.tsk размером около 6 кБ практически совпадают) и что ведущий микроконтроллер
P89LPC938 работает несколько быстрее ведущего микроконтроллера MSC1210 (времена рабо
ты соответственно составляют 6,41 и 8,22 с) при прочих равных условиях. Это, повидимому, объ
ясняется разными скоростями работы этих микроконтроллеров.
Из анализа рис. 2.6.4.4.2 можно сделать вывод, что программирование файла одного и то
го же размера (1 кБ) в микроконтроллер P89LPC938 производится быстрее (1,09 с), чем в мик
роконтроллер P89LPC904 (1,71 с). Это, повидимому, объясняется различнным размером стра
ниц программной памяти у этих микроконтроллеров (16 байт у P89LPC904 и 64 байт у а)
P89LPC938), поскольку программирование одной страницы размером в 64 байта производит
ся быстрее, чем программирование 4 страниц по 16 байт (см. описание ICP 9XX).

280 281
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕНЕНИЕ ИНТЕРФЕЙСА RS232 ДЛЯ ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ В СИСТЕМЕ (ISP)

Рис. 2.6.5.1.
Настройка и последо!
Рис. 2.6.5.1. вательность работы
Настройка и последо! с программой FLIP
вательность работы при программировании
с программой FLIP микроконтроллера
при программировании AT89C51ED2
микроконтроллера (продолжение)
AT89C51ED2
(продолжение)

б) г)

в) д)

282 283
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕНЕНИЕ ИНТЕРФЕЙСА RS232 ДЛЯ ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ В СИСТЕМЕ (ISP)

Рис. 2.6.5.1.
Рис. 2.6.5.1. Настройка и последо!
Настройка и последо! вательность работы
вательность работы с программой FLIP
с программой FLIP при программировании
при программировании микроконтроллера
микроконтроллера AT89C51ED2
AT89C51ED2 (продолжение)
(продолжение)

е) з)

ж) и)

284 285
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕНЕНИЕ ИНТЕРФЕЙСА RS232 ДЛЯ ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ В СИСТЕМЕ (ISP)

Прежде чем работать с программой IDE, необходимо подключить плату, схема которой по
казана на рис. 1.3.9.1, к порту RS232 (COM 1) компьютера и к USBDEBUGадаптеру, который
также необходимо подключить к USBпорту компьютера.

2.6.6.1. Программирование и штатный режим работы


Рис. 2.6.5.1. микроконтроллера C8051F067
Настройка и последо!
вательность работы Перед программированием микроконтроллер C8051F067 неоходимо распаять на плате
с программой FLIP
при программировании переходнике TQFP64PGA64 (см. рис. 1.3.9.3) и вставить его в предназначенную для него па
микроконтроллера нельку на плате по схеме (рис. 1.3.9.1). Джамперы перемычек P1–P3 установить в положение,
AT89C51ED2 соответствующее микроконтроллеру C8051F067 (замкнуть контакты 2–3 всех 3 перемычек).
(Окончание)
Джампер перемычки P4 установить в положение, соответствующее программированию мик
роконтроллера (замкнуть контакты 2–3). После этого необходимо включить питание платы и
запустить программу IDE.
После запуска программы на экране отобразится окно, показанное на (рис. 2.6.6.1.1,а).
Из подпункта «Options» («Опции») необходимо выбрать «Connection options…» («Опции свя
зи») (рис. 2.6.6.1.1,б) и в открывшемся окне выбрать радиокнопки «USB Debug Adapter»,
«JTAG» и нажать кнопку «OK» (рис. 2.6.6.1.1,в). Далее, выйдя в основное меню, необходимо
нажать кнопку «Connect» («Установить связь») (рис. 2.6.6.1.1,г), после чего в левом ниж
нем углу окна появится надпись «Ready» («Готово»), а в правом нижнем углу — надпись
«Target: C8051F067», означающие, что с микроконтроллером C8051F067 установлена
к) связь (рис. 2.6.6.1.1,д).
Далее необходимо выбрать подлежащий программированию файл в *.hex  формате.
Для этого в основном меню надо выбрать опцию «DEBUG» и в открывшемся подменю выб
Для ускорения загрузки файла опции «Erase» («Стирание») и «Blank Chek» («Проверка на рать опцию «Download Object File» («Загрузка объектного файла») (рис. 2.6.1.1,е). После это
чистоту») можно отключить, сняв галочки в полях соответствующих радиокнопок (но оставив го выбрать название файла (например, inrsf067.hex), который необходимо запрограммиро
галочки в полях «Program» («Программирование») и «Verify» («Верификация»); после этого для вать (рис. 2.6.1.1,ж, з) и нажать кнопку «Download» («Загрузка») (рис. 2.6.1.1,и).
загрузки файла необходимо нажать кнопку «RUN» («Запуск») (рис. 2.6.5.1,и). После успешной После этого последует загрузка файла inrsf067.hex, и при успешной загрузке в нижнем ок
загрузки файла с программой в микроконтроллер появится окно (рис. 2.6.5.1,к). Далее из не появится надпись:
программы FLIP можно выйти (рис. 2.6.5.1,к) и запустить уже собственную программу на компь
ютере (например «Hello.clw»). Downloadinng: D:\.\inrsf067.hex
Как уже указывалось ранее, программа FLIP — исключительно надежная и универсаль Download sucsessful.
ная программа, которая зарекомендовала себя с наилучшей сторны. Она одинаково хорошо Checksum: 0x9204
работает в ОС Win'98 и Win'XP (в т. ч. на скорости обмена в 115 200 бод). Автор (книги) убеди
тельно рекомендует ее для широкого использования. Это будет означать, что файл inrsf067.hex успешно загрузился в микроконтроллер (рис. 2.6.1.1,к).
После этого необходимо нажать кнопку «Disconnect» («Разрыв связи»), чтобы программно
2.6.6. Программирование микроконтроллеров C8051F067 отключить DEBUGAdapter от микроконтроллера (рис. 2.6.1.1,л); после отключения связи в пра
и C8051F330D в режиме ISP по интерфейсам C2 и JTAG вом нижнем углу окна вместо надписи «Target: C8051F067» появится надпись: «Target:
и штатный режим работы по интерфейсу RS232 C8051FXXXX»; (рис. 2.6.1.1,м); кроме того, светодиоды на корпусе USBDEBUGадаптетре по
гаснут. Это будет означать, что связь USBDEBUGадаптера с микроконтроллером отключена.
Для программирования и штатного режима работы микроконтроллеров C8051F067 Для перевода платы в штатный режим работы необходимо отключить питание платы и пе
и C8051F330D должна использоваться схема их сопряжения с компьютером реставить перемычку P4 в положение, соответствующее штатному режиму работы микроконт
(рис. 1.3.9.1). Для программирования микроконтроллеров используется бесплатно расп роллера с интерфейсом RS232 (замкнуть джампером контакты 1–2).
ространяемая ф. Silicon Laboratories программа IDE v.2.5.2 и USBDEBUGадаптер стои После этого необходимо вновь включить питание и запустить пользовательскую програм
мостью около 60 долл. Далее приведены рекомендации автора по настройке программы му для компьютера, например Hello.clw.
IDE для работы с микроконтроллерами C8051F067 и C8051F330D, а также по работе в
штатном режиме этих микроконтроллеров совместно с платой по схеме рис. 1.3.9.1.

286 287
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕНЕНИЕ ИНТЕРФЕЙСА RS232 ДЛЯ ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ В СИСТЕМЕ (ISP)

Рис. 2.6.6.1.1.
Последовательность Рис. 2.6.6.1.1.
операций Последовательность
по програмированию операций
микроконтроллера по програмированию
С8051F067 микроконтроллера
С8051F067
(продолжение)

а) в)

б) г)

288 289
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕНЕНИЕ ИНТЕРФЕЙСА RS232 ДЛЯ ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ В СИСТЕМЕ (ISP)

Рис. 2.6.6.1.1.
Рис. 2.6.6.1.1. Последовательность
Последовательность операций
операций по програмированию
по програмированию микроконтроллера
микроконтроллера С8051F067
С8051F067 (продолжение)
(продолжение)

д) ж)

е) з)

290 291
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕНЕНИЕ ИНТЕРФЕЙСА RS232 ДЛЯ ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ В СИСТЕМЕ (ISP)

Рис. 2.6.6.1.1.
Рис. 2.6.6.1.1.
Последовательность
Последовательность
операций
операций
по програмированию
по програмированию
микроконтроллера
микроконтроллера
С8051F067
С8051F067
(окончание)
(продолжение)

и) л)

к) м)

292 293
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕНЕНИЕ ИНТЕРФЕЙСА RS232 ДЛЯ ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ В СИСТЕМЕ (ISP)

2.6.6.2. Программирование и штатный режим работы


микроконтроллера C8051F330D
Для программирования микроконтроллера C8051F330D необходимо выполнить следую
щие действия.
При выключенном питании платы сопряжения (рис. 1.3.9.1) вытащить микроконтрол Рис. 2.6.6.2.1.
лер C8051F067 из панельки (если он там находится), вставить микроконтроллер Последователь!
C8051F330D (C8051F330P) в панельку DIP20 (DIP24), установить джамперы перемычек ность операций по
программированию
P1–P3 в положение, соответствующее микроконтроллеру C8051F330D (т. е. замкнуть кон микроконтроллера
такты 1–2 всех трех перемычек). Перемычку P4 установить в положение, соответствующее C8051F330D
программированию (замкнуть контакты 2–3). (продолжение)
После этого подключить к плате USBDEBUGадаптер, который также неоходимо подключить
к интерфейсу USB компьютерa. Подключить к плате кабель с интерфейсом RS232 и соединить
его с портом COM 1 компьютера.
Включить питание платы и запустить программу IDE. Все дальнейшие действия выполнять
в соответствии с п. 2.6.6.1 за следующими исключениями:
1. Интерфейс связи с микроконтроллером. Вместо интерфейса «JTAG» необходимо выб
рать интерфейс C2 (рис. 2.6.6.2.1,a). После нажатия кнопки «Connect» (рис. 2.6.6.2.1,б)
в правом нижнем углу появится надпись «Target: C8051F330» (рис. 2.6.6.2.1, в).
2. Название файла, подлежащего программированию в микроконтроллер, другое:
inrsf330.hex (рис. 2.6.6.2.1,г, д). б)
После того как файл запрограммирован в микроконтроллер, необходимо отключить связь
микроконтроллера с компьютером, т. е. выбрать опцию «Disconnect». После отключения связи в
правом нижнем углу вместо надписи «C8051F330» появится надпись «C8051FXXXX», означаю
щая, что связи компьютера с платой нет. При этом светодиоды на корпусе USBDEBUGадаптера
погаснут (рис. 2.6.6.2.1,e).
Далее необходимо отключить питание платы, переставить джампер перемычки P4 в положе
ние, соответствующее штатному режиму работы (замкнуть контакты 1–2). После этого необходи
мо вновь включить питание платы и запустить программу пользователя (например Hello.clw).

Рис. 2.6.6.2.1.
Последователь!
ность операций по
программированию
микроконтроллера
C8051F330D

в)

294 295
ПРОГРАММНЫЕ СРЕДСТВА ИНТЕРФЕЙСА RS232 ПРИМЕНЕНИЕ ИНТЕРФЕЙСА RS232 ДЛЯ ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ В СИСТЕМЕ (ISP)

Рис. 2.6.6.2.1.
Последователь! Рис. 2.6.6.2.1.
ность операций по Последователь!
программированию ность операций по
микроконтроллера программированию
C8051F330D микроконтроллера
(продолжение) C8051F330D
(окончание)

г) е)

д)

296
Заключение Список использованной
литературы
Приведенные в книге примеры показывают, что интерфейс RS232 неплохо справляется Печатные издания
с программированием микроконтроллеров в системе (ISP, ICP). Является ли это его преде
лом? И вообще, каков предел применения интерфейса RS232 в системах, которые использу 1. Баррингтон Брюс Б. Как создавался Кларион. // Мир ПК.– 1993.– № 2 – С. 5664.
ют микроконтроллеры, в качестве удаленных от компьютера устройств, обменивающихся с 2. Бирюков С.А. Цифровые устройства на МОПинтегральных микросхемах. – М.: Радио и
компьютером информацией? Опыт конструирования подобного типа систем показывает, что связь,1996.
интерфейс RS232 целесообразно использовать в таких системах сбора и обработки инфор 3. Интегральные микросхемы: Микросхемы для линейных источников питания и их
мации, в которых количество датчиков не превышает 20÷30, а частота обновления инфор применение. – М.: ДОДЭКА, 1988.
мации, получаемой с них, — 20 Гц, т. е. дискретность по времени (∆t) не менее 0,05 с. 4. Кузьминов А.Ю. Интерфейс RS232: Связь между компьютером и микроконтроллером.–
На практике встречается масса задач, где требуется достаточно прецизионные измерения М.: Радио и связь, 2004.
низкочастотных сигналов, а дискретность обновления данных намного больше, чем 0,05 с 5. Кузьминов А.Ю. Универсальная система сбора и обработки данных АСИР–3. // Мир ПК.
(1 с и более). В качестве примеров можно привести системы, применяющиеся как автомати – 1996. – № 6. – С. 4041.
зированные средства поверки и градуировки счетчиков объема газа или воды, о которых бо 6. Кузьминов А.Ю. Удаленные системы сбора информации с датчиков на базе
лее подробно можно прочитать в приложении П.2. однокристальных микроЭВМ. // Автоматизация и производство. – 1996 – № 3. – C. 79.
Целесообразность применения интерфейса RS232 в таких устройствах доказана много 7. Кузьминов А.Ю. Однокристальные микроЭВМ – основа удаленных систем сбора и
летним «стажем» их работы (все подобные системы сбора, сконструированные автором и за обработки сигналов, поступающих с датчиков. // Электроника и компоненты. – 1998. –
пущенные в эксплуатацию, работают до сих пор и некоторые из них — более 10 лет). Косвен № 2. – C. 1819.
ным подтверждением этой целесообразности может служить еще и тот факт, что такие веду 8. Кузьминов А.Ю. Новые MCS51 – совместимые микроконтроллеры и их применение в
щие фирмыпроизводители аналоговых микросхем АЦП и ЦАП, как Analog Devices, Texas системах сбора информации с датчиков. // Контрольно – измерительные приборы и
Instruments, Philips, Atmel, Silicon Laboratories, с недавнего времени стали выпускать микро системы. – 1997. – № 6. –C. 32–35; 1998. – № 7. – C. 34–36.
контроллеры «системы на кристалле», которые используют интерфейс RS232 не только в каче 9. Фролов А.В., Фролов Г.В. Программирование модемов. – М.: ДИАЛОГМИФИ, 1993.
стве обычной связи с компьютером. Эти микроконтроллеры (как уже обсуждалось ранее) име 10. Хоровиц П., Хилл У. Искусство схемотехники: В 3 т. / Пер. с англ. – М.: Мир,1993.
ют возможность «программирования в системе» и именно по интерфейсу RS232 (это, к сожа 11. Шило В.Л. Популярные микросхемы КМОП: Справ. – М.: ЯГУАР, 1988.
лению, не касается микроконтроллеров ф. Silicon Laboratories).
Применяя новый алгоритм обмена по RS232 (см. 2.4), можно получить высокие скорост
Интернет
ные и надежностные характеристики связи компьютера с микроконтроллером уже в 12. www.analog.com
Win'98/XP. Это позволяет поднять качество программ для компьютерных систем сбора и об 13. www.atmel.com
работки информации на новый современный уровень. 14. www.maximic.com
15. www.semiconductorphilips.com
16. www.silabs.com
17. www.ti.com
18. www.msdn.microsoft.com/library
19. www.gapdev.com

298 299
ПРИЛОЖЕНИЕ 1. СПРАВОЧНЫЕ ДАННЫЕ ПО ИНТЕРФЕЙСУ RS232
ПРИЛОЖЕНИЯ Порт COM 1
Регистр данных (data register). Адрес — 3f8h.
Доступен по записи и по чтению. Регистр данных используется для двоякой цели.
1) для ввода из порта и вывода в порт байта данных,
Приложение 1 2) для установки скорости обмена по RS232.

Справочные данные Скорость обмена по интерфейсу устанавливается следующим образом. Вначале в порт с
адресом 3fbh (см. далее) необходимо записать байт равный 80h. Далее в порт с адресом 3f8h
необходимо записать младший байт делителя максимальной скорости обмена в 115 200 бод,
по интерфейсу RS232 затем в порт 3f9h — старший байт делителя. Как правило, старший байт делителя использу
ется достаточно редко (для очень медленных скоростей обмена), поэтому он должен быть ра
вен нулю.
Регистр разрешения прерываний (interrupt enable register). Адрес — 3f9h.
П.1.1. Контакты разъема интерфейса RS232 компьютера Доступен только для записи. Для того, чтобы разрешить перечисленные ниже прерыва
ния, необходимо записать в этот регистр байт, содержимое которого приводится в следую
В компьютере могут присутствовать как 25штырьковый (DB25), так и 9штырьковый (DB9)
щей табличке.
Таблица 1. разъемы RS232. Названия сигналов и соответствующие им номера контактов приведены для
Контакты обоих типов разъемов (табл. 1). 7 6 5 4 3 2 1 0
разъемов RS232
0 0 0 0
№ к–та DB25 № к–та DB9 Название сигнала Расшифровка Вход/выход Бит № :
0: 1–Разрешение прерывания, когда принятые данные готовы.
Transmitter Data (передатчик 1: 1–Разрешение прерывания, когда буфер передатчика пуст.
2 3 TxD Выход
данных) 2: 1–Разрешение прерывания по битам ERROR или BREAK.
3 2 RxD Recеivеr Data (приемник данных) Вход 3: 1–Разрешение прерывания по состоянию CTS, DSR, RI, DCD.

4 7 RTS Request To Send (запрос передачи) Выход Необходимо отметить, что для того, чтобы задействовать этот регистр как регистр разре
шения прерываний (а не как старший байт делителя для установки скорости обмена, имеющий
5 8 CTS Clear To Send (сброс передачи) Вход тот же адрес 3f9h), нужно вначале обнулить 7й бит в порту с адресом 3fbh (см. далее).
Регистр идентификации прерывания (interrupt identification register). Адрес — 3fah.
6 6 DSR Data Set Ready (готовность данных) Вход
Доступен только для чтения. Читая содержимое трех младших бит этого регистра, можно по
лучить источник прерывания:
7 5 SG Signal Ground (сигнальная земля) –
Data Carrier Detect (обнаружение
8 1 DCD Вход
несущей) 7 6 5 4 3 2 1 0
Data Terminal Ready (готовность 0 0 0 0 0
20 4 DTR Выход
терминала) Бит №
22 9 RI Ring Indicator (индикатор звонка) Вход 0: 1– прерываний нет.
1: 00: Прерывание по состоянию линий модема.
2: Устанавливается при изменении состояния линий CTS,
П.1.2. Значения регистров состояния и управления DSR, RI или DCD. Сбрасывается при чтении регистра состояния
в интерфейсе RS232 компьютера модема (адрес 3feh – см. далее)
01: Регистр передатчика пустой. Сбрасывается после записи
Базовые адреса COMпортов компьютера следующие: COM 1 — 3f8h, COM 2 — 2f8h,
новых данных в регистр данных (3f8h).
COM 3 — 3e8h и COM 4 — 2e8h.
10: Принятые данные готовы для чтения. Сбрасывается после
Для порта COM 1 адреса регистров состояния и управления и значения этих регистров
чтения данных из регистра данных (3f8h).
приведены ниже.
300 301
ИНТЕРФЕЙС RS232: СВЯЗЬ МЕЖДУ КОМПЬЮТЕРОМ И МИКРОКОНТРОЛЛЕРОМ ПРИЛОЖЕНИЕ 1. СПРАВОЧНЫЕ ДАННЫЕ ПО ИНТЕРФЕЙСУ RS232

11: Прерывания по значению регистра состояния линий 7 6 5 4 3 2 1 0


приемника (адрес 3fdh). Возникают при переполнении (ОЕ),
ошибке паритета (PE), ошибке формата (FE) или сигналу Бит № :
BREAK (BI). Сбрасывается при чтении регистра состояния 0: 1– Данные готовы для чтения. Сбрасывается после чтения
линий приемника (3fdh). регистра данных (3f8h).
1: 1– Ошибка переполнения. Предыдущий байт потерян.
Регистр управления линиями (line control register) . Адрес — 3fbh. 2: 1– Ошибка паритета. Сбрасывается после чтения регистра
Доступен по записи и чтению. состояния линии (т. е. настоящего регистра – 3fdh).
Этот регистр определяет формат передаваемых данных, контроль паритета, количество 3: 1– Ошибка формата. Отсутствие стопбит в посылке.
стопбит, управляет линией TxD при отсутствии передачи и устанавливает скорость обмена. 4: 1– Обнаружен сигнал BREAK на линии.
5: 1– Регистр передатчика пустой и готов принять новый байт.
7 6 5 4 3 2 1 0 6: 1– Сдвиговый регистр передатчика пустой. Этот регистр
получает байт из регистра передатчика (предыдущий регистр)
Бит № : и с помощью сдвигов бит за битом передает байт. Если этот бит
0: Длина слова в битах: равен 1, это значит, что передан последний бит байта.
1: 00 – 5, 01 – 6, 10 – 7, 11 – 8. 7: 1 – Таймаут устройства.
2: Количество стопбит: 0 – 1 бит, 1 – 2 бита.
3: Контроль паритета (четности): Регистр состояния модема (modem status register). Адрес — 3feh.
4: X0–нет, 01–нечетность, 11–четность. Доступен по чтению. Регистр состояния модема определяет состояние линий квитирова
5: Установка паритета: 1 – бит четности = 0, если биты 3 и 4 ния RS232.
равны 11; бит четности = 1, если биты 3 и 4 равны 01.
6: Разрешение выдачи сигнала BREAK в отсутствие передачи. 7 6 5 4 3 2 1 0
1 Перевод линии TxD в состояние 0 (–10 В) – сигнал BREAK.
0–Перевод линии TxD в состояние 1 (+10 В). Бит № :
7: Бит установки скорости обмена. 0: 1– Линия CTS изменила свое состояние.
1 – Установка скорости обмена в регистрах 3f8h и 3f9h. 1: 1– Линия DSR изменила свое состояние.
0 – Регистры 3f8h и 3f9h используются в обычном режиме. 2: 1– Линия RI изменила свое состояние.
3: 1– Линия DCD изменила свое состояние.
Регистр управления модемом (modem control register). Адрес — 3fch. 4: 1– Линия CTS активна (лог. 1).
Доступен по записи. 5: 1– Линия DSR активна (лог. 1).
Этот регистр управляет линиями DTR и RTS и диагностикой RS232. 6: 1– Линия RI активна (лог. 1).
7: 1– Линия DCD активна (лог. 1).
7 6 5 4 3 2 1 0
0 0 0
Бит № :
0: 1–установить сигнал DTR в лог. 1(+10В), 0 – в лог. 0 (–10В).
1: 1–установить сигнал RTS в лог. 1(+10В), 0 – в лог. 0(–10В).
2: 1–установить запасную линию OUT1 (не используется).
3: 1–установить запасную линию OUT2 (не используется).
4: 1–замкнуть линию TxD на RxD для диагностики порта.

Регистр состояния линии (line status register). Адрес — 3fdh.


Доступен по чтению.
Регистр контролирует правильность обмена по RS232.

302
ПРИЛОЖЕНИЕ 2. УДАЛЕННЫЕ КОМПЬЮТЕРНЫЕ СИСТЕМЫ СБОРА И ОБРАБОТКИ ИНФОРМАЦИИ

женными с ним 8канальным коммутатором каналов ф. Analog Devices и одноканальным


24разрядным (используется 16 разрядов) сигмадельтаAЦП ADS1210 ф. BurrBrown(TI)
Приложение 2 (2й вариант). Прибор имеет встроенную (постоянную и оперативную) память, которая позво
ляет запоминать входную информацию, предварительно ее обрабатывать и передавать в
Удаленные компьютерные системы сбора компьютер в сжатом виде. Наличие встроенной оперативной памяти программ позволяет
отказаться от дорогостоящих эмуляторов и программаторов для микроконтроллеров и ПЗУ.
и обработки информации, поступающей Все программы (в т. ч. и для микроконтроллера) пишутся на компьютере и (при необходимос
с датчиков аналоговых, частотных ти) переносятся в оперативную память программ через тот же интерфейс RS232.
Микроконтроллер позволяет предварительно обрабатывать входную информацию и пере
и дискретных сигналов на базе 51совместимых давать ее в компьютер, где производится окончательная обработка и распечатка измеренных
данных на экране или принтере.
однокристальных микроконтроллеров Программное обеспечение и конфигурация системы согласуются с заказчиком. Програм
мы работают в оконном режиме (меню), поддерживается «мышь». Операционные системы,
в которых работает устройство: MSDOS или WINDOWS'98/XP.
П. 2.1.Удаленные компьютерные системы сбора
и обработки информации, поступающей с датчиков П. 2.1.2. Назначение и область использования
аналоговых, частотных и дискретных сигналов
на базе микроконтроллеров P80C552 и AT89C51 Система сбора и обработки может найти применение в самых разнообразных отраслях на
уки, техники и производства при следующих процессах:
1) автоматизированной градуировке, калибровке и поверке расходомеров и счетчиков
П. 2.1.1. Краткое описание
объема жидкостей и газов, а также теплосчетчиков,
Система предназначена для предварительной обработки и ввода в компьютер сигналов с 2) автоматизированном вводе в компьютер показаний датчиков температуры и давления,
датчиков аналоговых (ток или напряжение), частотных (частота, количество импульсов) и диск 3) автоматизированном вводе в компьютер показаний датчиков (микровертушек, тензо
ретных (включено или выключено) сигналов. и термодатчиков и т. д.), измеряющих гидродинамические параметры турбулентных
потоков (скорость, давление, силу и т. п.), используемых в научных исследованиях,
Рис. П2.1.1. 4) вибродиагностике,
Блок!схема системы
сбора
5) автоматизированном вводе в компьютер показаний с датчиков, измеряющих меди
кобиологические параметры человека: частоту дыхания и сердечных сокращений,
кровяное давление, биотоки мозга и т. п.

П.2.1.3. Технические характеристики


3.1 Диапазон аналоговых сигналов:
— напряжение ...........................................................................................................0÷+5 В,
— ток ................................................................................................0÷20 мА или 4÷20 мА,
Система состоит из компьютера, устройства сбора, предварительной обработки и ввода в
— погрешность измерения аналогового сигнала .........................±0,005 В (10разр. АЦП)
компьютер показаний датчиков – устройства сопряжения с объектом (УСО) и программного
................................................................................................или ± 0,0005 В (16разр. АЦП).
обеспечения.
УСО – прибор в корпусе, который подключается к компьютеру через стандартный интерфейс 3.2. Количество аналоговых сигналов ..................................................................................8.
RS232 (последовательный порт COM 1 или COM 2). Прибор гальванически развязан от компьюте 3.3. Диапазон частотных сигналов:
ра с помощью оптронных развязок на пробивное напряжение до 1500 В. Удаление прибора — частота ........................................................................................................0,1÷10000 Гц,
от компьютера может достигать нескольких десятков метров и более в зависимости от скорости об — количество импульсов ......................................................................................1÷65536.
мена информацией. Прибор оснащен 16 (24) разъемами, к которым подключаются кабели от — интервал времени измерения ..................................................................0,05÷3000 с.
8 аналоговых и от 8 (16) частотных датчиков, а также разъемом, к которому подключаются диск Количество частотных каналов: ..........................................................8 (с 16разр. АЦП)
ретные сигналы. Прибор является специализированным микрокомпьютером на базе микро ................................................................................................или 8 и 15 (с 10разр. АЦП).
контроллера P80C552 (ф. Philips) со встроенным 10разрядным 8канальным аналогоцифро 3.4. Количество дискретных сигналов: вывода....................................................................1,
вым преобразователем (1й вариант) или микроконтроллера АТ89S8252 (ф. ATMEL) с сопря ввода.......................................................................1.

304 305
ИНТЕРФЕЙС RS232: СВЯЗЬ МЕЖДУ КОМПЬЮТЕРОМ И МИКРОКОНТРОЛЛЕРОМ ПРИЛОЖЕНИЕ 2. УДАЛЕННЫЕ КОМПЬЮТЕРНЫЕ СИСТЕМЫ СБОРА И ОБРАБОТКИ ИНФОРМАЦИИ

Дискретные сигналы совместимы со стандартными TTLуровнями. Возможна поставка Рис. П. 2.1.7.1.


системы с гальванической развязкой дискретных сигналов. Некоторые окна, открывающиеся
в программе поверки счетчиков объема
3.5. Скорость обмена информацией с компьютером: .......................9600 и 115 200 бод. газа (OС DOS) (продолжение):
3.6. Габариты системы, см: 30х20х8 (корпус от выносного привода CD к компьютeру note б — выбор типа поверяемого прибора;
book, 40x60x9,5 (компьютерный корпус Slim), 40x60x8 (корпус Super Slim), 40x60x7,5 в — ввод электрических
параметров датчиков;
(корпус Work Station) . г — выбор необходимого сопла
3.7. Питание системы: ...........................................................................................220 в 15 Вт. для поверки
3.8. Удаление от компьютера: .........................................................десятки и более метров.

П. 2.1.4. Технико-экономическая эффективность


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

П. 2.1.5. Сведения о документации


Документация поставляется с системой сбора на дискете или компакт диске.

П. 2.1.6. Сведения о внедрении


Системы сбора и обработки (в различных модификациях) работают на московском за
воде «Водоприбор» (водяная система), в А/О «Моспромгаз» (газовая система), ООО «НПП
КИПконтроль», Москва (газовая система), Белгородском заводе расходомеров (2 газовых
системы), в г. Салавате (водяная система), Уфе (водяная система), Туле (газовая система),
Рязани (водяная система), Брянске (газовая система) и др.

П. 2.1.7. Внешний вид окон, открывающихся в процессе работы в)


программы поверки счетчиков объема газа (ОС DOS)
На рис. П. 2.1.7, а–к показан общий вид окон, при использовании программы поверки счетчи
ков объема газа. Эта программа написана на Clarion v.3.100 с использованием графического ин
терфейса пользователя (Graphic User Interface — GUI3) и работает в ОС DOS. Из рисунка можно уви
деть окно, на которое выводится информация при работе тестовой программы, применяемой для
поверки самой системы РосТестом рис. П.2.1.7.1,з. Аналогичное окно выводится на экран при пос
тавке базового варианта программного обеспечения системы сбора.
Рис. П. 2.1.7.
Некоторые окна, открывающиеся
в программе поверки счетчиков
объема газа (OС DOS):
а — общий вид меню программы

г)

а)
306 307
ИНТЕРФЕЙС RS232: СВЯЗЬ МЕЖДУ КОМПЬЮТЕРОМ И МИКРОКОНТРОЛЛЕРОМ ПРИЛОЖЕНИЕ 2. УДАЛЕННЫЕ КОМПЬЮТЕРНЫЕ СИСТЕМЫ СБОРА И ОБРАБОТКИ ИНФОРМАЦИИ

Рис. П. 2.1.7.1. Рис. П. 2.1.7.1.


Некоторые окна, открывающиеся Некоторые окна, открывающиеся
в программе поверки счетчиков в программе поверки счетчиков объема
объема газа (OС DOS) газа (OС DOS) (окончание):
(продолжение): з — тест системы сбора;
д — выбор режимов и — «прибор годен» (погрешность
измерения; в заданных границах);
е — настройка расхода к — распечатка графика на бумаге
(экран видно издалека);
ж — процесс измерений

д) з)

е) и)

ж) к)

308 309
ИНТЕРФЕЙС RS232: СВЯЗЬ МЕЖДУ КОМПЬЮТЕРОМ И МИКРОКОНТРОЛЛЕРОМ ПРИЛОЖЕНИЕ 2. УДАЛЕННЫЕ КОМПЬЮТЕРНЫЕ СИСТЕМЫ СБОРА И ОБРАБОТКИ ИНФОРМАЦИИ

П. 2.1.8. Примеры работы базового комплекта программ систем сбора Рис. П. 2.1.8.2.
на базе микроконтроллера АТ89C51 и АЦП ADS1210 Среда работы — WINDOWS'XP,
в ОС Windows98/XP язык программирования —
Clarion v.6.0:
На рис. П. 2.1.8.1, а, б показан общий вид окон при работе базового комплекта программ (в тес a — окно ввода параметров
порта связи (порт — COM 2,
товом режиме), в ОС Windows98, а на рис. П. 2.1.8.2, а, б — при работе в ОС WindowsXP. скорость обмена информацией
с компьютером — 115 200 бод)
Рис. П. 2.1.8.1. и времени измерения (10 с)
Общий вид окон при работе перед нажатием кнопки «Запуск»;
базового комплекта программ: б — окно вывода результатов
а — окно ввода параметров измерений показано
порта связи (порт — COM 1, после окончания измерений,
скорость обмена информацией (кнопки «Выход» и «Продолжить»
с компьютером — 9600 бод) и доступны)
времени измерения (10 с);
показано перед нажатием
кнопки «Запуск»;
б — окно вывода результатов а)
измерений (в процессе измере!
ний). Кнопки «Выход» и «Продол!
жить» заблокированы до окон!
чания измерений)

а)

б)

б)

П. 2.1.9.Фотографии систем сбора


На рис. П. 2.1.9.1 а) — д) показана система сбора для поверки газовых счетчиков
в ООО «НПП КИПконтроль» (Москва). Стрелками показано УСО в компьютерном корпусе ти
па Slim. Система сбора эксплуатируется с 2000 г. по настоящее время и до сих пор показы
вает отличную и надежную работу в составе установки по поверке и градуировке счетчиков
объема газа.

310 311
ИНТЕРФЕЙС RS232: СВЯЗЬ МЕЖДУ КОМПЬЮТЕРОМ И МИКРОКОНТРОЛЛЕРОМ ПРИЛОЖЕНИЕ 2. УДАЛЕННЫЕ КОМПЬЮТЕРНЫЕ СИСТЕМЫ СБОРА И ОБРАБОТКИ ИНФОРМАЦИИ

Рис. П. 2.1.9.1. Рис. П. 2.1.9.1.


Система сбора для Система сбора для
поверки газовых поверки газовых
счетчиков в ООО счетчиков в ООО
«КИП!контроль» «КИП!контроль»
(Москва). (Стрелками (Москва). (Стрелками
показано УСО показано УСО
в компьютерном в компьютерном
корпусе типа Slim.) корпусе типа Slim.)
Эксплуатируется Эксплуатируется
с 2000 г. с 2000 г.
(продолжение)

а) в)

б) г)

312 313
ИНТЕРФЕЙС RS232: СВЯЗЬ МЕЖДУ КОМПЬЮТЕРОМ И МИКРОКОНТРОЛЛЕРОМ ПРИЛОЖЕНИЕ 2. УДАЛЕННЫЕ КОМПЬЮТЕРНЫЕ СИСТЕМЫ СБОРА И ОБРАБОТКИ ИНФОРМАЦИИ

Рис. П. 2.1.9.1. Рис. П. 2.1.9.2.


Система сбора для Система сбора
поверки газовых для поверки газовых
счетчиков в ООО счетчиков в организации
«КИП!контроль» Моспромгаз (Москва).
(Москва). (Стрелками (Стрелками показано
показано УСО УСО в корпусе
в компьютерном от выносного привода CD.)
корпусе типа Slim.) Эксплуатируется с 1995 г.
Эксплуатируется (продолжение)
с 2000 г.
(окончание)

д) б)
На рис. П. 2.1.9.2, а–г показана система сбора для поверки газовых счетчиков в органи
зации Моспромгаз (Москва). Стрелками показано УСО в корпусе от выносного привода CD.
Эксплуатируется с 1995 г. и до сих пор идеально работает.
Рис. П. 2.1.9.2.
Система сбора
для поверки газовых
счетчиков
в организации
Моспромгаз (Москва).
(Стрелками показано
УСО в корпусе
от выносного привода
CD.) Эксплуатируется
с 1995 г.

а) в)

314 315
ИНТЕРФЕЙС RS232: СВЯЗЬ МЕЖДУ КОМПЬЮТЕРОМ И МИКРОКОНТРОЛЛЕРОМ ПРИЛОЖЕНИЕ 2. УДАЛЕННЫЕ КОМПЬЮТЕРНЫЕ СИСТЕМЫ СБОРА И ОБРАБОТКИ ИНФОРМАЦИИ

Рис. П. 2.1.9.2. темы сбора с разрешением не хуже 0,001 с (реальное разрешение по времени —не
Система сбора
для поверки газовых более нескольких микросекунд!).
счетчиков • новая микросхема источника опорного напряжения ADR293 производства
в организации ф. Analog Devices Inc., обладающая пониженным уровнем шума, повышенной точ
Моспромгаз (Москва).
(Стрелками показано ностью и значительно меньшей зависимостью опорного напряжения от температуры,
УСО в корпусе • новая микросхема защиты входов АЦП от перенапряжений MAX4507 производства ф.
от выносного привода MAXIM, защищающая входы от перенапряжений до ±36 В при включенной системе и
CD.) Эксплуатируется
с 1995 г. до ±40 В — при выключенной; применение MAX4507 защищает тракт АЦП от непра
(окончание) вильного подключения датчиков (напряжение питания которых достигает +24 В), т. е.
не дает АЦП выйти из строя,
• новая микросхема высокоскоростной, высоковольтной (скорость передачи — нес
колько Мбод, пробивное напряжение — до 2,5 кВт) гальванической развязки нового
типа (без использования оптронов) iCoupler — ADuM1201 производства ф. Analog
Devises Inc., сочетающей в одном корпусе сразу два преобразователя — на прием и
на передачу; применение таких гальванических развязок позволило резко увеличить
надежность работы интерфейса связи системы сбора с компьютером (RS232), особен
но на высокой скорости 115 200 бод, значительно снизить электромагнитный шум
компьютера, проникающий в тракт АЦП и влияющий на его точность (практически пол
ностью его исключить).
Программное обеспечение
Программное обеспечение новой системы сбора состоит из 2 программ: 1) для микроко
г) нтроллера (MSC1210) и 2) для компьютера.
Программа для микроконтроллера написана на современном языке Cи, обладающем
высокими оптимизирующими свойствами по памяти и быстродействию (используется компи
П. 2.1.10. Новая система сбора (2005 г.) лятор C51 V6.14 производства ф. Keil Software).
В феврале 2005 г. закончена разработка новой системы сбора, сконструированной на Программа для компьютера поставляется как базовое программное обеспечение для но
базе выпуска новейших микросхем от мировых лидеров по производству электронных компо вой системы: программы, работающей в операционных системах Windows98 (SE2) и
нент (таких как Analog Devices Inc., Texas Instruments, MAXIM и др.). Программное обеспечение WindowsXP(SP2) (язык программирования Clarion V6.0).
системы сбора написано для работы в операционных системах MSDOS(V7.X), Программы отличают высокая скорость и надежность работы благодаря использованию в
Windows98(SE2) и WindowsXP(SP2). Особенностями новой системы являются аппаратные них нового алгоритма обмена по интерфейсу RS232, а также применению прямых процессор
средства и программное обеспечение. ных команд ввода/вывода в порт RS232 (in и out). Необходимо отметить, что если в операци
Аппаратные средства онных системах MSDOS и Windows98 эти команды разрешены, то в WindowsXP они запреще
Аппаратные средства касаются модернизации УСО. Новое УСО отличается от стандартного ны (в стандартном режиме работы). Для применения таких команд в WindowsXP в програм
тем, что в нем применены новейшие микросхемы современной элементной базы, среди которых: мном обеспечении используются недокументируемые команды WindowsXP, работающие в
привилегированном режиме.
• новый высокоскоростной (скорость работы повышена в 3 раза по сравнению со стан В тестовом режиме работы представленной программы на все частотные входы парал
дартным) 51совместимый микроконтроллер MSC1210Y5 производства ф. Texas лельно подается один и тот же сигнал с генератора — меандр определенной частоты с ампли
Instruments, в состав которого, в частности, входят: тудой 12 В, а на все аналоговые входы — параллельно фиксированное напряжение около
— 24разрядный 8канальный Σ∆АЦП, обладающий возможностью автоматической 3 В с прецизионного источника питания.
калибровки нуля и полной шкалы и оснащенный низкочастотными фильтрами, подав Системы сбора могут поставляться в различной комплектации: от полной (рис. П. 2.1.9.1.)
ляющими помехи (шум) до 120 дБ; благодаря применению такого АЦП удалось достичь — стойка, укомплектованная компьютером с принтером и УСО, укомплектованное датчиками
разрешения аналогоцифрового преобразования системы сбора лучше ±0,001 В (ре с кабелями связи с УСО, до самой простейшей — только одно УСО. Вариант комплектации вы
альное разрешение — не более ±0,0003 В), бирает заказчик.
— сверхпрецизионный системный таймер; использование такого системного тайме Программное обеспечение систем сбора поставляется с базовым комплектом программ.
ра, совместно с прецизионными кварцевым резонатором и подстроечным конденса Это универсальные измерительные тестовые программы (результаты работы программ анало
тором позволило достичь точности измерения и задания временных интервалов сис
316 317
ИНТЕРФЕЙС RS232: СВЯЗЬ МЕЖДУ КОМПЬЮТЕРОМ И МИКРОКОНТРОЛЛЕРОМ

гичны приведенным на рис. П. 2.1.9.1 и П. 2.1.9.2 окнам). Помимо базового комплекта постав
ляются программы на заказ (по ТЗ заказчика). Имеются уже готовые разработки программ по
поверке и градуировке газовых счетчиков и водосчетчиков, предназначенные для работы сис
тем сбора в составе соответствующих установок. Среды работы программ: MSDOS и WIN
DOWS'98/XP.

П. 2.1.11. Новая разработка многоканальной системы сбора


В настоящее время (конец 2005 г.) ведется новая разработка системы сбора для поверки
и градуировки счетчиков объема и расхода воды в московской организации «Водоприбор».
Система сбора сконструирована на базе микроконтроллера AT89C51ED2 от ф. ATMEL, сопря
женного с ней Σ∆АЦП Burr Brown (Ti), 16канального коммутатора аналоговых каналов
и 16 счетчиков импульсов, часть из которых организована на внутренних счетчиках/таймерах
Сведение об авторе
микроконтроллера, а остальные используют счетчики/таймеры 82C54, сопряженные с микро
контроллером по шине адрес/данные. Все счетчики считают поступающие импульсы одновре Алексей Юрьевич Кузьминов родился 7 декабря 1952 г., кандидат технических наук (1982 г.),
менно. Интерфейс системы сбора оборудован развязками ADUM1201; для защиты входов окончил факультет автоматики и вычислительной техники Московского энергетического инсти
АЦП от перенапряжения используется новая микросхема MAX4507 производства фирмы тута в 1975 г. по специальности «Автоматизированные системы управления».
MAXIM. Сферы деятельности — разработка и ввод в эксплуатацию:
• компьютерных удаленных (телеметрических) и автономных (бескомпьютерных)
систем сбора и обработки информации, полученной с датчиков аналоговых, частотных
и дискретных сигналов на базе 51совместимых микроконтроллеров.
email: compmicrosys@mail.ru
http://www.compmicrosys.ownsite.ru

319

Вам также может понравиться