#include <16f877a.h>
#use delay (clock = 20000000) /* Сообщаем компилятору частоту резонатора (20 МГц) */
/* Сообщаем компилятору о требуемой скорости обмена и используемых выводах */
#use rs232(baud=9600, xmit=PIN_A1, rcv=PIN_A2)
#bit SWITCH1 =6.0 /* Кнопка подключена к RB0 */
void main(void)
{
while(TRUE)
{
if(getch() == ’G’)
{
while (SWITCH1) {;} /* Пока кнопка разомкнута (1), ничего не делаем */
printf("Кнопка 1 замкнута \n");
}
}
}
Поскольку в качестве выводов приемника и передатчика используются выводы RA1 и RA2, компилятор сгенерирует код программно-реализованного UART, подобный использованному нами в Программе 12.14. Именно по этой причине компилятору необходима информация о частоте кварцевого резонатора микроконтроллера — для формирования требуемых задержек. Если же мы укажем выводы RC6 и RC7, то для реализации последовательного интерфейса компилятор автоматически воспользуется встроенным модулем USART. В нашем примере для реализации программного UART потребовалось 146 команд, тогда как при использовании модуля UART размер программы составил всего 74 команды.
Однако для реализации полноценного соединения недостаточно одного только выбора подходящего протокола. При работе микроконтроллеров PIC используются напряжения нормальных логических уровней и токи, которые предназначены для организации соединений на расстояниях не более 30 см (1 фут). Хотя при соблюдении определенных правил[163] это расстояние можно значительно увеличить, при относительно больших скоростях обмена должны использоваться принципиально другие методы формирования сигналов.
В эпоху электромеханических терминалов широко использовался интерфейс «Токовая петля 20 мА», ставший стандартом де-факто. В этом интерфейсе для обозначения состояний лог. 0 и лог. 1 использовались разные значения тока: 0 мА и 20 мА соответственно. Привязка к току, а не напряжению позволяла избежать влияния потерь в линии (поскольку вытекающий ток должен быть равен втекающему), и, кроме того, тока такой величины было достаточно для непосредственного управления электромагнитным реле приемного устройства.
Источники тока реализуются посредством источников высокого напряжения, последовательно с которыми включается большое сопротивление. Именно из-за последнего величины постоянных времени получаются настолько большими, что хотя они и удовлетворяли требованиям эпохи скоростей в 110 бод, но для использования в электронных терминалах, UART и модемах не годятся. В качестве стандартного интерфейса для подключения терминального оборудования (Data Terminal Equipment — DTE) к устройствам передачи данных (Data Circuit Equipment — DCE), как правило к модемам, в 1969 году был предложен интерфейс RS-232[164]. В спецификации этого интерфейса были определены не только различные уровни сигналов, как показано на Рис. 12.24,
Рис. 12.24.
Стандарт RS-232 рассчитан на дальность до 15 м (50 футов) при максимальной скорости 20 Кбод, что достигается использованием для передачи лог. 0 (это состояние линии часто называется