Читаем PIC-микроконтроллеры. Все, что вам необходимо знать полностью

; **************

; * ФУНКЦИЯ: Передает 8-битное значение в асинхронном режиме *

; * ФУНКЦИЯ: Скорость передачи: 1200…9600 для XTAL 1…20 МГц *

; * РЕСУРСЫ: Макрокоманда BAUD_DELAY, формирующая задержку 0.5 битового интервала; COUNT *

; * ВХОД: 8-битное слово данных в DATA_OUT, предопределенные константы XTAL и BAUD *

; * ВЫХОД: Содержимое DATA_OUT обнуляется, байт передан *

; **************

PUTCHAR movlw 8; Восемь битов данных

               movwf COUNT

               bcf PORTA,ТХ; Старт-бит

               Baud_delay; Задержка 2x0.5 бита

               Baud_delay

; Теперь выдвигаем байт данных, начиная с младшего бита

PUTCHAR_LOOP rrf DATA_OUT,f; Сдвигаем вправо через перенос

                btfss STATUS,С; Проверяем флаг переноса

                  goto ITS_A_0; ЕСЛИ 0, ТО передаем 0

                bsf PORTA,TX; ИНАЧЕ передаем 1

                  goto PUTCHAR_NEXT; и продолжаем

ITS_A_0 bcf PORTA,TX; Выдаем 0

PUTCHAR_NEXT

                Baud_delay; Задержка на 1 бит

                Baud_delay

                decfsz COUNT,f; Повторяем восемь раз

                   goto PUTCHAR_LOOP

                bsf PORTA,ТХ; Стоп-бит

                Baud_delay

                Baud_delay

                return

; **************

; * ФУНКЦИЯ: Принимает 8-битное значение в асинхронном режиме *

; *               : Скорость передачи: 1200…9600 для XTAL 1…20 МГц *

; * РЕСУРСЫ: Макрокоманда BAUD_DELAY, формирующая задержку 0.5 битового интервала; COUNT *

; * ВЫХОД: Принят байт в DATA_IN *

; * ВЫХОД: Если нет ошибки кадрирования, ERR = 0, ИНАЧЕ ERR = -1*

; **************

GETCHAR movlw 8; Восемь битов данных

               movwf COUNT

               clrf ERR; Обнуляем байт признака ошибки

GETC HAR_START

               btfsc PORTA,RX; Ожидаем появления 0

                 goto GETCHAR_START

               Baud_delay; Ждем в течение 0.5 бита

               btfsc PORTA,RX; Все еще 0?

                 goto GETCHAR_START

               Baud_delay; ЕСЛИ да, TO ждем в течение 1 бита

               Baud_delay

GETCHAR_LOOP bcf STATUS,С;Сбрасываем флаг переноса

                rrf DATA_IN,f; Вдвиг аем 0 в байт данных

                btfsc PORTA,RX; На входе ВЫСОКИЙ уровень?

                bsf DATA_IN,7; ЕСЛИ да, ТО устанавливаем бит

                Baud_delay

                Baud_delay

                decfsz COUNT,f; Повторяем восемь раз

                   goto GETCHAR_LOOP

                btfss PORTA,RX; Проверяем приход стоп-бита (1)

                  decf ERR,f; ЕСЛИ 0, ТО сообщаем об ошибке

                return

Подпрограмма приема GETCHAR более сложна. Появление на выводе RX НИЗКОГО уровня расценивается как приход старт-бита. Однако если осуществлять выборку значений последующего потока данных с периодичностью, равной длительности битового интервала (два включения макроса Baud_delay), то, поскольку этот момент может соответствовать моменту окончания битового интервала, уход любой из двух частот может привести к появлению ошибок. Чтобы избежать этого, состояние вывода RX считывается повторно после задержки, равной половине битового интервала, чтобы еще раз убедиться в наличии старт-бита. Если это окажется так, то последующие выборки осуществляются с периодом, равным двум битовым интервалам. При этом моменты выборок будут приходиться примерно на середину интервала. Лучших результатов можно достичь, считывая состояние вывода с большей частотой (передискретизация) и принимая мажоритарное решение на основании считанных значений.

Перейти на страницу:

Все книги серии Программируемые системы

PIC-микроконтроллеры. Все, что вам необходимо знать
PIC-микроконтроллеры. Все, что вам необходимо знать

Данная книга представляет собой исчерпывающее руководство по микроконтроллерам семейства PIC компании Microchip, являющегося промышленным стандартом в области встраиваемых цифровых устройств. В книге подробно описывается архитектура и система команд 8-битных микроконтроллеров PIC, на конкретных примерах изучается работа их периферийных модулей.В первой части излагаются основы цифровой схемотехники, математической логики и архитектуры вычислительных систем. Вторая часть посвящена различным аспектам программирования PIC-микроконтроллеров среднего уровня: описывается набор команд, рассматривается написание программ на ассемблере и языке высокого уровня (Си), а также поддержка подпрограмм и прерываний. В третьей части изучаются аппаратные аспекты взаимодействия микроконтроллера с окружающим миром и обработки прерываний. Рассматриваются такие вопросы, как параллельный и последовательный ввод/вывод данных, временные соотношения, обработка аналоговых сигналов и использование EEPROM. В заключение приводится пример разработки реального устройства. На этом примере также демонстрируются простейшие методики отладки и тестирования, применяемые при разработке реальных устройств.Книга рассчитана на самый широкий круг читателей — от любителей до инженеров, при этом для понимания содержащегося в ней материала вовсе не требуется каких-то специальных знаний в области программирования, электроники или цифровой схемотехники. Эта книга будет также полезна студентам, обучающимся по специальностям «Радиоэлектроника» и «Вычислительная техника», которые смогут использовать ее в качестве учебного пособия при прослушивании соответствующих курсов или выполнении курсовых проектов.

Сид Катцен

Радиоэлектроника

Похожие книги

Электроника для начинающих
Электроника для начинающих

В ходе практических экспериментов рассмотрены основы электроники и показано, как проектировать, отлаживать и изготавливать электронные устройства в домашних условиях. Материал излагается последовательно от простого к сложному, начиная с простых опытов с электрическим током и заканчивая созданием сложных устройств с использованием транзисторов и микроконтроллеров. Описаны основные законы электроники, а также принципы функционирования различных электронных компонентов. Показано, как изготовить охранную сигнализацию для защиты от проникновения в дом, елочные огни, электронные украшения для одежды, устройство преобразования звука, кодовый замок, автономную роботизированную тележку и др. Приведены пошаговые инструкции и более 500 наглядных рисунков и фотографий.Для начинающих радиолюбителей

Паоло Аливерти , Чарльз Платт

Радиоэлектроника / Технические науки