Файл: Учимся программировать микроконтроллеры Pic на языке PicBasicPro (В.В. Хилинский, 2007).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 17.06.2025

Просмотров: 1786

Скачиваний: 8

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Команда WHILE...WEND.

Синтаксис:

WHILE Condition

Statements...

WEND

Этот оператор многократно выполняет условие WHILE, если оно верно. Когда утверждение больше не верно, выполнение программы продолжается с утверждения, стоящего после WEND. Условие может быть любым выражением сравнения.

Пример: i = 1

WHILE i <= 10

SEROUT 0,N2400,["No:",#i,13,10] i = i + 1

WEND

Команда USBINIT.

Это утверждение должно быть одним из первых в тексте программы, в которой подразумевается использование USB канала связи. Эта инструкция предназначена для микроконтроллеров, которые аппаратно поддерживают USB связь, то есть имеют USB порт. Например, PIC16C745 и 765. Эта поддержка принимает форму трех новых команд PicBasicPro и некоторых модификаций библиотек Microchip для USB. Эта команда инициализирует USB-порт PIC микроконтроллера и будет ждать, пока шина USB не будет сформирована и к ней не будет разрешен доступ. Программы для работы по каналу USB требуют, чтобы было добавлено несколько файлов (которые находятся в подкаталоге USB). Связь по шине USB намного более сложна, чем синхронная (SHIFTIN и SHIFTOUT) или асинхронная (SERIN, SEROUT) связи. Для того, чтобы больше узнать о связи по каналу USB, смотрите информацию в Интернет на странице фирмы Microchip.

Команда USBIN.

Синтаксис:

USBIN Endpoint,Buffer,CountVar,Label

По команде USBIN микроконтроллер получает любые доступные данные по каналу USB и помещает их в буфер. Буфер должен быть байтовым множеством подходящей длины, чтобы иметь возможность сохранять данные. Параметр Countvar содержит число байтов, помещаемых в буфер. Если по каким-то причинам данные не будут доступны, программа перейдет на метку – Label. Подкаталог USB содержит измененные библиотеки USB от фирмы Microchip, а так же примеры программ. Программы для работы по каналу USB требуют, чтобы

161

было добавлено несколько файлов (они находятся в подкаталоге USB). Связь по шине USB намного более сложна, чем синхронная (SHIFTIN и SHIFTOUT) или асинхронная (SERIN, SEROUT) связи. Для того чтобы больше узнать о связи по каналу USB, смотрите информацию в Интернет на странице фирмы Microchip.

Команда USBOUT.

Синтаксис:

USBOUT Endpoint,Buffer,Count,Label

Команда USBOut выбирает из буфера – Buffer некоторое количество -Count байтов и посылает их конечной точке - Endpoint USB канала связи. Если по каким то причинам данные не могут быть переданы то выполнение программы продолжится с указанной метки - Label . Подкаталог USB содержит измененные библиотеки USB от фирмы Microchip, а так же примеры программ. Программы для работы по каналу USB требуют, чтобы было добавлено несколько файлов (они находятся в подкаталоге USB). Связь по шине USB намного более сложна чем синхронная (SHIFTIN и SHIFTOUT) и асинхронная (SERIN, SEROUT) связи. Для того чтобы больше узнать о связи по каналу USB, смотрите информацию в Интернет на странице фирмы Microchip.

Команда WRITE.

Синтаксис:

WRITE Address,Value

По этой команде записывается новое значение в EEPROM по указанному адресу. Эта команда может использоваться только с PIC микроконтроллерами, которые имеют внутреннюю EEPROM, типа PIC16F84, PIC16C84 из ряда PIC16F87x. Чтобы записать новое значение в EEPROM при программировании, используйте для этого команды EEPROM или DATA. Каждая команда WRITE затрачивает на своё выполнение приблизительно 10 миллисекунд.

Если в программе используются прерывания, они должны быть отключены (замаскированы) перед выполнением команды WRITE, а затем возвращены (если нужно) после того, как запись произведена. Прерывание, которое может возникнуть во время выполнения команды WRITE, может привести к некорректному выполнению этой команды. Понятно, что команда WRITE не будет работать с EEPROM, находящейся вне кристалла и работающей по последовательному каналу связи типа I2C, как 12CE67x и 16CE62x части. Для этого используйте команду I2CWRITE.

Пример:

WRITE 5,B0 ' Записать значение переменной B0 в EEPROM по адресу 5

162


Команда WRITECODE

Синтаксис:

WRITECODE Address,Value

По этой команде записывается значение -Value размером в слово в память программ по адресу - Address. Микроконтроллеры типа PIC16F87x позволяют программе читать и записывать в память в процессе выполнения программы. Эта команда позволяет осуществлять самомодифицирующуюся программу. Но делать это надо очень осторожно. Если в программе используются прерывания, то они должны быть временно отключены (замаскированы) командой DISABLE перед выполнением WRITECODE, и возвращены (если это необходимо) после того, как команда записи будет выполнена. Прерывание, произошедшее во время выполнения WRITECODE, может привести к плачевным результатам.

Пример:

WRITECODE 100,W ' записать значение W в память по адресу 100

Команда XIN.

Синтаксис:

XIN DataPin,ZeroPin,{Timeout,Label,}[Var{,...}]

Эта команда работает по интерфейсу X-10. Она получает данные и сохраняет в памяти переменные этого интерфейса - House Code и Key Code. Устройства, работающие по этому интерфейсу, выпускаются многими производителями и под разными торговыми марками. По этому интерфейсу микроконтроллер должен быть подключен к питающей сети переменного напряжения. Для организации двухсторонней связи (протокол TW-523) интерфейса X-10 требуется команда XIN. Это устройство должно содержать схему для подключения к сетевому переменному напряжению, так как вся информация передается по цепям питания. Интерфейс X-10 запатентован, поэтому за его использование необходимо платить.

Для того, чтобы получать данные по интерфейсу X-10, вывод DataPin автоматически становится входом. Вывод -ZeroPin также автоматически устанавливается в состояние “вход”. Он служит для получения сигнала перехода синусоиды питающего напряжения через нулевую точку. По этому сигналу начинается выборка информации согласно правилам интерфейса X-10. При этом оба вывода должны быть подключены к цепи +5 В через резистор сопротивлением 4.7 кОм. Контакты ZeroPin и DataPin могут быть константой, значения которой лежат в пределах от 0 и до 15, или переменной, значения которой могут меняться от 0 и до 15 (например, B0), или названием вывода (например, PORTA.0). Параметры - Timeout (дополнительное время ожидания) и - Label (метка) могут быть включены в команду для того, чтобы программа могла продолжиться, если данные X-10 не будут получены в пределах указанного времени. Время ожидания определено в полупериодах сетевого

163


питания (при 60 Гц, приблизительно 8.33 миллисекунды). Команда XIN обрабатывает данные только тогда, когда будет получен 0 по цепи ZeroPin, то есть, при пересечении нуля синусоидой сетевого питания. Если этого сигнала не будет, команда XIN будет ждать его бесконечно.

Key Code может быть номером определенного модуля X-10 или функцией, которая должна быть выполнена модулем. В нормальной практике сначала посылают команду, определяющую номер модуля X-10. Номер сопровождается командой, определяющей желаемую функцию. Некоторые функции работают на всех модулях сразу, и, следовательно, номер модуля не нужен. Хотелось бы надеяться, что примеры, показанные ниже, разъяснят эти вещи лучше. Номер Key Code (от 0 до 15) соответствует номерам модулей (1-16).

Пример:

housekey VAR WORD

'Получить данные по каналу X-10

loop: XIN PORTA.2,PORTA.0,[housekey]

'Вывести данные, полученные по X-10 на ЖК монитор

LCDOUT $fe,1,"House=",#housekey.byte1, "Key=",#housekey.byte0

GOTO loop ' Вернуться назад

'Примите данные по каналу X-1. Если данных не будет в течении 1 полупериода, ‘ перейдите на метку nodata

XIN PORTA.2,PORTA.0,1,nodata,[housekey]

Команда XOUT.

Синтаксис:

XOUT DataPin,ZeroPin, [HouseCode\KeyCode{\Repeat}{,...}]

Команда XOUT посылает в формате X-10 значения HouseCode и KeyCode, повторив их несколько раз. Если дополнительное значение -Repeat (повторить) опущено в команде, эти значения (по умолчанию) повторяются минимум 2 раза. Повторение обычно резервируется для использования с командами - Bright (Ярче) и – Dim (Темнее). Команда XOUT используется для того, чтобы послать информацию управления модулям X-10. Этих модулей выпускается довольно много и под несколькими торговыми марками. Согласно интерфейсу микроконтроллер обязан быть подключенным к сети питания переменного напряжения. Он может работать по протоколу – PL-513, в котором идет только передача информации, или по протоколу - TW-523, по которому осуществляется двухсторонняя связь. Так как интерфейс X-10 запатентован, то за его использование необходимо платить.

По команде XOUT вывод DataPin автоматически устанавливается в состояние выхода для того, чтобы отправлять данные по интерфейсу X-10. Вывод ZeroPin автоматически устанавливается в состояние входа для получения

164


значения 0, которое формируется при переходе синусоиды питающего напряжения через нулевое значение. Эти цепи должны быть подключены к цепи питания +5 В через подтягивающие резисторы сопротивлением 4.7 кОм. Контакты ZeroPin и DataPin могут быть константами, значения которых лежат в пределах от 0 и до 15, или переменными, значения которых могут меняться от 0 и до 15 (например, B0), или названием выводов (например, PORTA.0)

Команда XOUT начинает отправлять данные при поступлении 0 по цепи ZeroPin. Если переходов синусоиды питающего напряжения не будет, команда XOUT будет фактически ждать их бесконечно долго.

KeyCode может быть номером определенного модуля X-10 или функцией, которая должна быть выполнена модулем. В нормальной практике, сначала посылают команду, определяющую номер модуля X-10, затем команду, которая определяет желаемую функцию. Некоторые функции работают на всех модулях сразу, и поэтому номер модуля не нужен. Примеры, показанные ниже, надеюсь, разъяснят это лучше. Номера KeyCode (от 0 и до 15) соответствуют номерам модулей 1-16. Имена функций KeyCode (например, unitOn) определены в файле MODEDEFS.BAS. Чтобы использовать их, добавьте в начале программы PicBasic Pro следующую строчку:

ВКЛЮЧИТЕ "modedefs.bas"

в начале программы PicBasic Pro. Файлы BS1DEFS.BAS и BS2DEFS.BAS уже включают файл MODEDEFS.BAS. Поэтому не включайте его снова, если один из этих файлов уже подключен. Значения KeyCode могут использоваться и без включения этого файла.

Таблица 27

KeyCode

KeyCode No.

Операция

unitOn

%10010

Включить модуль

unitOff

%11010

Выключить модуль

unitsOff

%11100

Выключить все модули

lightsOn

%10100

Включите все световые модули

lightsOff

%10000

Выключите все световые модули

bright

%10110

Ярче световой модуль

dim

%11110

Темнее световой модуль

Соединение по интерфейсу X-10 требует 4 линий. Выводы микроконтроллера используемые в интерфейсе X-10 – должны быть выводами с открытым коллектором, к которым подключены подтягивающие резисторы приблизительно 4,7 кОм. Ниже приведены таблицы соединений для каждого интерфейса:

Соединение PL 513

165


Таблица 28

№ провода

Цвет провода

Подключение

1

Черный

Выход цепи Zero

2

Красный

Общий для цепи Zero

3

Зеленый

Общий X-10

4

Желтый

Выход X-10

Соединение TW-523

Таблица 29

№ провода

Цвет провода

Подключение

1

Черный

Выход цепи Zero

2

Красный

Общий

3

Зеленый

Выход X-10

4

Желтый

Вход X-10

Пример:

house VAR BYTE unit VAR BYTE

INCLUDE "modedefs.bas"

house = 0 ' Установим переменную house в 0 unit = 8 ' Установим переменную unit равную 8

' Включить модуль (unit) 8 в доме (house) 0

XOUT PORTA.1,PORTA.0,[house\unit,house\unitOn]

' Отключить все освещение в доме (house) 0

XOUT PORTA.1,PORTA.0,[house\lightsOff]

' Будем выключать свет на 10 секунд

XOUT PORTA.1,PORTA.0,[house\0]

loop: XOUT PORTA.1,PORTA.0,[house\unitOn]

PAUSE 10000

' Ждем 10 секунд

XOUT

PORTA.1,PORTA.0,[house\unitOff]

PAUSE 10000

' Ждем 10 секунд

GOTO

loop

Оператор DEFINE.

Некоторые параметры PicBasicPro, такие, как частота задающего генератора, выводы микроконтроллера для подключения ЖК монитора и тому подобные,

166