Файл: Учимся программировать микроконтроллеры Pic на языке PicBasicPro (В.В. Хилинский, 2007).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 17.06.2025

Просмотров: 1778

Скачиваний: 8

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

BIN{1..16}

Прием двоичных значений

DEC{1..5}

Прием десятичных значений

HEX{1..4}

Прием шестнадцатеричных

значений

SKIP n

Пропустить прием n символов

Принять строку в n символов,

STR ArrayVar\n{\c}

произвольно законченных на

символе c

WAIT ( )

Ждать последовательность

символов

WAITSTR ArrayVar{\n}

Ждать строку символов

В микроконтроллерах с двумя последовательными портами (типа 17Cxxx), команда HSERIN получает доступ только к первому порту. Второй порт должен быть установлен и прочитан, получая доступ к регистраторам непосредственно.

Определения - HSER_RCSTA, HSER_TXSTA и HSER_SPBRG устанавливают в

PIC-микроконтроллере соответствующий регистр RCSTA, TXSTA и SPBRG в необходимое состояние. Для получения дополнительной информации о каждом из этих регистров, смотрите справочные данные фирмы Microchip для выбранного Вами устройства.

Бит BRGH (бит 2) регистра TXSTA управляет высокоскоростным режимом генератора управляющего скоростью передачи информации. Определенные скорости в бодах при определенных частотах генератора требуют, чтобы этот бит был установлен должным образом. Чтобы сделать это, установите HSER_TXSTA в 24-ый вместо 20-ого. Смотрите справочные листы от фирмы Microchip в таблице скорость в бодах последовательного порта микроконтроллера.

Поскольку последовательный порт микроконтроллера имеет только 2-байтовый входной буфер, он может легко переполниться, если символы не считываются из него достаточно быстро. Когда это произойдет, USART прекращает принимать новые символы и должен быть сброшен. Эта ошибка переполнения может быть сброшена, переключением бита CREN в регистре RCSTA. Для того чтобы автоматически очищать эту ошибку может использоваться следующий DEFINE:

DEFINE HSER_CLROERR

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

RCSTA.4 = 0

111


RCSTA.4 = 1

Пример:

B0 var byte

W1 var word

Main:

HSERIN [B0, dec W1] ‘ Принять десятичные значения по последовательному каналу

Goto Main

Необходимо обратить Ваше внимание на то, что команда HSERIN выполняет ту же задачу что и команда SERIN. Разница их только в том, что первая команда работает только с микроконтроллерами оснащенными модулем USART, а вторая с любым микроконтроллером.

Команда HSEROUT.

Синтаксис:

HSEROUT [Item {,Item...}]

Эта команда предназначена для передачи информации по последовательному асинхронному каналу связи.

Её можно использовать только с микроконтроллерами, которые имеют в своем составе модуль USART. Для уточнения этой информации смотрите справочные листы на эти микроконтроллеры. Там же Вы сможете найти информацию о номерах контактов используемых для такой связи. Основные параметры, в том числе и скорость канала в бодах, должны быть определены командами DEFINE.

'Установить регистр приемника разрешение на прием

DEFINE HSER_RCSTA 90h

'Установить регистр передатчика разрешение на передачу

DEFINE HSER_TXSTA 20h

'Установить скорость обмена информацией в бодах

DEFINE HSER_BAUD 2400

'Установить непосредственно регистр SPBRG (обычно установлено

HSER_BAUD)

DEFINE HSER_SPBRG 25

Для вычисления скорости передачи/приема информации в бодах, команда HSEROUT по умолчанию предполагает генератор на 4 МГц. Для того чтобы правильно рассчитать выбор времени скорости в бодах с другими значениями

112

генератора, убедитесь, что соответствующий DEFINE определил нужное значение частоты. По умолчанию формат передаваемых данных - 8N1, т.е. 8 информационных разрядов, нет разряда четности и 1 стоповый бит. Но можно использовать и другие форматы, например 7E1 (7 информационных разрядов, проверка на четность, 1 стоповый бит) или 7O1 (7 информационных разрядов, проверка на нечетность, 1 стоповый бит). Для этого надо использовать один из следующих DEFINE:

'Использовать проверку на четность

DEFINE HSER_EVEN 1

'Использовать проверку на нечетность

DEFINE HSER_ODD 1

Установка проверки на четность, наряду со всеми другими DEFINE также будет касаться и команды HSERIN. Команда HSEROUT поддерживает те же самые модификаторы данных, которые используются и с командой SEROUT2 (см. таблицу 11).

В микроконтроллерах типа 17Cxxx с 2 последовательными портами, команда HSEROUT получает доступ только к первому порту. Второй порт должен быть установлен и прочитан, используя непосредственный доступ к регистрам.

'Послать десятичное значение B0, код операции перевод строки с помощью встроенного модуля USART

HSEROUT [dec B0,10]

Команда HSERIN2.

Синтаксис:

HSERIN2 {ParityLabel,}{Timeout,Label,}[Item{,...}]

Эта команда предназначена для микроконтроллеров имеющих в своем составе два модуля USART. По этой команде микроконтроллер получает значения по второму последовательному порту микроконтроллера. Для уточнения этой информации смотрите справочные листы на микроконтроллеры относительно последовательного асинхронного порта и контактов используемых для этой цели. HSERIN2 - одна из нескольких встроенных функций предназначенных для работы с асинхронными последовательными портами. Основные параметры последовательной передачи данных и скорость в бодах определяются использованием соответствующих DEFINE:

' Установить регистр приемника на получение информации

DEFINE HSER2_RCSTA 90h

113


'Установить регистр передатчика на выдачу информации

DEFINE HSER2_TXSTA 20h

'Установить скорость в бодах при приеме и передачи информации

DEFINE HSER2_BAUD 2400

'Установить SPBRG непосредственно (обычно устанавливается HSER_BAUD)

DEFINE HSER2_SPBRG 25

Для расчета скорости в бодах команда HSERIN2 по умолчанию предполагает генератор на 4 МГц. Для того чтобы правильно пересчитать скорость в бодах для других значений генератора, введите соответствующую команду-определение DEFINE, устанавливающую новое значение генератора. Дополнительное время ожидания -Timeout и метка Label могут быть включены в команду, для того чтобы программа могла продолжиться, даже если информация не будет получена в этом временном интервале. Время ожидания определяется в единицах миллисекунд. По умолчанию последовательные данные передаются в формате 8N1, 8 информационных разрядов, нет разряда проверки на четность и 1 стоповый бит. Другие форматы, такие как 7E1 (7 информационных разрядов, проверка на четность, 1 стоповый бит) или 7O1 (7 информационных разрядов, проверка на нечетность, 1 стоповый бит) можно установить, используя один из следующих

DEFINE:

'Установить проверку на четность

DEFINE HSER2_EVEN 1

'Установить проверку на нечетность

DEFINE HSER2_ODD 1

Все эти установки служат для управления командами как HSERIN2 так и HSEROUT2. Еще один дополнительный параметр - - ParityLabel может быть также включен в команду. Он предназначен для того, чтобы указать программе с какого места она должна будет продолжиться, если будет получен байт с ошибкой четности либо нечетности в зависимости от того, что проверяется. Команда HSERIN2 поддерживает те же самые модификаторы данных, что и SERIN2 (см. таблицу 13).

Команда HSEROUT2.

Синтаксис:

HSEROUT2 [Item {,Item...}]

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

114


микроконтроллерами, которые имеют в своем составе второй модуль USART. Для получения полной информации смотрите справочные листы данных на используемый микроконтроллер. Параметры последовательного порта и скорость в бодах определяются, соответствующими DEFINE:

'Установить регистр 2 приемника на получение информации

DEFINE HSER2_RCSTA 90h

'Установить регистр 2 передатчика на выдачу информации

DEFINE HSER2_TXSTA 20h

'Установить скорость приема-передачи в бодах для 2 приемника и передатчика

DEFINE HSER2_BAUD 2400

'Установить SPBRG непосредственно (обычно устанавливается HSER_BAUD)

DEFINE HSER2_SPBRG 25

Вкоманде HSEROUT2, для расчета скорости передачи в бодах, по умолчанию предполагается генератор на 4 МГц. Для того чтобы команда правильно пересчитывала скорость для других значений генератора, введите соответствующий DEFINE, устанавливающий новое значение генератора. По умолчанию последовательные данные передаются в формате 8N1, 8 информационных разрядов, нет разряда проверки на четность и 1 стоповый бит. Другие форматы, такие как 7E1 (7 информационных разрядов, проверка на четность, 1 стоповый бит) или 7O1 (7 информационных разрядов, проверка на нечетность, 1 стоповый бит) можно установить, используя один из следующих

DEFINE:

'Установить проверку на четность для 2 канала приема-передачи

DEFINE HSER2_EVEN 1

' Установить проверку на нечетность для 2 канала приема-передачи

DEFINE HSER2_ODD 1

Установка проверки на четность, наряду с другими (DEFINE HSER2_) служат для управления командами как HSERIN2 так и HSEROUT2. Команда HSEROUT2 поддерживает те же самые модификаторы данных, что и команда SEROUT2 (см. таблицу 11).

'Послать десятичное значение B0, код перевода строки с помощью второго

‘ встроенного USART передатчика

HSEROUT2 [dec B0,10]

115

Команда I2CREAD.

Синтаксис:

I2CREAD

DataPin,ClockPin,Control,{Address,}[Var{,Var...}]{,Label}

По этой команде происходит чтение информации от внешних устройств, работающих по протоколу I2C. Через контакты - ClockPin (синхронизация) и - DataPin (данные) посылается байт управления - Control и байты адреса – Addres. Данные, полученные в ответ на это, сохраняются последовательно в переменных – Var. Параметры ClockPin и DataPin могут быть константами, значения которых лежат в пределах от 0 и до 15, или переменными, значения которых могут меняться от 0 и до 15 (например, B0) или названием вывода

(например, PORTA.0).

Команды I2CREAD и I2CWRITE могут использоваться, для чтения и записи данных во внешнюю энергонезависимую память EEPROM по 2-х проводному интерфейсу I2C. Это микросхемы типа 24LC01B и ей подобные. Использование этих микросхем позволяет данным быть сохраненными во внешней энергонезависимой памяти и по необходимости быть востребованными так, что даже при выключении питания они будут сохранены. Эти команды работают в режиме master шины I2C и могут использоваться для обмена данными с другими устройствами по интерфейсу I2C. Это, например, температурные датчики и внешние АЦП.

Только для 12-разрядных PIC-микроконтроллеров при работе по протоколу I2C, вначале основного текста программы необходимо указать выводы данных и синхронизации с помощью соответствующих DEFINE. И хотя указания на эти выводы должны присутствовать в команде I2CREAD, но компилятор эту информацию игнорирует.

DEFINE I2C_SCL PORTA,1 ' Только для 12-разрядных микроконтроллеров DEFINE I2C_SDA PORTA,0 ' Только для 12-разрядных микроконтроллеров

Старшие 7 разрядов служебного байта содержат управляющий код выбора чипа или дополнительной информацией об адресе, в зависимости от выбранного устройства. Младший разряд - внутренний флаг, указывающий на текущий режим – чтение или запись. Этот формат служебного байта отличен от формата первоначального компилятора PicBasic. Убедитесь, что использовали этот формат при работе с шиной I2C. Например, общаясь с 24LC01B, управляющий код - %1010, разряды выбора микросхемы в этом случае не используются, таким образом, служебный байт будет %10100000 или $A0. Форматы служебных байтов для некоторых других микросхем приведены в таблице:

Таблица 14.

МикросхемаЕмкостьУправлениеРазмер адрса

24LC01B

128 байт

%1010xxx0

1 байт

116


24LC02B

256 байт

%1010xxx0

1 байт

24LC04B

512 байт

%1010xxb0

1 байт

24LC08B

1K байт

%1010xbb0

1 байт

24LC16B

2K байт

%1010bbb0

1 байт

24LC32B

4K байт

%1010ddd0

2 байта

24LC65

8K байт

%1010ddd0

2 байта

bbb = выбор разрядов заблокирован(адрес старшего разряда) ddd = разряды выбора устройства

xxx = не заботится

Посылаемый размер адреса (байт или слово) определен размером используемой переменной. Если для адреса используется переменная размером в байт, то посылается 8-разряный адрес. Если используется переменная размером в слово, то посылается 16-разрядный адрес. Убедитесь, что Вы используете переменную надлежащего размера для выбранного устройства. В качестве адреса не должны использоваться константы, поскольку размер может измениться в зависимости от размера константы. Если переменная определена размером в слово, то будут прочитаны 2 байта и будет сохранен вначале старший байт переменной, а затем младший байт. Этот порядок отличен от того, каким обычно сохраняются переменные, т.е. вначале сохраняется младший байт, а затем старший.

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

(\) и количеством посылаемых знаков:

a VAR byte[8]

I2CREAD PORTC.4,PORTC.3,$a0,0,[STR a\8]

Если определено множество переменных размером в слово, то при чтении элементов этого множества, - вначале читается младший байт. Если будет включена дополнительная метка -Label, то программа перейдет на эту метку, как только будет получено подтверждение от устройства I2C.

Для 12CE67x устройств, вывод данных - GPIO.6, а вывод синхроимпульсов - GPIO.7. Для 16CE62x устройств, вывод данных - EEINTF.1, а синхроимпульсов - EEINTF.2. Для уточнения этой информации смотрите справочные листы данных фирмы Microchip на эти устройства.

В командах I2C стандартные установки скорости (100 кГц) будут доступны при тактовых частотах до 8 МГц. Для быстрого режима (400 кГц) должны использоваться генераторы до 20 МГц. Если Вы хотите использовать стандартные

117