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

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

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

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

Добавлен: 17.06.2025

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

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

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

Команда READ.

Синтаксис:

READ Address,Var

Эта команда считывает значения из памяти EEPROM микроконтроллера по указанному адресу - Address и сохраняет результат в переменной - Var. Эта команда может использоваться только с PIC-микроконтроллерами, которые имеют в своем составе область данных EEPROM, типа PIC16F84, PIC16C84 и ряда PIC16F87x. И эта команда не будет работать при попытке считать данные из внешней EEPROM, подключенной к микроконтроллеру через последовательный порт I2C как 12CE67x и 16CE62x. Для этого используйте команду I2CREAD.

Пример:

READ 5,B2 ' Считать значение из EEPROM по адресу 5 и результат поместить в B2

Команда READCODE.

Синтаксис:

READCODE Address,Var

Эта команда считывает значения из памяти программ микроконтроллера по указанному адресу - Address и результат сохраняет в переменной - Var.

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

Пример:

READCODE 100,W ' Считать значения кода программы по адресу 100 и результат сохранить в W

Команда REPEAT...UNTIL.

Синтаксис:

REPEAT

Statements...

UNTIL Condition

Оператор REPEAT...UNTIL позволяет группе команд выполняться до тех пор, пока указанное условие неверно. Само условие помещается после слова UNTIL. Например,

141

i = 0

REPEAT

PORTB.0[i] = 0 i = i + 1

UNTIL i > 7

Команда RESUME.

Синтаксис:

RESUME {Label}

Вернутся в то место в программе, откуда она была выведена для обработки прерывания. Команда RESUME подобна команде RETURN, но записывается она в конце подпрограммы обработки прерывания PicBasicPro. Если в операторе будет использоваться дополнительный указатель - Label, то выполнение программы продолжится с этой метки вместо того, чтобы возвращаться в то место, где было совершено прерывание. В этом случае, любые другие адреса возврата в стеке больше не будут доступны.

Команда RETURN.

Команда осуществляет возврат из подпрограммы. По этой команде возобновляется выполнение утверждений, стоящих после команды GOSUB, которая вызвала переход на подпрограмму.

Пример:

GOSUB sub1 ' Перейти на подпрограмму по метке sub1

...

sub1:

SEROUT 0,N2400,["Lunch"] ' Пошлите слово “Lunch” через последовательный

порт Pin0

RETURN

' Возвратитесь к основной программе после Gosub

Команда REVERSE.

Синтаксис:

REVERSE Pin

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

142


до 15, или переменной, значения которой могут меняться от 0 и до 15 (например, B0), или названием вывода (например, PORTA.0).

Пример:

OUTPUT 4 ' Сделаем Pin4 выходом REVERSE 4 ' Изменим функцию Pin4 на вход

Команда SERIN.

Синтаксис:

SERIN Pin,Mode,{Timeout,Label,}{[Qual...],}{Item...}

По этой команде осуществляется прием одного или нескольких значений данных на выводе Pin в стандартном асинхронном формате или как говорят по протоколу I2C; при этом (по умолчанию) используется формат: 8 информационных разрядов без проверки на четность и один стоповый бит (8N1). Команда SERIN подобна команде SERIN от BS1 (BasicStamp 1) c добавлением параметра времени ожидания - Timeout. Вывод - Pin автоматически становится входом. Вывод может быть константой, значения которой лежат в пределах от 0 и до 15, или переменной, значения которой могут меняться от 0 и до 15 (например, B0), или названием вывода (например, PORTA.0). Названия режимов (например, T2400) определяются в файле MODEDEFS.BAS. Чтобы использовать его, надо в начале программы PicBasicPro добавить строку:

INCLUDE "modedefs.bas"

Номера режима могут использоваться без включения этого файла. Для этого воспользуйтесь таблицей:

Таблица 19

Режим No. режимаСкорость в бодахСостояние

T2400

0

2400

T1200

1

1200

Прямое

T9600

2

9600

T300

3

300

N2400

4

2400

N1200

5

1200

Инверсное

N9600

6

9600

N300

7

300

В команду могут быть включены дополнительные параметры, такие как Timeout и Label. Параметр Timeout или время ожидания разрешает

143


программе продолжаться с метки Label, если значение не было получено в интервале времени – Timeout. Время ожидания измеряется в миллисекундах. Списку значений, которые будут получены, может предшествовать один или несколько спецификаторов, заключенных в скобки. По команде SERIN эти байты должны быть получены в указанном порядке перед получением элементов данных. Если какой-нибудь полученный байт не соответствует следующему байту в последовательности спецификатора, процесс квалификации начинается сначала. Спецификатором может быть константа, числовая или строковая, или переменная. Каждый знак строковой переменной обрабатывается как индивидуальный спецификатор. Как только спецификатор получен, команда SERIN начинает сохранять данные в переменные, связанные с каждым элементом. Если перед переменной есть символ #, команда SERIN преобразовывает десятичное значение в ASCII код и сохраняет результат в этой переменной.

Команда SERIN по умолчанию рассчитана на работу с генератором в 4 МГц. Чтобы достичь другой скорости передачи в бодах с другими генераторами, необходимо использовать соответствующую директиву DEFINE.

Любые нецифровые значения полученные до первой цифры десятичного значения игнорируются и не запоминаются. Нецифровой символ, который следует за десятичным значением, также будет отвергнут.

Рис. 38. Схема подключения микроконтроллера к COM порту для команды

SERIN без использования буферных элементов.

Несмотря на то, что сейчас многие преобразователи уровня интерфейса RS-232 недефицитны и недороги, превосходные параметры портов ввода - вывода PICмикроконтроллеров позволяют большинству приложений работать непосредственно без буферных элементов.

Пример:

' Ждем до знака, полученного по последовательной шине, на Pin1 и поместим следующий знак в B0

SERIN 1,N2400,["A"],B0

144

Команда SELECT...CASE.

Синтаксис:

SELECT CASE var

CASE expr1 {, expr...} statements

CASE expr2 {, expr...} statements

{CASE ELSE statements}

END SELECT

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

Переменная, используемая во всех сравнениях, определяется в утверждении - SELECT CASE. Каждое CASE сопровождается утверждениями, которые выполняются, если CASE верно. Вспомогательное IS может использоваться во всех случаях сравнения, кроме равенства. Если ни один из CASE не верен, то выполняется дополнительное утверждение CASE ELSE. Выражение SELECT END закрывает выполнение команды SELECT CASE.

Пример:

SELECT CASE x CASE 1

y = 10

CASE 2, 3 y = 20

CASE IS > 5 y = 100

CASE ELSE y = 0

END SELECT

Команда SERIN2.

Синтаксис:

SERIN2 DataPin{\FlowPin},Mode,{ParityLabel,} {Timeout,Label,}[Item...]

По этой команде принимается один или несколько элементов данных в стандартном асинхронном формате.

145


Команда SERIN2 подобна команде Serin в BS2 (BasicStamp 2). Вывод - DataPin автоматически устанавливается в состояние входа, а дополнительный вывод - FlowPin автоматически становится выходом.

Выводы DataPin и FlowPin могут быть константой, значения которой лежат в пределах от 0 и до 15, или переменной, значения которой могут меняться от 0 и до 15 (например, B0), или названием вывода (например, PORTA.0).

Дополнительный вывод управления потоком данных - FlowPin, может быть включен для того, чтобы препятствовать переполнению приемника данными. Если он используется, то вывод FlowPin автоматически устанавливается в состояние, разрешающее передачу символов. Это состояние определено полярностью данных, указанных в параметре Mode (Режим). Параметр Mode используется для того, чтобы определить скорость в бодах и операционные параметры последовательной передачи данных. Младшие 13 разрядов осуществляют выбор скорости в бодах. Разряд 13 определяет, есть проверка на четность или ее нет. Бит 14 определяет формат данных, то есть, если 14 бит равен 0, то данные передаются в прямом форме, а если 14 разряд равен 1 – в инверсном; 15 разряд не используется.

Этот режим может использоваться, для того чтобы не устанавливать специальные драйверы RS-232.

Разрядное значение скорости в бодах определяет время передачи 1 бита в микросекундах + 20. Чтобы найти значение для данной скорости в бодах, используйте уравнение:

(1000000 / baud) – 20

Например:

при скорости 600 бод получаем 1000000/600 = 1666,6 - 20 = 1646

Некоторые из стандартных скоростей в бодах перечислены в следующей таблице.

Таблица 20

Скорость

Разряды

в бодах

0 - 12

300

3313

600

1646

1200

813

2400

396

4800

188

9600

84

19200

32

Приведем примеры некоторых режимов: Режим = 84 (9600 бод, нет проверки на четность, формат данных - прямой), Режим = 16780 (2400 бод, нет проверки на четность, формат данных - инверсный), Режим = 27889 (300 бод, проверка на

146


четность, инверсный). Если параметр ParityLabel будет включен в команду, то программа перейдет на эту метку, как только будет получено нарушение четности. Естественно, что этот параметр можно использовать только тогда, когда выбрана проверка на четность (разряд 13 равен 1). Дополнительное время ожидания -Timeout и метка -Label могут быть включены в команду для того, чтобы программа продолжилась с этой метки, если в течении указанного промежутка времени не будет получен ни один знак. Время ожидания измеряется в миллисекундах. Команды переопределения DEFINE позволяют организовать обмен данными с различным количеством информационных разрядов. Количество информационных разрядов может варьироваться от 4 до 8 (по умолчанию -8, если не было использовано соответствующего DEFINE). Если заблокирована проверка на четность (по умолчанию), то можно использовать следующие DEFINE:

DEFINE SER2_BITS 4 ' режим из 4 информационных разрядов DEFINE SER2_BITS 5 ' режим из 5 информационных разрядов DEFINE SER2_BITS 6 ' режим из 6 информационных разрядов DEFINE SER2_BITS 7 ' режим из 7 информационных разрядов

DEFINE SER2_BITS 8 ' режим из 4 информационных разрядов (по умолчанию)

Если же проверка на четность разрешена то:

DEFINE SER2_BITS 5 ' режим из 4 информационных разрядов DEFINE SER2_BITS 6 ' режим из 5 информационных разрядов DEFINE SER2_BITS 7 ' режим из 6 информационных разрядов

DEFINE SER2_BITS 8 ' режим из 7 информационных разрядов (по умолчанию) DEFINE SER2_BITS 9 ' режим из 8 информационных разрядов

Команда SERIN2 поддерживает различные модификаторы данных и в различных сочетаниях, в пределах одной команды SERIN2 для того, чтобы обеспечить разнообразные способы ввода информации.

Таблица 21

Модификатор

Операция

BIN{1..16}

Принимать двоичные значения

DEC{1..5}

Принимать десятичные

значения

HEX{1..4}

Принимать

шестнадцатеричные значения

SKIP n

Пропустить получение n

знаков

STR ArrayVar\n{\c}

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

заканчивающуюся символом c

147