Файл: Учимся программировать микроконтроллеры 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