Файл: Учимся программировать микроконтроллеры Pic на языке PicBasicPro (В.В. Хилинский, 2007).pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 17.06.2025
Просмотров: 1769
Скачиваний: 8
WAIT ( ) |
Ждите последовательность |
|
символов |
||
WAITSTR ArrayVar{\n} |
Ждите символьной строки |
|
1)Значения, которым предшествует модификатор BIN, будут сохранены в переменную как ASCII код двоичного значения. Например, если записано BIN, B0 и будет получено значение A1000, то в переменную B0 будет записано - 8.
2)Значения, которым предшествует модификатор DEC, будут сохранены в переменную как ASCII код десятичного значения. Например, если записано DEC, B0 и будет получено значение A123, то в переменную В0 будет записано - 123.
3)Значения, которым предшествует модификатор HEX, будут сохранены в переменную как ASCII код шестнадцатеричного значения. Например, если записано HEX, B0 и будет получено значение как AFE, то в переменную B0 будет записано - 254.
4)Если использован модификатор SKIP, то во время приема знаков будут пропущены указанное количество. Например, SKIP 4 пропустит 4 бита.
5)Если будет использован модификатор STR, который сопровождает массив переменных типа байтовых, то будет получено некоторое количество строковых переменных, заканчивающихся определенным символом. Количество принимаемых знаков определяется значением – n и знаком, стоящим в конце последовательности – с.
6)Получаемым значениям может предшествовать список элементов данных, которые будут получены. Этот список должен быть заключен между круглыми скобками после модификатора - WAIT. С этим модификатором по команде SERIN2 должны быть получены значения в точном порядке, как указано в скобках. Если какой-нибудь полученный байт не соответствует следующему байту в последовательности спецификатора, процесс квалификации начнется сначала (то есть следующий полученный байт - по сравнению с первым элементом в списке спецификатора). Спецификатор может быть константой, переменной или строковой константой. Каждый знак строковой переменной обрабатывается как индивидуальный спецификатор.
7)Модификатор WAITSTR может использоваться, как и приведенный выше модификатор WAIT, для того, чтобы вынудить команду SERIN2 дождаться определенного количества знаков строковых переменных перед продолжением.
Как только любой из модификаторов WAIT или WAITSTR будут выполнены, команда SERIN2 начинает сохранять данные в переменные, связанные с каждым элементом. Если используется одно имя переменной, то ASCII значение полученного байта сохраняется в этой переменной. Если переменной предшествует BIN, DEC или HEX, то команда SERIN2 преобразовывает двоичное, десятичное или шестнадцатеричное значение в ASCII код и сохраняет результат в этой переменной. Все нецифровые значения, полученные до первой цифры десятичного значения игнорируются и теряются. Нецифровое значение, которым заканчиваются посылаемые значения, также игнорируется.
148
Модификаторы BIN, DEC и HEX могут сопровождаться номером. Обычно, эти модификаторы получают столько цифр, сколько их попадает на вход. Однако если номер будет следовать за модификатором, то команда SERIN2 будет всегда получать это количество цифр, пропуская дополнительные цифры по мере необходимости. Команда SERIN2 предполагает по умолчанию генератор в 4 МГц. Чтобы поддерживать надлежащий выбор скорости в бодах с другими значениями генератора, убедитесь в том, что соответствующий DEFINE присутствует и устанавливает новое значение частоты генератора. В то время, как однокристальные преобразователи уровня RS-232 не дефицитны и недороги, но благодаря превосходным характеристикам портов ввода - вывода PICмикроконтроллера, большинство приложений не требует преобразователей уровня.
Команда SERIN2 не поддерживается 12-разрядными PIC-микроконтроллерами из-за недостатка оперативной памяти и ограничения стека.
Примеры:
‘Ждите до получения знака “A” на выводе Pin1 и поместите следующий знак в переменную B0
SERIN2 1,16780,[WAIT(“A”),B0]
‘Пропустите 2 символа и сохраните затем 4 десятичных цифры
SERIN2 PORTA.1,84,[SKIP 2,DEC4 B0]
Команда SEROUT.
Синтаксис:
SEROUT Pin,Mode,[Item {,Item...}]
По этой команде посылается один или более элементов, в стандартном асинхронном формате, используя 8 информационных разрядов, без проверки на четность и один стоповый бит (8N1). Команда SEROUT подобна команде Serout в BS1. Вывод Pin автоматически устанавливается как выход. Контакт может быть константой, значения которой лежат в пределах от 0 и до 15, или переменной, значения которой могут меняться от 0 и до 15 (например, B0), или названием вывода (например, PORTA.0). Названия режимов (например, T2400), определяются в файле MODEDEFS.BAS. Чтобы использовать их, добавьте следующую строку в начале программы:
INCLUDE "modedefs.bas"
Файлы BS1DEFS.BAS и BS2DEFS.BAS уже включают в себя MODEDEFS.BAS.
Не включайте их снова, если один из этих файлов уже подключен. Номера режимов могут использоваться и без включения этого файла.
Таблица 22.
Режим Номер режимаСкорость в бодах Состояние
149
T2400 |
0 |
2400 |
||||
T1200 |
1 |
1200 |
Прямое |
|||
T9600 |
2 |
9600 |
||||
T300 |
3 |
300 |
||||
N2400 |
4 |
2400 |
||||
N1200 |
5 |
1200 |
Инверсное |
|||
N9600 |
6 |
9600 |
||||
N300 |
7 |
300 |
||||
OT2400 |
8 |
2400 |
||||
OT1200 |
9 |
1200 |
Открытое |
|||
прямое* |
||||||
OT9600 |
10 |
9600 |
||||
OT300 |
11 |
300 |
||||
ON2400 |
12 |
2400 |
||||
ON1200 |
13 |
1200 |
Открытое |
|||
инверсное* |
||||||
ON9600 |
14 |
9600 |
||||
ON300 |
15 |
300 |
||||
* Открытые режимы не поддерживаются 12 разрядными микроконтроллерами
Команда SEROUT поддерживает три различных типа данных в любом сочетании в пределах одной команды SEROUT.
1)Строковые константы, которые выводятся как строка символов.
2)Числовые значения (переменная или константа), которые посылают соответствующий ASCII код. Чаще всего это 13 - перевод каретки, и 10 - перевод строки.
3)Числовое значение, которому предшествует знак (#), посылает ASCII код его десятичного значения. Например, если W0 = 123, то # W0 (или # 123) пошлет '1', '2', '3'.
Команда SEROUT по умолчанию рассчитана на работу с генератором 4 МГц. Чтобы достичь другой скорости передачи в бодах с другими генераторами, необходимо использовать соответствующую директиву DEFINE, устанавливающую другое значение частоты генератора. В некоторых случаях передача команд или знаков происходит слишком быстро для приемного устройства. Соответствующая директива DEFINE добавляет несколько тактов в последовательную передачу данных. Это увеличивает промежуток времени между передаваемыми знаками. Этот DEFINE позволяет осуществлять задержку от 1 - 65 535 микросекунд (0.001 к 65.535 миллисекунд) между каждым
150
переданным знаком. Например, чтобы вставить задержку в 1 миллисекунду между передачей каждого знака, надо в начале программы записать строку:
DEFINE CHAR_PACING 1000
Рис. 39. Схема подключения микроконтроллера к COM порту для команды
SEROUT без использования буферных элементов.
Несмотря на то, что сейчас многие преобразователи уровня интерфейса RS-232 не дефицитны и недороги, но за счет превосходных показателей параметров портов ввода - вывода PIC микроконтроллеров позволяют большинству приложений работать непосредственно без конвертеров уровня.
Пример:
' Посылаем ASCII значение переменной B0 через вывод Pin0 и заканчим знаком перевода строки
SEROUT 0,N2400,[#B0,10]
Команда SEROUT2.
Синтаксис:
SEROUT2 DataPin{\FlowPin},Mode,{Pace,} {Timeout,Label,}[Item...]
По этой команде посылается один или несколько элементов данных в стандартном асинхронном формате. Команда SEROUT2 подобна команде Serout в BS2. Вывод DataPin автоматически становится выходом, а дополнительный вывод FlowPin автоматически делается входом. Контакты DataPin и FlowPin могут быть константой, значения которой лежат в пределах от 0 и до 15, или переменной, значения которой могут меняться от 0 и до 15 (например, B0), или названием вывода (например, PORTA.0). Дополнительное управление потоком данных может осуществляться с помощью вывода FlowPin. С помощью сигналов на этом выводе можно препятствовать данным переполнять приемник. Если вы его будете использовать, то последовательные данные не будут посылаться, пока вывод FlowPin не будет находиться в нужном состоянии. Это
151
состояние определяется полярностью данных, которые зависят от выбранного режима. Дополнительное время ожидания -Timeout и метка -Label могут быть включены в команду для того чтобы разрешить программе продолжиться с этой метки, если состояние вывода FlowPin не изменяется на разрешенное состояние в пределах этого определенного времени. Время ожидания измеряется в миллисекундах.
В некоторых случаях, передача команд или знаков происходит слишком быстро для приемного устройства. Соответствующая директива DEFINE добавляет несколько тактов в последовательную передачу данных. Это добавляет дополнительное время между знаками, когда они передаются. Этот DEFINE позволяет осуществлять задержку от 1 - 65 535 микросекунд (0.001 к 65.535 миллисекунд) между каждым переданным знаком. Параметр -Mode используется для того, чтобы определить скорость в бодах и операционные параметры последовательной передачи данных. Младшие 13 разрядов осуществляют выбор скорости в бодах. Разряд 13 определяет, есть проверка на четность или нет никакой проверки. Бит 14 определяет формат данных то есть если 14 бит равен 0 то данные передаются в прямом формате, а если 14 разряд равен 1 – в инверсном. Разряд 15 определяет, есть ли подключение в настоящий момент или нет.
Разряды значения скорости в бодах определяют время передачи 1 бита в микросекундах - 20. Чтобы найти значение для данной скорости в бодах, используйте уравнение:
(1000000 / baud) – 20
Например:
при скорости 600 бод получаем 1000000/600 = 1666,6 - 20 = 1646
Немного стандартных скоростей в бодах перечисляются{вносятся в список} в следующей таблице.
Таблица 23
Скорость в бодахРазряды 0 - 12
300 3313
600 1646
1200 813
2400 396
4800 188
9600 84
19200 32
Разряд 13 говорит о том, осуществляется ли проверка на четность (разряд 13 = 1) или нет проверки на четность (разряд 13 = 0). Обычно, формат
152
последовательной передачи данных это - 8N1 (8 информационных разрядов, нет проверки на четность и 1 стоповый бит). Если проверка на четность присутствует, то этот формат можно записать как 7E1 (7 информационных разрядов, проверка на четность и 1 стоповый бит). Разряд 14 говорит о уровне управления потоком данных. Если разряд 14 = 0, то данные посылаются в прямой форме для использования с микросхемами драйверов RS-232. Если разряд 14 = 1, то данные посылаются инвертированными. Этот режим может использоваться, в тех случаях, когда не требуется установка специальных микросхем-драйверов RS-232.
Приведем примеры некоторых режимов: Режим = 84 (9600 бод, нет проверки на четность, формат данных – прямой, всегда управляемый). Режим = 16780 (2400 бод, нет проверки на четность, формат данных – инверсный, управляемый). Режим = 60657 (300 бод, проверка на четность, инверсный, открытый).
Команды переопределения 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 информационных разрядов
Команда SEROUT2 поддерживает много различных модификаторов данных, которые могут быть смешаны и подобраны свободно в пределах одной команды SERIN2, для того чтобы обеспечить различный ввод информации.
Таблица 24
Модификаторы |
Операция |
|
{I}{S}BIN{1..16} |
Посылаются двоичные числа |
|
{I}{S}DEC{1..5} |
Посылаются десятичные числа |
|
{I}{S}HEX{1..4}
REP c\n
STR ArrayVar{\n}
Посылаются шестнадцатеричные числа
Послать символ с n раз
Послать n символов,
153