Файл: Учимся программировать микроконтроллеры Pic на языке PicBasicPro (В.В. Хилинский, 2007).pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 17.06.2025
Просмотров: 1775
Скачиваний: 8
HIGH |
Установить вывод в высокое логическое состояние. |
HPWM |
Генерирует на выводе ШИМ сигнал. |
HSERIN |
Аппаратный асинхронный последовательный ввод. |
HSEROUT |
Аппаратный асинхронный последовательный вывод. |
I2CREAD |
Чтение данных с использованием интерфейса I2C. |
I2CWRITE |
Запись во внешнее устройство с использованием |
интерфейса I2C.
IF..THEN..ELSE..ENDIF Выполнить инструкции в зависимости от условия.
INPUT |
Установить вывод в состояние входа. |
LCDIN |
Чтение значений из ОЗУ ЖК монитора. |
LCDOUT |
Вывод знаков на экран ЖК монитора. |
{LET} |
Определение переменной (устаревшее). |
LOOKDOWN |
Поиск значений в таблице констант |
LOOKDOWN2 |
Поиск значений в таблице констант/переменных. |
LOOKUP |
Выбрать постоянное значение из таблицы. |
LOOKUP2 |
Выбрать значение констант/переменных из таблицы. |
LOW |
Установить вывод в низкое логическое состояние и сделать его |
выходом. |
|
NAP |
Отключить процессор на короткий промежуток времени. |
ON DEBUG |
Использовать внутрисхемный отладчик. |
ON INTERRUPT |
Выполнить подпрограмму обработки прерываний. |
OWIN |
Принять данные по однопроводному интерфейсу. |
OWOUT |
Передать данные по однопроводному интерфейсу. |
OUTPUT |
Сделать вывод выходом. |
PAUSE |
Включить паузу (на n мс.). |
PAUSEUS |
Включить паузу (на n мкс.). |
PEEK |
Прочитать байт из регистра. |
POKE |
Записать байт в регистр. |
POT |
Считать значение потенциала на выводе. |
PULSIN |
Измерить длительность импульса на выводе. |
PULSOUT |
Сгенерировать импульс на выводе. |
PWM |
Сгенерировать ШИМ сигнал на выводе. |
RANDOM |
Сгенерировать псевдо-случайное число. |
RCTIME |
Измерить продолжительность нахождения вывода в |
определенном логическом состоянии. |
|
READ |
Считать значение из внутренней ЕЕПРОМ. |
READCODE |
Считать значение из памяти программ микроконтроллера. |
RESUME |
Вернуться в основную программу после обработки прерывания. |
RETURN |
Продолжить выполнение команд с того места откуда был выход |
по GOSUB. |
|
REVERSE |
Сделать состояние вывода противоположным. |
SELECT CASE |
Выбор значения переменной из группы различных значений. |
87
SERIN |
Прием информации по асинхронному каналу связи. |
SERIN2 |
Прием информации по асинхронному каналу связи. |
SEROUT |
Передача информации по асинхронному каналу связи. |
SEROUT2 |
Передача информации по асинхронному каналу связи). |
SHIFTIN |
Прием данных по синхронному каналу связи. |
SHIFTOUT |
Передача данных по синхронному каналу связи. |
SLEEP |
Выключить процессор на некоторое время. |
SOUND |
Генерировать частоту или белый шум на выводе. |
STOP |
Остановить выполнение программы. |
SWAP |
Обменяйте значения двух переменных. |
TOGGLE |
Инвертировать состояние вывода. |
USBIN |
Прием данных по каналу USB. |
USBINIT |
Инициализация USB порта. |
USBOUT |
Передача данных по каналу USB. |
WHILE..WEND Выполнить инструкции, пока условие истинно. |
|
WRITE |
Записать новое значение во внутреннюю ЕЕПРОМ. |
WRITECODE |
Записать новое значение размером в WORD в память |
программ. |
|
XIN |
Принять данные по интерфейсу X-10. |
XOUT |
Передать данные по интерфейсу X-10.. |
А теперь опишем работу каждой из команд более подробно.
Команда @.
@ Выражение на ассемблере
Когда знак - @ используется в начале строки, то это означает, что далее на этой строке следует подпрограмма на ассемблере, которая вставлена в Вашу BASIC программу. Поэтому смело используйте этот знак, когда хотите включить команды ассемблера в программу PicBasicPro.
Пример:
i var byte rollme var byte
FOR i = 1 TO 4
@ rlf _rollme, F
NEXT i
Этот знак может быть также использован для включения подпрограммы ассемблера находящейся в другом файле.
Например:
@ Include "fp.asm"
88
Команда - @ сбрасывает регистр выбора страницы памяти в 0 перед выполнением команд ассемблера. Страница памяти не должна меняться, при использовании команды - @.
Команда ADCIN.
Синтаксис
ADCIN Channel,Var
По этой команде считывается значение потенциала на входе выбранного канала АЦП, преобразуется в цифровой код, и результат сохраняется в указанной переменной. И хотя доступ к регистрам аналого-цифрового преобразователя можно получить непосредственно, команда ADCIN делает этот процесс несколько проще.
Прежде, чем Вы будете использовать команду ADCIN, необходимо соответствующий разряд регистра TRIS установить так, чтобы он стал входом. В регистре ADCON1 также необходимо установить соответствующий разряд так чтобы вывод канала АЦП перевести в режим аналогового входа, а в некоторых случаях установить формат результата и источник синхронизации. См. справочные листы данных фирмы Microchip для получения дополнительной информации об этих регистрах и настройке их для определенного устройства. Для этих же целей могут использоваться несколько команд DEFINE.
Пример: |
|||
DEFINE ADC_BITS 8 |
' определяем разрядность преобразования |
||
DEFINE ADC_CLOCK 3 |
' Устанавливаем источник синхронизации (rc = 3) |
||
DEFINE ADC_SAMPLEUS 50 |
' установим время выборки в микросекундах |
||
TRISA = 255 |
' установим все разряды PORTA на вход |
||
ADCON1 = |
2 |
' определяем режим PORTA как аналоговый вход |
|
ADCIN 0, |
B0 |
' читаем канал 0, результат записываем в |
|
‘ переменную B0
Команда ASM...ENDASM.
Синтаксис:
ASM
{assembler code}
ENDASM
Команды ASM и ENDASM сообщают компилятору PicBasicPro, что программа, находящаяся между этими двумя строками это программа на ассемблере и не должна интерпретироваться как команды PicBasicPro. Вы можете использовать
89
эти два слова, для того чтобы свободно вставлять подпрограмму на ассемблере в программу PicBasicPro.
Максимальный размер текста вставляемой программы на ассемблере не должен превышать 8 кб. Это максимальный размер, включая комментарии, на сгенерированную программу. Если блок текста программы больше чем допустимо, то необходимо разбить текст программы ассемблера на части или просто включить эго в отдельный файл. Команда ASM сбрасывает страницу памяти в 0.
Пример:
ASM
bsf PORTA, 0 ; установить разряд 0 PORTA в 1 bcf PORTB, 0 ; обнулить разряд 0 PORTB
ENDASM
Команда BRANCH.
Синтаксис:
BRANCH Index,[Label{,Label...}]
Команда BRANCH заставляет программу перейти на одну из указанных меток в программе, на основании переменного индекса. Индекс выбирается один из списка меток. Выполнение программы продолжается от указанной метки.
Например, если индекс - нуль, программа переходит к первой в списке меток, если индекс равен единице, программа переходит ко второй метке, и так далее. Если индекс больше или равен числу меток, то никакое действие не будет предпринято, и выполнение продолжается со следующей строки после команды BRANCH. В команде BRANCH могут быть до 255 меток (256 для 18Cxxx). Метка должна находиться в той же самой странице памяти, что и команда.
Если Вы не уверены в этом, то используйте команду BRANCHL. Пример:
BRANCH B4,[dog,cat,fish]
Или то же самое:
If B4=0 Then dog |
' перейти на метку dog |
|||
If |
B4=1 |
Then |
cat |
' перейти на метку cat |
If |
B4=2 |
Then |
fish |
' перейти на метку fish |
Команда BRANCHL.
Синтаксис:
BRANCHL Index,[Label{,Label...}]
90
BRANCHL (или BRANCH длинный) работает точно также, как и команда BRANCH. То есть она заставляет программу переходить к различным меткам, в зависимости от переменной индекса. Основные различия заключаются в том, что этот оператор может перейти к метке, которая находится на другой странице памяти, чем та, в которой находится команда BRANCH. Но при этом компилятор создает код программы, который будет вдвое длиннее, чем код программы, созданный командой BRANCH. Если Вы уверены, что метки находятся на той же странице памяти, где находится и команда BRANCH или если микроконтроллер не имеет больше, чем одна страница памяти (ПЗУ меньше 2 кб), то используйте команду BRANCH вместо BRANCHL. Это минимизирует используемую память.
Пример:
BRANCHL B4,[dog,cat,fish]
Или то же самое:
If B4=0 Then dog ' если В4=0 то перейти на метку dog If B4=1 Then cat ' если В4=1 то перейти на метку cat
If B4=2 Then fish ' если В4=2 то перейти на метку fish
Команда BUTTON.
Синтаксис:
BUTTON Pin, DownState, Delay, Rate, BVar, Action, Label
Работа этой команды, к сожалению, не совсем верно описана в файле помощи поставляемого вместе с компилятором.
По этой команде считывается значение на выводе - Pin. Этот вывод автоматически устанавливается в состояние входа. Параметр Pin может быть константой, значения которой лежат в пределах от 0 и до 15, переменной, значения которой могут меняться от 0 и до 15 (например, B0) или названием вывода (например, PORTA.0). Все кнопки можно разделить на два варианта подачи сигнала на вывод Pin. В первом случае при замыкании контактов кнопки на вход микроконтроллера подается логический 0. Во втором случае логическая единица. Это отображено на прилагаемом рисунке 45.
91
Рис. 32. Варианты подключения кнопок к микроконтроллеру.
Параметр DownState указывает на то какое логическое состояние на выводе к которому подсоединена кнопка должно быть в том случае когда кнопка нажата. Это может быть однобитовая переменная или константа. Именно от совпадения значения данного параметра со значением на выводе Pin будет определяться то, что клавиша была нажата.
Параметр Delay (задержка) может быть как переменная, так и константа, размер которой должен быть определен в один байт. Это значит, что значения Delay могут лежать в пределах от 0 до 255. Этот параметр по замыслу разработчика должен выполнять функцию противодребезговой защиты (debounce). Задержка измеряется в циклах обращения к команде BUTTON. Задержка имеет два специальных параметра настройки: 0 и 255. Если Delay = 0, то команда BUTTON не выполняет никакой противодребезговой защиты и автоповтора. Если же Delay = 255, команда исполняет противодребезговую защиту, но не осуществляет никакого автоповтора.
Параметр Rate также как и параметр Delay может быть переменной или константой с размером в один байт. Опять же по замыслу разработчика он должен был бы выполнять функцию автоповтора.
Вообще говоря, когда происходит замыкание некоторых механических контактов то в течение 1 – 100 мс совершаются короткие микроудары контактов друг о друга, то есть происходит серия замыканий - размыканий контактов. Это называется дребезгом контактов. Понятно, что это может интерпретироваться микроконтроллером как более чем одно срабатывание кнопки. Для того чтобы этого не происходило, в команде BUTTON присутствует так называемая противодребезговая защита, которая избавляет нас от этого электромеханического «шума». Физически она представляет собой некоторую задержку во времени после первого срабатывания контактов. Команда BUTTON также реагирует на то, как долго происходит нажатие на кнопку. Например, работая на компьютере, Вы замечали, что когда нажимаете на клавишу, символ нажатой клавиши немедленно появляется на экране. Если удерживать клавишу некоторое время, то на экране появляется повторяющейся поток этих символов. Это называется автоповтором. В команде BUTTON и присутствует такая функция автоповтора.
92