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