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