Файл: Учимся программировать микроконтроллеры Pic на языке PicBasicPro (В.В. Хилинский, 2007).pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 17.06.2025
Просмотров: 1783
Скачиваний: 8
Команда LOOKDOWN ищет в списке 8-битовых констант значение - Search. Как только это значение будет найдено, его порядковый номер будет сохранен в переменной -Var. Если значение находится вначале списка, то переменной присваивается значение ноль. Если она вторая в списке, переменная получает значение 1. И так далее. Если в приведенном списке не было найдено искомого значения, то переменная остается неизменной. Список констант может быть смесью как числовых, так и строковых констант. Каждый знак в строковой переменной обрабатывается как отдельная константа с ASCII значением.
Массивы, составленные из переменных с переменным индексом не могут использоваться в команде LOOKDOWN, хотя массивы, составленные из переменных с постоянными индексами разрешены. До 255 констант разрешено использовать в списке (256 для 18Cxxx).
Пример:
SERIN 1,N2400,B0 ' Получить шестнадцатеричное значение по последовательному каналу связи на выводе Pin1 и присвоить его переменной В0 LOOKDOWN B0,["0123456789ABCDEF"],B1 ' Преобразуйте шестнадцатеричный значение переменной B0 в десятичное значение B1
SEROUT 0,N2400,[#B1]ё 'Пошлите значение переменной В1 по последовательному каналу связи через вывод Pin0
Команда LOOKDOWN2.
Синтаксис:
LOOKDOWN2 Search,{Test}[Value{,Value...}],Var
Команда LOOKDOWN2 ищет в списке 8-битовых констант значение - Search. Как только это значение будет найдено, его порядковый номер будет сохранен в переменной -Var. Если значение находится вначале списка, переменной присваивается значение ноль. Если она вторая в списке, переменная получает значение 1, и так далее. Если в приведенном списке не было найдено искомого значения, то переменная остается неизменной.
В этой команде используется дополнительный параметр Test, с помощью которого можно осуществить выборку индекса значения большего или меньшего, из предложенного. Для проверки используются знаки « < » или « > ». Например, при использовании знака « >» может быть отыскано первое значение в списке, которое больше, чем параметр Search. Если знака проверки нет, то принимается, что использован знак «=». Список значений может быть смесью 16разрядных числовых и строковых констант и переменных. Каждый знак в строковой переменной обрабатывается как отдельная константа, значение которой равно ASCII коду этого знака. Выражения не могут использоваться в списке значений, хотя они могут использоваться как значения Search. Массивы, составленные из переменных с переменными индексами, не могут использоваться в команде LOOKDOWN2, хотя массивы, составленные из переменных с
126
постоянными индексами, разрешены. Разрешено использовать в списке до 85 (256 для 18Cxxx) значений.
LOOKDOWN2 генерирует программу, которая приблизительно в 3 раза больше, чем программа, сгенерированная командой LOOKDOWN. Если список для поиска составлен только из 8-разрядных констант или строковых переменных, то, понятно, что предпочтительней использовать команду LOOKDOWN.
Пример:
LOOKDOWN2 W0,[512,W1,1024],B0
LOOKDOWN2 W0,<[10,100,1000],B0
Команда LOOKUP.
Синтаксис:
LOOKUP Index,[Constant{,Constant...}],Var
Команда LOOKUP используется для того, чтобы выбрать значение из таблицы 8-разрядных констант в соответствии с параметром Index и присвоить это значение переменной - Var. Если значение Index равно нулю, то выбирается значение первой константы. Если Index равен единице, то выбирается значение второй константы. И так далее. Если Index больше или равен числу констант в списке значений, то никакое действие не предпринимается, и переменная остается неизменной. Список констант может быть смесью числовых и строковых констант. Каждый знак в строковой переменной обрабатывается как отдельная константа, равная по значению ее ASCII коду. Массивы, составленные из индексированных переменных не могут использоваться в команде LOOKUP, хотя массивы составленные из индексированных констант разрешены для использования. Списки констант могут содержать до 255 (256 для 18Cxxx) значений.
Пример:
FOR B0 |
= 0 TO 5 |
' Считаем от 0 до 5 |
LOOKUP |
B0,["Hello!"],B1 |
' Выбрать из символьных значений Hello! |
Значение под номером В0 и присвоить это значение переменной В1 |
||
SEROUT |
0,N2400,[B1] |
' Отправить по последовательному каналу |
значение В1 |
||
NEXT B0 |
' Перейти к следующему символу |
|
127
Команда LOOKUP2.
Синтаксис: |
}],Var |
LOOKUP2 Index,[Value{,Value... |
Команда LOOKUP2 используется для того, чтобы выбрать значение из таблицы 8-разрядных констант в соответствии с параметром Index и присвоить это значение переменной - Var. Если значение Index равно нулю, то выбирается значение первой константы. Если Index равен единице, то выбирается значение второй константы. И так далее. Если Index больше или равен числу констант в списке значений, то никакое действие не предпринимается, и переменная остается неизменной. Список значений может быть смесью 16-разрядных числовых и строковых констант и переменных. Каждый знак в строковой переменной обрабатывается как отдельная константа равная значению ASCII кода. Выражения не могут использоваться в списке значений, хотя они могут использоваться как значение Index. Массивы, составленные из переменных не могут использоваться с командой LOOKUP2. В команде LOOKUP2 можно использовать список до 85 (256 для 18Cxxx) значений.
Команда LOOKUP2 генерирует программу, которая приблизительно в 3 раза больше, чем программа, сгенерированная командой LOOKUP. Если список значений составлен только из 8-разрядных констант и строковых переменных, то лучше использовать команду LOOKUP.
Пример:
LOOKUP2 B0,[256,512,1024],W1
Команда LOW.
Синтаксис:
LOW Pin
Команда LOW устанавливает на указанном контакте низкий логический уровень. Этот контакт автоматически становится выходом. Номер контакта может быть константой, значения которой лежат в пределах от 0 и до 15, или переменной, значения которой могут меняться от 0 и до 15 (например, B0) или названием вывода (например, PORTA.0).
Пример:
LOW 0 ' Сделать Pin0 выходом и установить его в низкий уровень (0
вольт)
LOW PORTA.0 ' Сделать разряд 0 PORTA выходом и установить на низкий уровень (0 вольт)
128
led VAR PORTB.0 ' Определим переменную LED как pin0 PORTB
LOW led ' Сделать LED выходом и установить ее в низкий уровень (0 вольт)
Однако, если контакт уже является выходом, то намного более быстрый и более короткий путь (с точки зрения сгенерированной программы), чтобы установить его в низкое логическое состояние это:
PORTB.0 = 0 ' Установим pin 0 PORTB на 0
Команда NAP.
Синтаксис:
NAP Period
Эта команда переводит микроконтроллер в режим малого энергопотребления на короткий промежуток времени, равный значению - Period. В течение действия команды NAP, потребляемая мощность уменьшается до минимума. Значение Period можно определить только приблизительно, поскольку выбор времени зависит от сторожевого таймера, который управляется R/C генератором и может изменяться от температуры и от кристалла к кристаллу. Так как команда NAP использует сторожевой таймер, то выбор времени не зависит от частоты генератора.
Зависимость времени задержки от значения параметра Period
Таблица 16
Период Задержка (прибл.)
0 18 миллисекунд
1 36 миллисекунд
2 72 миллисекунд
3 144 миллисекунд
4 288 миллисекунд
5 576 миллисекунд
6 1.152 секунд
7 2.304 секунд
Пример:
NAP 7 ‘ переводим в спящий режим на 2.3 секунды
129
Команда ON INTERRUPT.
Синтаксис:
ON INTERRUPT GOTO Label
Команда ON INTERRUPT позволяет производить обработку прерываний микроконтроллером. Есть 2 способа обработки прерываний в компиляторе PicBasicPro. В первом случае должна быть написана подпрограмма на ассемблере, которая будет обрабатывать возникшее прерывание. Этот способ работы с прерываниями можно считать самым быстрым и занимающим меньше места в памяти программ микроконтроллера. Второй способ это, когда прерывание обрабатывается средствами языка PicBasicPro. При втором способе подпрограмма обработки прерывания пишется на языке PicBasicPro и заканчивается командой RESUME.
Когда происходит прерывание, микроконтроллер отмечает его у себя в памяти и заканчивает выполнение текущей команды. После окончания выполнения этой команды программа переходит на метку Label и здесь уже начинает выполнять подпрограмму, которая для этого предназначена. Как только подпрограмма обработки прерывания будет выполнена, команда RESUME возвращает программу назад туда, откуда она была вызвана. В PicBasicPro имеются две команды, это DISABLE и ENABLE, которые позволяют некоторым секциям программы выполняться без возможности быть прерванными. Используя команду DISABLE, Вы тем самым запрещаете программе реагировать на прерывания. Команда же ENABLE, наоборот, разрешает программе (после того, как была использована команда DISABLE) обрабатывать возникающие прерывания. Самое лучшее место, где правильно поместить команду DISABLE, так это непосредственно перед подпрограммой обработки прерывания.
Необходимо отметить, что программа не перейдет на подпрограмму обработки прерывания, пока не будет завершена исполняемая в настоящий момент команда. Например, если исполняемой в настоящий момент является команда PAUSE или SERIN, то это может занять довольно значительное время прежде, чем начнется обработка прерывания. Поэтому в таких случаях долго исполняемые команды рекомендуется делить на части. Например, вместо команды PAUSE 300, можно записать – PAUSE 100: PAUSE 100: PAUSE 100.
Если же Ваша задача очень критична ко времени реакции обработки прерывания, то для этих целей должна быть написана подпрограмма на ассемблере.
Пример:
ON INTERRUPT GOTO myint ' При возникновении прерывания перейти на метку - myint
INTCON = %10010000 ' Включить прерывание по выводу RB0
. . .
DISABLE ' Отключить обработку прерываний
130
myint: led = 1 ' Включить LED при возникновении прерывания RESUME ' Вернуться в основную программу
ENABLE ' Включить обработку прерываний
Чтобы выключать обработку прерываний постоянно (или пока обработка не понадобится), установите регистр INTCON равным $80:
INTCON = $80
Команда OUTPUT.
Синтаксис:
OUTPUT Pin
Эта команда установит указанный контакт на выход. Контакт может быть константой, значения которой лежат в пределах от 0 и до 15, или переменной, значения которой могут меняться от 0 и до 15 (например, B0), или названием вывода (например, PORTA.0).
Пример:
OUTPUT 0 ' Сделать Pin0 выходом
OUTPUT PORTA.0 ' Сделать pin 0 PORTA выходом
По-другому, сделать контакт выходом намного более быстрым и более коротким способом (с точки зрения сгенерированной программы) можно так:
TRISB.0 = 0 ' Установить pin 0 PORTB как выход
Если необходимо сразу все контакты порта установить как выходы, то достаточно записать в регистр TRIS:
TRISB = %00000000
Команда OWIN.
Синтаксис:
OWIN Pin, Mode,[Item {,Item}]
По этой команде на выводе Pin микроконтроллер осуществляет прием одного или нескольких разрядов или байтов данных от устройства, работающего по однопроводному интерфейсу. Вывод может быть константой, значения которой лежат в пределах от 0 и до 15, или переменной, значения которой могут меняться от 0 и до 15 (например, B0), или названием вывода (например, PORTA.0). Режим (Mode) определяет, когда посылается импульс сброса - до и / или после приема данных, и размер элементов данных, то есть, бит или байт.
Таблица режимов в команде OWIN
131
Таблица 17 |
||||
Номер режима |
Эффект |
|||
0 |
1 |
= пошлите импульс сброса перед данными |
||
1 |
1 |
= пошлите импульс сброса после данных |
||
2 |
0 |
= размер данных - байт, 1 = размер данных - бит |
||
Некоторые примеры режимов:
Режим 0. Нет никакого сброса и данные, размером в байт. Режим 1 – сигнал сброса перед данными и данные, размером в байт. Режим 4 - нет никакого сброса и данные, размером в бит. Элемент - Item является одной или несколькими переменными или модификаторами, отделенными запятыми. Допустимыми модификаторами являются - STR, который сообщает, что надо считывать данные типа массива переменных, типа байт, и – SKIP, который говорит о том, что надо пропустить некоторое количество данных на входе. Модификаторы SKIP и STR не поддерживаются 12-разрядными PIC-микроконтроллерами из-за недостатка оперативной памяти.
Пример:
OWIN PORTC. 0,0,[temperature\2, SKIP 4, count_remain, count_per_c]
Это команда для получения байтов от устройства по одному проводу на выводе PORTC 0 без посылаемого импульса сброса. Полученные 2 байта помещает в переменную ‘температура’, затем пропускают следующие 4 байта и в заключении помещают последние 2 байта в отдельные переменные.
Команда OWOUT.
Синтаксис:
OWOUT Pin, Mode, [Item{, Item...}]
По этой команде через вывод Pin посылается один или несколько разрядов или байтов приемному устройству, работающему по однопроводному интерфейсу. Вывод может быть константой, значения которой лежат в пределах от 0 и до 15, или переменной, значения которой могут меняться от 0 и до 15 (например, B0), или названием вывода (например, PORTA.0). Режим определяет, посылают ли сброс прежде и/или после операции передачи данных, а также размер элементов данных (см. таблицу 17).
Некоторые примеры режимов:
Режим 0 Нет никакого сброса и данные размером в байт. Режим 1 – сигнал сброса перед данными, и данные размером в байт. Режим 4 - нет никакого сброса,
132