Вы находитесь на странице: 1из 412

Анатолий Медведев. Владимир Хилинский.

Оглавление

1. Как пользоваться книгой 7

PROTON+IDE для PIC

2.1. Встроенные команды в сопоставления 12


2.2. Сравнение строковых переменных 13
2.3. Реляционные операторы 21
2.4. Операторы булевой логики 22
2.5. Математические операции 26
2.5.1. Арифметические операции 26
ADD V (сложение) 26
DIVIDE V (деление) 29
MODULUS '//' 31
MULTIPLY (умножение) 34
MULTIPLY HIGH '**' 37
MULTIPLY MIDDLE '*/' 39
SUBTRACT '-' (вычитание) 40
2.5.2. Алгебраические операции 43
ABS 43
EXP 45
SQR 47
LOG 49
LOG10 51
MAX 53
MIN 55
POW 56
DIV32 58
2.5.3. Тригонометрические операции 60
ACOS 60
ASIN 62
ATAN 64
COS 66
SIN 68
TAN 70
2.6. Операторы работы с битами 71
BITWISE AND '&' 71
BITWISE COMPLEMENT '~' 74
BITWISE OR T- 76
BITWISE SHIFT LEFT '<<' 79
BITWISE SHIFT RIGHT '>>' 81
BITWISE XOR '^' 83
DCD 86
DIG 87

Страница 2
NCD 89
REV 90
2.7. Команды и директивы 93
ADIN 93
ASM, ENDASM 96
BOX 97
BRANCH 99
BRANCHL 101
BREAK 103
BSTART 105
BSTOP 107
BRESTART 108
BUSACK 109
CALL 110
CDATA 111
CF_INIT 118
CIRCLE 119
CLEAR 121
CLEARBIT 124
CLS 126
CONFIG 127
COUNTER 129
CREAD 131
CURSOR 132
CWRITE 135
DATA 136
DEC 138
DECLARES
DECLARE 140
MISC DECLARES 141
TRIGONOMETRY DECLARES 146
ADIN DECLARES 147
BUSIN-BUSOUT DECLARES 148
HBUSIN-HBUSOUT DECLARE 149
HSERIN, HSEROUT, HRSIN and HRSOUT DECLARES 150
Second USART DECLARES 151
HPWM DECLARES 152
ALPHANUMERIC LCD PRINT DECLARES (Hitachi) 153
GRAPHIC LCD DECLARES 155
SAMSUNG KS0108 Graphic LCD specific DECLARES 156
TOSHIBA T6963 Graphic LCD specific DECLARES 158
KEYPAD DECLARES 160
RSIN-RSOUT DECLARES 161
SERIN-SEROUT DECLARES 163
SHIN-SHOUT DECLARES 164

Страница 3
COMPACT FLASH DECLARES 165
CRYSTAL FREQUENCY DECLARES 167

DELAYMS 168
DELAYUS 169
DEVICE 170
DIG 172
DIM 174
DISABLE 177
DTMFOUT 178
EDATA 181
ENABLE 188
END 189
EREAD 190
EWRITE 195
FOR...NEXT...STEP 197
FREQOUT 199
GETBIT 203
GOSUB 205
GOTO 210
HIGH 212
HPWM 213
IF..THEN..ELSEIF..ELSE..ENDIF 217
INCLUDE 219
INC 221
INKEY 223
INPUT 226
LCDREAD 227
LCDWRITE 231
LDATA 236
LEN 247
LET 250
LEFT$ 251
LINE 254
LINETO 257
LOADBIT 259
LOW 261
LREAD 262
LREAD8, LREAD16, LREAD32 268
MID$ 270
ON GOTO 273
ON GOTOL 274
ON GOSUB 275
ON INTERRUPT 277
ON_HARDWARE_INTERRUPT 280

Страница 4
OUTPUT 282
ORG 283
OREAD 284
OREAD-OWRITE дополнения 290
OWRITE 292
PEEK 294
PIXEL 295
PLOT 297
POKE 300
POP 301
POT 308
PRINT 310
PULSIN 317
PULSOUT 319
PUSH 321
PWM 327
RANDOM 331
RCIN 332
READ 336
REM 342
REPEAT...UNTIL 343
RESTORE 345
RESUME 346
RETURN 347
RIGHT$ 349
RSIN 352
RSOUT 358
SEED 364
SELECT..CASE..ENDSELECT 366
SERVO 368
SET 370
SETBIT 373
SLEEP 375
SNOOZE 380
SOUND 381
SOUND2 383
STOP 386
SWAP 387
SYMBOL 388
TOGGLE 389
TOLOWER 390
TOUPPER 392
UNPLOT 394
VAL 397
VARPTR 401

Страница 5
WHILE...WEND 404
XIN 406
XOUT 408
2.8. Защищенные слова компилятора 411

Страница 6
Aнатолий Медведев. Программирование PIC-микроконтроллеров в PROTON+IDE на ВASIC. Как пользоваться электронной книгой.

Как установить электронную книгу?


Как пользоваться электронной книгой?
Как запустить в работу действующие схемы?

Как установить электронную книгу?

Создайте на любом из Ваших дисков папку с названием books_proton и скопируйте на нее содержимое нашего
CD-диска.

Найдите файл index.html и двойным щелчком запустите его

В запустившемся окне Вашего браузера откроется наша книга, в левой части которой Вы увидите меню навигации
по книге.

Приятного чтения!

Как пользоваться электронной книгой

Этот вариант электронной книги оптимизирован для чтения с дисплеев персональных компьютеров - настольных и
переносных (ноутбуков).

Для просмотра книги рекомендуем использовать Internet Explorer 6 или его более старшую версию

Для просмотра PDF-файлов из раздела DATASHEETs на Вашем компьютере должна быть установлена программа Adobe
Reader не ниже 7-ой версии.

Для правильного отображения анимированных графических элементов книги на Вашем компьютере должен быть
установлен FLASH-проигрыватель не ниже 6 версии компании Macromedia, а в свойствах браузера должны быть
активированы следующие функции:

—Воспроизводить анимацию на веб-страницах


—Воспроизводить видео на веб-страницах
—Воспроизводить звуки на веб-страницах

Для этого выберите в главном меню Internet Explorer меню Сервис, а в нём команду Свойства обозревателя (см.
рис. 1.)

Рис. 1. Первый шаг настройки браузера для чтения электронных книг.

В открывшемся диалоговом окне Свойства обозревателя выберите закладку Дополнительно и установите


переключатели этих функций как показано на рисунке 2.

Страница 7
http://terrarus.ucoz.ru/proton_plus_ide/proton/other/help.html
Aнатолий Медведев. Программирование PIC-микроконтроллеров в PROTON+IDE на ВASIC. Как пользоваться электронной книгой.

Рис. 2. Диалоговое окно Свойства обозревателя.


Второй шаг настройки браузера для чтения электронных книг

Для читателей с пониженной остротой зрения предусмотрена возможность изменения размера букв текста книги. Для
этого в главном меню Internet Explorer выберите раздел Вид. В открывшемся списке выберите меню Размер шрифта,
а в нем - команду Крупный или Самый крупный (см. рис. 3).

Рис. 3. Настройка размера отображения букв текста книги

Если Вы решили на короткое время прервать чтение, а затем вернуться и продолжить его, Вы можете отметить абзац,
на котором остановились.

Сделайте щелчок на нужном абзаце - он выделится цветом, отличным от фона странички. Для отмены выделения
нажмите кнопку Обновить вашего бараузера, эта кнопка показана на рисунке 4.

Страница 8
http://terrarus.ucoz.ru/proton_plus_ide/proton/other/help.html
Aнатолий Медведев. Программирование PIC-микроконтроллеров в PROTON+IDE на ВASIC. Как пользоваться электронной книгой.

Рис. 4. Кнопка Обновить барузера Internet Explorer

И ещё одна маленькая хитрость. Если Вы нажмете клавишу F11, то окно электронной книги займет всю площадь экрана
Вашего монитора. Это бывает необходимо для просмотра рисунков электронных схем больших размеров. Для
уменьшения окна снова нажмите клавишу F11.

Как запустить в работу действующие схемы?

В книге приведены примеры действующих схем, работающие под управлением программ написанных на языке
программирования BASIC для PIC-микроконтроллеров. Все эти схемы смоделированы в интеллектуальной системе
схемотехнического моделирования Electronics Labcenter Proteus 7.5 sp3 которая и обеспечивает их полноценное
функционирование в рамках данной книги.

Для того чтобы запустить любую действующую схему из нашей книги Вам необходимо установить на своем компьютере
программу Electronics Labcenter Proteus 7.5 sp3. После установки программы все действующие схемы будут
работоспособны.

Система Electronics Labcenter Proteus 7.5 sp3 предназначена для проектирования аналоговых, цифровых и аналого-
цифровых устройств, в том числе и на PIC-микроконтроллерах, имитации и симуляции их принципиальных схем на
персональном компьютере. Программа не заменима для студентов, инженеров-электронщиков и всех, кто так или иначе
связан с разработкой радиоэлектронных устройств. В ее составе много виртуальных инструментов, с помощью которых
можно смоделировать конкретное устройство и исследовать его.

После щелчка по изображению выбранной Вами схемы появится окно запроса Загрузка файла, изображённое на
рисунке 5. Нажмите в нем кнопку Открыть, произойдет запуск программы Electronics Labcenter Proteus 7.5 sp3, в
которой будет открыт проект с действующей схемой.

Страница 9
http://terrarus.ucoz.ru/proton_plus_ide/proton/other/help.html
Aнатолий Медведев. Программирование PIC-микроконтроллеров в PROTON+IDE на ВASIC. Как пользоваться электронной книгой.

Рис. 5. Окно запроса Загрузка файла.

Если Вы копируете странички нашей книги из интернет, то для загрузки полностью работоспособной схемы Вам
необходимо воспользоваться гиперссылкой -
По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

Затем разархивируйте скачанный архив внутрь той папки, в которую вы сохранили соответствующую HTML-страничку
нашей книги. Теперь действующая схема будет работать.

Если у Вас что-то не получается, напишите нам по электронному адресу terrarus@mail.ru. Мы можем выслать Вам
оригинальный СD-диск с нашей книгой.

Страница 10
http://terrarus.ucoz.ru/proton_plus_ide/proton/other/help.html
PROTON+IDE

Страница 11
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Inline Commands within Comparisons

Команды и директивы компилятора PROTON

Inline Commands within Comparisons

Встроенные команды в сопоставления

Очень полезным дополнением в новой версии компилятора Протона является возможность использования его
встроенных команд непосредственно в операторах сравнения (сопоставления).

Например такие команды как, ADIn, BusIn, Counter, Dig, ERead, HBusIn, InKey, LCDRead, LookDown,
LookDownL, LookUp, LookUpL, Pixel, Pot, PulsIn, Random, SHIn, RCIn, RSIn и т.д. могут быть использованы
непосредственно в операторах сравнения If...Then, Select...Case, While...Wend, или Repeat...Until.

В отличии от предыдущих версий компилятора, в которых, в операторах сравнения, например If...Then, для
отработки блока команд, после получения кода нажатой клавиши с помощью команды InKey, требовалось два
этапа:

Var1 = InKey

If var1 = 12 Then (Блок команд который требуется выполнить)

в новой версии компилятора подобные задачи уже решаются в один шаг:

If InKey = 12 Then (Блок команд который требуется выполнить)

или

If ADIn 0 = 1020 Then (Команды которые нужно ' Получить данные от канала 0 и выполнить
выполнить) операцию сравнения.

Такой синтаксис операторов делает программу намного проще для её понимания и легче для написания, или
отладки, если что-то в программе выполняется неправильно.

В командах LookUp, LookUpL, LookDown и LookDownL можно вместо переменной использовать другую
встроенную команду. Например, чтобы прочитать и вновь организовать чтение клавиш клавиатуры можно
использовать такую структуру:

KEY = LookUp InKey, [1,2,3,15,4,5,6,14,7,8,9,13,10,0,11,12255]

На этом не заканчиваются новые возможности использования встроенных команд. Они теперь могут также быть
использованы в командах RSOut, SerOut, HRSOut и Print для отображения данных в териминалах или на ЖКИ,
например:

LABEL:

RSOut LookUp InKey, [1,2,3,15,4,5,6,14,7,8,9,13,10,0,11,12255]

GoTo LABEL

Или

While 1=1: Print RSIn : Wend

В последнем примере показано как используя совместно команды RSin и Print одновременно осуществить прием
данных по последовательному каналу и отобразить их на ЖКИ.

Страница 12
http://terrarus.ucoz.ru/proton_plus_ide/proton/inline_comands/inline_comands.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. String cопоставления

Команды и директивы компилятора PROTON

String Comparisons

Сравнение строковых переменных

Так же, как и любой другой тип переменной, String переменные могут быть использованы в операторах
сравнения, таких как If...Then, Repeat...Until, While...Wend и Select...Case. Сравнение строк, это важнейший
элемент любого языка программирования. Тем не менее, есть несколько оригинальных правил, которым
подчиняются PIC микроконтроллеры из-за особенностей своей архитектуры.

Операции равенства (=) или не равенства (<>) являются единственными видами сравнений которые можно
применять для сравнения строковых переменных в операторах If...Then, Repeat...Until и While...Wend, потому,
что одна строка может быть или равна, или не равна другой строке. Нельзя сказать, что одна строка больше или
меньше другой, такого понятия не может существовать.

Таким образом, корректное сравнение строковых переменных может выглядеть следующим образом:

If STRING1 = STRING2 Then Print "EQUAL" : Else : Print "NOT EQUAL" ' EQUAL - равно, NOT EQUAL - не равно

или

If STRING1 <> STRING2 Then Print "NOT EQUAL" : Else : Print "EQUAL"
 

Но если Вы прочитаете разделы "Создание и использование STRINGS", "Создание и использование виртуальных


строк с СDATA" и "Создание и использование виртуальных строк с EDATA", Вы узнаете, что в PROTON+IDE
Compiler существует более чем один тип строковых переменных. Кроме простых строковых переменных String,
есть ещё два типа строковых переменных, которые предназначены для использования с внутренней Flach-памятью
PIC-микроконтроллера.

Кроме того, обращаем Ваше внимание на то, что применение указателей на строковые переменные не
допускается в операциях сравнения. При попытке использования в операциях сравнения указателей на строковые
переменные, компилятор сообщит о синтаксической ошибке.

Сравнение двух простых строковых переменных

Рассмотрение особенностей и возможностей операций сравнения строковых переменных следует начать с самого
простого сравнения строк, где одна простая строковая переменной сравнивается с другой простой строковой
переменной.

Пример 1

Листинг программы string_compare1.bas

' Сравнение простых строковых переменных.

Device 18F452 ' Необходим PIC микроконтроллер с 16-разрядным ядром


XTAL 4 ' Используется кварцевый резонатор 4 МГц
'------------------------------------Настройки подключения ЖКИ--------------------------------------
Declare LCD_TYPE ALPHA ' Тип ЖКИ - буквенно-цифровой
Declare LCD_DTPIN PORTD.4 ' Порт данных ЖКИ
Declare LCD_ENPIN PORTD.3 ' Цепь управления E
Declare LCD_RSPIN PORTD.2 ' Цепь управления RS
Declare LCD_INTERFACE 4 ' Разрядность шины данных
Declare LCD_COMMANDUS 2000 ' Задержка перед посылкой команды
Declare LCD_DATAUS 50 ' Задержка перед посылкой данных
Declare LCD_LINES 4 ' Количество строк ЖКИ
'--------------------------------------------- Объявление переменных ---------------------------------------------
Dim STRING1 As String * 20 ' Создать строковую переменную String1 в 20 символов
Dim STRING2 As String * 20 ' Создать строковую переменную String2 на 20 символов
'------------------------------------------------- Главная программа -----------------------------------------------
main: ' Метка начала главной программы
'-------------------------- Сравнение строковых пременных когда они не равны ------------------------------
Cls ' Очистить дисплей
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
' Загрузить в строковую переменную STRING1 строку
STRING1 = "EGGS"
' текста "EGGS"
Print At 1,1, "STRING1 = ", STRING1 ' Отобразить на ЖКИ содержимое STRING1
DelayMS 1000 ' Пауза 1 сек чтобы зафиксировать результат на ЖКИ
Страница 13
http://terrarus.ucoz.ru/proton_plus_ide/proton/string_compare/string_compare.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. String cопоставления

' Загрузить в строковую переменную STRING2 строку


STRING2 = "BACON"
' текста "BACON"
Print At 2,1, "STRING2 = ", STRING2 ' Отобразить на ЖКИ содержимое STRING2
DelayMS 1000 ' Пауза 1 сек чтобы зафиксировать результат на ЖКИ
Print At 3,1, "STRING1 = STRING2 ?" ' Отобразить на ЖКИ надпись "STRING1 = STRING2 ?"
DelayMS 2000 ' Пауза 2 сек чтобы зафиксировать результат на ЖКИ
' Если переменная STRING1 равна переменной STRING2
If STRING1 = STRING2 Then
то
' отобразить на четвертой строке дисплея фразу
Print At 4,1, "EQUAL"
' "EQUAL" (РАВНО)
Else ' Иначе
' отобразить на четвертой строке дисплея фразу
Print At 4,1, "NOT EQUAL"
' "NOT EQUAL" (НЕ РАВНО)
EndIf ' Завершить работу оператора сравнения If
DelayMS 3000 ' Пауза 3 сек чтобы зафиксировать результат на ЖКИ
'---------------------------- Сравнение строковых пременных когда они равны -----------------------------
Cls ' Очистить дисплей
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
Print At 1,1, "STRING1 = ", STRING1 ' Отобразить на ЖКИ содержимое STRING1
DelayMS 1000 ' Пауза 1 сек чтобы замедлить процесс
' Загрузить в строковую переменную STRING2 строку
STRING2 = "EGGS"
' текста "EGGS"
Print At 2,1, "STRING2 = ", STRING2 ' Отобразить на ЖКИ содержимое STRING2
DelayMS 1000 ' Пауза 1 сек чтобы зафиксировать результат на ЖКИ
Print At 3, 1, "STRING1 = STRING2 ?" ' Отобразить на ЖКИ надпись "STRING1 = STRING2 ?"
DelayMS 2000 ' Пауза 2 сек чтобы зафиксировать результат на ЖКИ
' Если переменная STRING1 равна переменной STRING2
If STRING1 = STRING2 Then
то
' отобразить в четвертой строке дисплея фразу EQUAL
Print At 4,1, "EQUAL" : DelayMS 3000 : GoTo main ' (РАВНО), выполнить задержку в 3 сек и перейти в
' начало программы
Else ' Иначе
' отобразить в четвертой строке дисплея фразу
Print At 4,1, "NOT EQUAL"
' "NOT EQUAL" (НЕ РАВНО)
EndIf ' Завершить работу оператора сравнения If
DelayMS 3000 ' Пауза 3 сек чтобы зафиксировать результат на ЖКИ
GoTo main ' Повторить главную программу

На рисунке 1 приведена действующая модель string_compare1.DSN, иллюстрирующая сравнение двух


строковых переменных STRING1 и STRING2. Модель работает под управлением программы string_compare1.bas,
листинг которой, приведен выше.

Страница 14
http://terrarus.ucoz.ru/proton_plus_ide/proton/string_compare/string_compare.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. String cопоставления

GIF

DSN

Рис. 1. Действующая модель string_compare1.DSN, иллюстирующая


сравнение двух строковых переменных STRING1 и STRING2.
По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

В примере 1 на экране ЖКИ в четвертой строке сначала отображается надпись "NOT EQUAL" (НЕ РАВНО), потому,
что первая строковая переменная STRING1 содержит текст "EGGS", а вторая STRING2 содержит текст "BACON", так
что они явно не равны.

Затем во второй части программы в переменную STRING2 загружается новый текст "EGGS", такой же, какой был
загружен в начале программы в переменную STRING1. На этот раз на экране ЖКИ в четвертой строке будет
отображаться надпись "EQUAL" (РАВНО). Действительно, и первая строковая переменная STRING1 содержит текст
"EGGS" и вторая STRING2 теперь тоже содержит текст "EGGS". Теперь строковые переменные равны, что и
определяет основная программа.

Сравнение строковой переменной со строкой символов.

Содержимое строковой переменной можно сравнивать не с содержимым второй строковой переменной, как это
было показано в примере 1, а просто со строкой символов (см. пример 2).

Пример 2

Листинг программы string_compare2.bas

' Сравнение строковой переменной и строки символов

Device 18F452 ' Необходим PIC микроконтроллер с 16-разрядным ядром


XTAL 4 ' Используется кварцевый резонатор 4 МГц
'------------------------------------Настройки подключения ЖКИ--------------------------------------
Declare LCD_TYPE ALPHA ' Тип ЖКИ - буквенно-цифровой
Declare LCD_DTPIN PORTD.4 ' Порт данных ЖКИ
Declare LCD_ENPIN PORTD.3 ' Цепь управления E
Declare LCD_RSPIN PORTD.2 ' Цепь управления RS
Declare LCD_INTERFACE 4 ' Разрядность шины данных
Declare LCD_COMMANDUS 2000 ' Задержка перед посылкой команды
Declare LCD_DATAUS 50 ' Задержка перед посылкой данных
Declare LCD_LINES 4 ' Количество строк ЖКИ
'--------------------------------------------- Объявление переменных ---------------------------------------------
Dim STRING1 As String * 20 ' Создать строковую переменную String1 в 20 символов
'------------------------------------------------- Главная программа -----------------------------------------------
main: ' Метка начала главной программы
'---------- Сравнение содержимого строковой пременной и строки символов когда они не равны ---------
Cls ' Очистить дисплей

Страница 15
http://terrarus.ucoz.ru/proton_plus_ide/proton/string_compare/string_compare.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. String cопоставления

' Загрузить в строковую переменную STRING1 строку


STRING1 = "EGGS"
' текста "EGGS"
If STRING1 = "BACON" Then ' Если содержимое STRING1 равно строке "BACON", то
' отобразить на первой строке дисплея фразу
Print At 1,1, "EQUAL"
' "EQUAL" (РАВНО)
Else ' Иначе
' отобразить на первой строке дисплея фразу
Print At 1,1, "NOT EQUAL"
' "NOT EQUAL" (НЕ РАВНО)
EndIf ' Завершить работу оператора сравнения If
'------------ Сравнение содержимого строковой пременной и строки символов когда они равны -----------
' Если содержимое переменной STRING1 равно строке
If STRING1 = "EGGS" Then
символов "EGGS" то
' отобразить во второй строке дисплея фразу EQUAL
Print At 2,1, "EQUAL"
(РАВНО)
Else ' Иначе
' отобразить во второй строке дисплея фразу
Print At 2,1, "NOT EQUAL"
' "NOT EQUAL" (НЕ РАВНО)
EndIf ' Завершить работу оператора сравнения If
DelayMS 1000 ' Пауза 1 сек чтобы зафиксировать результат на ЖКИ
GoTo main ' Повторить главную программу

На рисунке 2 приведена действующая модель string_compare2.DSN, иллюстрирующая сравнение строковой


переменной STRING1 со строкой символов. Модель работает под управлением программы string_compare2.bas,
листинг которой, приведен выше.

GIF

DSN

Рис. 2. Действующая модель string_compare2.DSN, иллюстрирующая


сравнение строковой переменной STRING1 со строкой символов.
По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

Сравнение в циклах двух строковых переменных

Содержимое одной строковой переменной можно сравнивать с содержимым второй строковой переменной при
помощи операторов циклов For...Next...Step, Repeat...Until, While...Wend (см. пример 3).

Пример 3

Листинг программы string_compare3.bas

' Сравнение двух строковых переменных при помощи оператора цикла Repeat...Until

' Необходим PIC микроконтроллер с 16-разрядным


Device 18F452
' ядром
XTAL 4 ' Используется кварцевый резонатор 4 МГц

Страница 16
http://terrarus.ucoz.ru/proton_plus_ide/proton/string_compare/string_compare.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. String cопоставления

'------------------------------------Настройки подключения ЖКИ--------------------------------------


Declare LCD_TYPE ALPHA ' Тип ЖКИ - буквенно-цифровой
Declare LCD_DTPIN PORTD.4 ' Порт данных ЖКИ
Declare LCD_ENPIN PORTD.3 ' Цепь управления E
Declare LCD_RSPIN PORTD.2 ' Цепь управления RS
Declare LCD_INTERFACE 4 ' Разрядность шины данных
Declare LCD_COMMANDUS 2000 ' Задержка перед посылкой команды
Declare LCD_DATAUS 50 ' Задержка перед посылкой данных
Declare LCD_LINES 4 ' Количество строк ЖКИ
'--------------------------------------------- Объявление переменных ---------------------------------------------
' Создать строковую переменную SOURCE_STRING в
Dim SOURCE_STRING As String * 20 20
' символов
' Создать ещё одну строковую переменную
Dim DEST_STRING As String * 20
' DEST_STRING в 20 символов
' Создать переменную типа Byte для фиксации в
Dim CHARPOS As Byte цикле
' позиции каждого символа внутри строк
'------------------------------------------------- Главная программа -----------------------------------------------
main: ' Метка начала главной программы
Cls ' Очистить дисплей
Clear DEST_STRING ' Обнулить строковую переменную DEST_STRING
' Загрузить строковую переменную SOURCE_STRING
SOURCE_STRING = "HELLO"
' текстом "HELLO"
' Отобразить во 1-ой строке ЖКИ содержимое
Print At 1,1, "DEST_STRING = ", DEST_STRING
' DEST_STRING
' отобразить во 2-ой строке ЖКИ содержимое
Print At 2,1, "SOURCE_STRING=", SOURCE_STRING
' SOURCE_STRING
DelayMS 1000 ' Пауза 1 сек чтобы замедлить процесс
Repeat ' Создать и начать цикл
' Скопировать из SOURCE_STRING в DEST_STRING
DEST_STRING [CHARPOS] = SOURCE_STRING
один
[CHARPOS]
' символ
' Отобразить в 3-ей строке ЖКИ номер позиции
Print At 3,1, "CHARPOS = ", Dec CHARPOS '
' считанного символа из SOURCE_STRING
' Отобразить в 4-ой строке ЖКИ содержимое
Print At 4,1, "DEST_STRING = ", DEST_STRING
' DEST_STRING
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
Inc CHARPOS ' Переход к следующему символу в строке
' Завершить цикл если строковая переменная
Until DEST_STRING = "HELLO"
' DEST_STRING = "HELLO"
DelayMS 2000 ' Пауза 2 сек чтобы замедлить процесс
' Обнулить переменную CHARPOS (счетчик позиции
Clear CHARPOS
' буквы в строке)
GoTo main ' Повторить главную программу

На рисунке 3 приведена действующая модель string_compare3.DSN, иллюстрирующая сравнение двух строковой


переменной при помощи оператора Repeat...Until. Модель работает под управлением программы
string_compare3.bas, листинг которой, приведен выше.

Страница 17
http://terrarus.ucoz.ru/proton_plus_ide/proton/string_compare/string_compare.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. String cопоставления

GIF

DSN

Рис. 3. Действующая модель string_compare3.DSN, иллюстрирующая


сравнение двух строковой переменной при помощи оператора Repeat...Until.
По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

Сравнение строковой переменной со строкой кода хранящейся в перепрограммируемой памяти МК

Содержимое простой строковой переменной можно сравнивать со строками кода, хранящимися в


перепрограммируемой памяти МК, которые были созданы с помощью команд СData и EData(см. пример 4).

Пример 4

Листинг программы string_compare4.bas

' Сравнение строковой переменной со строкой кода хранящейся в памяти МК.

Device 18F452 ' Необходим PIC микроконтроллер с 16-разрядным ядром


XTAL 4 ' Используется кварцевый резонатор 4 МГц
'------------------------------------Настройки подключения ЖКИ--------------------------------------
Declare LCD_TYPE ALPHA ' Тип ЖКИ - буквенно-цифровой
Declare LCD_DTPIN PORTD.4 ' Порт данных ЖКИ
Declare LCD_ENPIN PORTD.3 ' Цепь управления E
Declare LCD_RSPIN PORTD.2 ' Цепь управления RS
Declare LCD_INTERFACE 4 ' Разрядность шины данных
Declare LCD_COMMANDUS 2000 ' Задержка перед посылкой команды
Declare LCD_DATAUS 50 ' Задержка перед посылкой данных
Declare LCD_LINES 4 ' Количество строк ЖКИ
'--------------------------------------------- Объявление переменных ---------------------------------------------
Dim String1As String * 20 ' Создать строковую переменную String1 в 20 символов
'------------------------------------------------- Главная программа -----------------------------------------------
main: ' Метка начала главной программы
Cls ' Очистить дисплей
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
String1 = "BACON" ' Предварительная загрузка String1 текстом "BACON"
' Отобразить в первой строке ЖКИ содержимое строковой переменной
Print At 1,1, "String1 = ", String1
' String1
If CODE_STRING = "BACON" Then ' Если строка кода CODE_STRING хранящаяся в EEPROM равна "BACON"
Print At 2,1, "EQUAL" ' то отобразить во второй строке ЖКИ фразу "EQUAL" (РАВНО)
Else ' Иначе
Print At 2,1, "NOT EQUAL" ' отобразить во второй строке ЖКИ фразу "NOT EQUAL" (НЕ РАВНО)
EndIf ' Завершить работу первого оператора сравнения If

Страница 18
http://terrarus.ucoz.ru/proton_plus_ide/proton/string_compare/string_compare.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. String cопоставления

DelayMS 2000 ' Пауза 2 сек чтобы замедлить процесс


String1 = "EGGS" ' Предварительная загрузка String String1 текстом "EGGS"
' Отобразить в третьей строке ЖКИ содержимое строковой переменной
Print At 3,1, "String1 = ", String1
' String1
If String1 = CODE_STRING Then ' Если String1 равна строке кода CODE_STRING хранящаяся в EEPROM
Print At 4,1, "EQUAL" ' то отобразить в четверой строке ЖКИ фразу "EQUAL" (РАВНО)
Else ' Иначе
Print At 4,1, "NOT EQUAL" ' отобразить в четвертой строке ЖКИ фразу "NOT EQUAL" (НЕ РАВНО)
EndIf ' Завершить работу второго оператора сравнения If
DelayMS 2000 ' Пауза 2 сек чтобы замедлить процесс
GoTo main ' Повторить главную программу
' Остановить выполнение всей программы если она вышла за пределы
Stop
' главной программы
CODE_STRING: ' Метка начала подпрограммы CODE_STRING:
' Начиная с нулевого адреса сохранить строку данных "EGGS" в
CData "EGGS", 0
' перепрограммируемой памяти микроконтроллера

На рисунке 4 приведена действующая модель string_compare4.DSN, иллюстрирующая сравнение строковой


переменной со строкой кода хранящейся в перепрограммируемой памяти МК . Модель работает под управлением
программы string_compare4.bas, листинг которой, приведен выше.

GIF

DSN

Рис. 4. Действующая модель string_compare4.DSN, иллюстрирующая


cравнение строковой переменной со строкой кода, которая записана в перепрограммируемую память МК.
По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

Выбор варианта равенства строковой переменной и одной из нескольких строк символов при помощи
оператора Select...Case.

' Сравнить содержимое строковой переменной с несколькими вариантами строк символов при помощи
оператора Select...Case

Device 18F452 ' Необходимо спользовать PIC микроконтроллер с 16-разрядным ядром


Dim String1 As String * 20 ' Создать строковую переменную String1 в 20 символов
Cls ' Очистить дисплей
String1 = "EGGS" ' Предварительная загрузка String1 текстом "EGGS"
' Начало выбора варинта совпадения содержимого строковой переменной с
Select String1
' одной из нескольких строк символоводной из нескольких строк символов
Case "EGGS" ' Если содержимое String1 равно строке символов "EGGS" то
' отобразить в первой строке ЖКИ фразу "FOUND EGGS" ("СОВПАДАЕТ С
Print At 1, 1, "FOUND EGGS"
' EGGS")
Case "BACON" ' Если содержимое String1 равно строке символов "EGGS" то

Страница 19
http://terrarus.ucoz.ru/proton_plus_ide/proton/string_compare/string_compare.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. String cопоставления

' отобразить в первой строке ЖКИ фразу "FOUND BACON" ("СОВПАДАЕТ С


Print At 1, 1, "FOUND BACON"
' BACON")
Case "COFFEE" ' Если содержимое String1 равно строке символов "EGGS" то
' отобразить в первой строке ЖКИ фразу "FOUND COFFEE" ("СОВПАДАЕТ С
Print At 1, 1, "FOUND COFFEE"
' COFFEE")
Case Else ' Иначе
Print At 1, 1, "NO MATCH" ' отобразить в первой строке ЖКИ фразу "NO MATCH" ("НЕТ СОВПАДЕНИЙ")
End Select ' Конец выбора
Stop ' Остановить программу

См. также: Creating And using STRINGS, Creating And using VIRTUAL STRINGS with CData, CData,
If...Then...Else...EndIf, Repeat...Until, Select...Case, While...Wend.

Страница 20
http://terrarus.ucoz.ru/proton_plus_ide/proton/string_compare/string_compare.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Реляционные операторы

Команды и директивы компилятора PROTON

Relational Operators (Реляционные операторы)

Реляционные операторы используются для сравнения двух значений. Результаты могут быть использованы для
принятия решения в отношении исполнения отдельных ветвей программы.

В таблице ниже приведены действительные реляционные операторы выполняемые компилятором:

Оператор Отношение Выражение Примечание


= X= Y присвоение Значение переменной Y присвоить переменной Х
== X == Y равенство Значение переменной X равно значению переменной Y
Значение переменной Х меньше или больше значения
<> X <> Y неравенство
переменной Y (X не равно Y)
!= X! = Y неравенство Значение переменной X не равно значению переменной Y
< X< Y меньше Значение переменной X меньше значения переменной Y
> X> Y больше Значение переменной X больше значения переменной Y
меньше или Значение переменной X меньше или равно значению
<= Х <= Y
равно переменной Y
больше или Значение переменной X больше или равно значению
>= X >= Y
равно переменной Y

См. также: If-Then-Else-EndIf, Repeat-Until, Select-Case, While-Wend.

Страница 21
http://terrarus.ucoz.ru/proton_plus_ide/proton/relation_operat/relation_operat.html
Логические операторы PROTON+

Boolean Logic Operators

Операторы булевой логики

В условных операторах If...Then...Else...EndIf, While...Wend, этой версии компилятора, можно использовать


логические операторы Not, And, Or и XOR.

Оператор Not это оператор противоположности (НЕ), он инвертирует результат и делает истину (True) ложью
или ложь (False) истиной. Пример 1 демонстрирует практическое применение оператора Not.

Пример 1.

Следующие две записи оператора проверки условия If...Then эквивалентны:

If VAR1 <> 100 Then NotEqual           ' Перейти к метке NotEqual (НЕ РАВНО), если VAR1 не равно
100.

If Not VAR1 = 100 Then NotEqual        ' Перейти к метке notEqual (НЕ РАВНО), если VAR1 не равно
100.

Оператор And (И) работает следующим образом:

         если и первое, и второе условие верны, то все утвержение верно (True);


         если же одно из условий неверно, то утверждение ложно (False).

Примеры 2.1 и 2.2 демонстрируют применение оператора And для проверки условия в операторе If...Then.

Пример 2.1.

If PORTB.0 = 0 And PORTB.1 = 0 Then LABEL1    '  если RB0 = 0 и RB1 = 0, то перейти к метке LABEL1

Пример 2.2.

Листинг программы buloperatops2_2.bas

' Сконфигурировать программу для микроконтроллера


Device = 16F876A
16F876A
Xtal = 4 ' Установить частоту кварцевого генератора равной 4 МГц.
Declare LCD_Type = 0 ' Использовать алфавитно-цифровой ЖКИ
' Использовать 4-разрядный интерфейс для подключения
Declare LCD_Interface = 4
ЖКИ
' Использовать RB4,RB5,RB6,RB7 для подключения
Declare LCD_DTPin = PORTB.4
D4,D5,D6,D7 (цепей данных) ЖКИ
Declare LCD_RSPin = PORTB.2 ' Подключение цепи RS ЖКИ
Declare LCD_ENPin = PORTB.3 ' Подключение цепи EN ЖКИ
Declare LCD_Lines = 2 ' Использовать 2-х строчный ЖКИ
' Установить паузы между передачей команд на ЖКИ
Declare LCD_CommandUs = 2000
равными 2000 микросекундам
' Установить паузы между передачей данных на ЖКИ
Declare LCD_DataUs = 50
равными 50 микросекундам
Dim VAR1 As Byte ' Объявление переменной VAR1 типа Byte
Dim VAR2 As Byte ' Объявление переменной VAR2 типа Byte
loop: ' Метка начала цикла
Cls ' Очистить дисплей
VAR1 = 5 ' Присвоить переменной VAR1 значение равное 5
VAR2 = 9 ' Присвоить переменной VAR2 значение равное равное 9
' Проверка условия: Если VAR1 = 5 и VAR2 = 10 то перейти
If VAR1 = 5 And VAR2 = 10 Then Res_True
к подпрограмме отмеченной меткой Res_True:
' В противном случае отобразить на дисплее надпись
Print At 1, 1, "RESULT IS FALSE"
"RESULT IS FALSE" (РЕЗУЛЬТАТ НЕ ВЕРЕН)
DelayMS 1000 ' Пауза 1 сек чтобы замедлить процесс
GoTo loop ' Перейти к метке loop:
Res_True: ' Начало подпрограммы Res_True:
' Отобразить на дисплее надпись "RESULT IS TRUE"
Print At 1, 1, "RESULT IS TRUE"
(РЕЗУЛЬТАТ ВЕРЕН)
Stop  

Примечание 1.

Страница 22
http://terrarus.ucoz.ru/proton_plus_ide/proton/buloperators/buloperators.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Логические операторы Boolean Logic Operators

В примере 2.2 условие "VAR1 = 5 И VAR2 = 10" не истинно, оно ложно (False), так как хотя VAR1 = 5, но
VAR2 не равно 10.

На рисунке 1 приведена действующая модель buloperators2_2.DSN, демонстрирующая совместную работу


операторов And и If...Then...Else...EndIf. Модель работает под управлением программы buloperators2_2.bas

GIF

DSN

Рис. 1. Действующая модель buloperators2_2.DSN.


Демонстрация применения оператора And для проверки условия оператором If...Then...Else...EndIf .
По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Оператор OR (ИЛИ) работает таким образом:

         если одно, или другое, или оба условия верны, то все утверждение верно (True);
         eсли же ни одно из условий неверно, то утверждение ложно (False).

Примеры 3.1 и 3.2 демонстрируют использование оператора OR для проверки условия в операторе If...Then.

Пример 3.1.

' Если RB0 = 0 или RB2 = 0, или одновременно RB0 = 0 и RB2


If PORTB.0 = 0 Or PORTB.2 = 0 Then LABEL2
= 0, то перейти к метке LABEL2;

Пример 3.2.

Листинг программы buloperatops3_2.bas

' Сконфигурировать программу для микроконтроллера


Device = 16F876A
16F876A
Xtal = 4 ' Установить частоту кварцевого генератора равной 4 МГц.
Declare LCD_Type = 0 ' Использовать алфавитно-цифровой ЖКИ
' Использовать 4-разрядный интерфейс для подключения
Declare LCD_Interface = 4
ЖКИ
' Использовать RB4,RB5,RB6,RB7 для подключения
Declare LCD_DTPin = PORTB.4
D4,D5,D6,D7 (цепей данных) ЖКИ
Declare LCD_RSPin = PORTB.2 ' Подключение цепи RS ЖКИ
Declare LCD_ENPin = PORTB.3 ' Подключение цепи EN ЖКИ
Declare LCD_Lines = 2 ' Использовать 2-х строчный ЖКИ
' Установить паузы между передачей команд на ЖКИ
Declare LCD_CommandUs = 2000
равными 2000 микросекундам
' Установить паузы между передачей данных на ЖКИ
Declare LCD_DataUs = 50
равными 50 микросекундам
Dim VAR1 As Byte ' Объявление переменной VAR1 типа Byte
Dim VAR2 As Word ' Объявление переменной VAR2 типа Word
loop: ' Метка начала цикла
Cls ' Очистить дисплей
VAR1 = 5 ' Присвоить переменной VAR1 значение равное 5
VAR2 = 9 ' Присвоить переменной VAR2 значение равное 9
' Проверка условия: Если VAR1 = 5 или VAR2 = 10 то
If VAR1 = 5 Or VAR2 = 10 Then Res_True

Страница 23
http://terrarus.ucoz.ru/proton_plus_ide/proton/buloperators/buloperators.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Логические операторы Boolean Logic Operators

перейти к подпрограмме отмеченной меткой Res_True:


' В противном случае отобразить на дисплее надпись
Print At 1, 1, "RESULT IS FALSE"
"RESULT IS FALSE" (РЕЗУЛЬТАТ НЕ ВЕРЕН)
DelayMS 1000 ' Пауза 1 сек чтобы замедлить процесс
GoTo loop ' Перейти к метке loop:
Res_True: ' Начало подпрограммы Res_True:
' Отобразить на дисплее надпись "RESULT IS TRUE"
Print At 1, 1, "RESULT IS TRUE"
(РЕЗУЛЬТАТ ВЕРЕН)
Stop  

Примечание 2.

В примере 3.2 условие "VAR1 = 5 ИЛИ VAR2 = 10" истинно (True), так как хотя VAR2 и не равно 10, но
VAR1 = 5

На рисунке 2 приведена действующая модель buloperators3_2.DSN, демонстрирующая совместную работу


операторов Or и If...Then...Else...EndIf. Модель работает под управлением программы buloperators3_2.bas

GIF

DSN

Рис. 2. Действующая модель buloperators3_2.DSN.


Демонстрация применения оператора Or для проверки условия оператором If...Then...Else...EndIf .
По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Оператор XOR (исключающее ИЛИ) работает так:

         если одно условие, или другое (но не оба одновременно) является истинным, то все утверждение верно
(True);
         если же оба условия неверны, или одновременно оба условия верны, то все утверждение ложно (False).

Пример 4 демонстрирует использование оператора XOR для проверки условия в операторе If...Then.

Пример 4.

If PORTB.0 = 0 XOR PORTB.3 = 0 Then ' Если RB0 = 0 или RB3 = 0, но не одновременно все они
LABEL3 равны нулю, то перейти к метке LABEL3;

Операторы And, Or и XOR в операторах проверки условий можно объединять попарно, для реализации более
сложных условий, например:

Пример 5.

If PORTB.0 = 0 And PORTB.1 = 0 XOR PORTB.4 = 0 Then LABEL4

If PORTB.0 = 0 And PORTB.1 = 0 Or PORTB.2 = 0 Then LABEL5

If PORTB.0 = 0 Or PORTB.1 = 0 XOR PORTB.2 = 0 Then LABEL6

Каждый компилятор работает по своим правилам, и компилятор Протона не является исключением. Одна из его
особенностей, что он поддерживает в операторах If...Then...Else...EndIf, While...Wend такой синтаксис:

If (VAR1 + 3) = 10 Then ....

Но такая запись:

If ((VAR1 + 3) = 10) Then ....

Страница 24
http://terrarus.ucoz.ru/proton_plus_ide/proton/buloperators/buloperators.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Логические операторы Boolean Logic Operators

не допускается.

Булевы операции имеют определенный приоритет. Операция And (И) имеет самый высокий приоритет, операция
Or (ИЛИ) более низкий, а операция XOR (исключающее ИЛИ) ещё более низкий. Это означает, что в такой
записи, как:

If VAR1 = 2 And VAR2 = 3 Or VAR3 = 4 Then ....

будет сначала выполнятся проверка равенства переменной VAR1 значению 2, и если это так, то следующей будет
выполнена проверка равенства переменной VAR2 значению 3. Если и это условие окажется верным, то будет
выполнена проверка условия определяемая оператором Or. При успешном выполнении всех проверок следующим
выполняется блок команд, расположенный после ключевого слова Then.

Если же, например, окажется, что переменная VAR1 не равна значению 2, то следующей будет выполнена
проверка условия равенства переменной VAR3 значению 4. То есть выполнение операции And будет прервано, и
сразу начнется выполнение операции Or

Страница 25
http://terrarus.ucoz.ru/proton_plus_ide/proton/buloperators/buloperators.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Mатематическая операция ADD V

Математические операции

ADD V

Оператор суммирования "+" (плюс)

Синтаксис:

Assignment Variable = Variable + Variable

Математический оператор "+" (плюс) суммирует значения переменных или констант. Он может выполнять
операции над числами имеющими различную разрядность - 8-битными, 16-битными, 32-битными, а также над
переменными с плавающей запятой. Результат помещается в переменную назначения - Assignment Variable

Assignment Variable- переменная назначения, она может быть любым действительным типом переменной:
Byte, Word, Dword, Float.

Variable - определяемые программистом константы или переменные, они могут быть постоянными,
переменными или выражениями.

Пример 1

' Прибавить к переменной Value2 типа Word переменную Value1 типа Word
Dim Value1 As Word ' Объявить переменную Value1 и её тип как Word
Dim Value2 As Word ' Объявить переменную Value2 и её тип как Word
Value1 = 100 ' Присвоить переменной Value1 значение равное 100
Value2 = 99 ' Присвоить переменной Value2 значение равное 99
' Прибавить к переменной Value2 переменную Value1 и результат поместить в
Value2 = Value2 + Value1
переменную Value2
Print DEC Value2 ' Отобразить результат на дисплее
Stop  

Пример 2

' Суммировать переменную Value2 типа DWord с переменной Value1 типа Word
Dim Value1 As Word ' Объявить переменную Value1 и её тип как Word
Dim Value2 As DWord ' Объявить переменную Value2 и её тип как DWord
Value1 = 1575 ' Присвоить переменной Value1 значение равное 1575
Value2 = 9763647 ' Присвоить переменной Value2 значение равное 9763647
' Прибавить к переменной Value2 переменную Value1 и результат поместить в
Value2 = Value2 + Value1
переменную Value2
Print DEC Value2 ' Отобразить результат на дисплее
Stop  

Пример 3

Прибавить к переменной FL2 типа Float переменную Value1 типа Word


Dim Value1 As Word ' Объявить переменную Value1 и её тип как Word
Dim FL2 As Float ' Объявить переменную FL2 и её тип как Float
Value1 = 1575 ' Присвоить переменной Value1 значение равное 1575
FL2 = 79345.357 ' Присвоить переменной FL2 значение равное 79345.357
' Прибавить к переменной FL2 переменную Value1 и результат поместить в
FL2 = FL2 + Value1
переменную FL2
Print DEC FL2 ' Отобразить результат на дисплее
Stop  

На рисунке 1 приведена действующая модель add_v.DSN, демонстрирующая работу математической операции +


(плюс) c переменными различных типов. Модель работает под управлением программы add_v.bas.

Листинг программы add_v.bas

Include "PROTON18_4.INC" '  Файл, подключаемый из внешней библиотеки подпрограмм


Device = 18F452 ' Необходимо использовать процессор с 16-разрядным ядром
Dim VR1 As Word ' Создать переменную VR1 типа Word
Dim VR2 As Word ' Создать переменную VR2 типа Word
Dim VD2 As DWord ' Создать переменную VD2 типа DWord
Dim FL2 As Float ' Создать переменную FL2 типа Float
main: ' Главная программа

Страница 26
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/add_v/add_v.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Mатематическая операция ADD V

'-----------Демонстрация сложения переменных типов Word и Word-----------


VR1 = 100 ' Присвоить VR1 значение равное 100
VR2 = 99 ' Присвоить VR2 значение равное 99
Cls '  Очистить экран ЖКИ
DelayMS 500 ' Пауза 0.5 сек
Print At 1, 1, "VR1 = ", Dec VR1 ' Отобразить на экране первоначальное значение VR1
DelayMS 500 ' Пауза 0.5 сек
Print At 2, 1, "VR2 = ", Dec VR2 ' Отобразить на экране первоначальное значение VR2
DelayMS 500 ' Пауза 0.5 сек
Print At 3, 1, "VR2 = VR2 + VR1" ' Вывести надпись "VR2 = VR2 + VR1"
VR2 = VR2 + VR1 ' Прибавить к значению VR2 значение VR1 и результат поместить в VR2
DelayMS 500 ' Пауза 0.5 сек
Print At 4, 1, "VR2 = ", Dec VR2 ' Отобразить результат
DelayMS 5000 ' Пауза 5 сек
'-----------Демонстрация сложения переменных типов DWord и Word-----------
VR1 = 1575 ' Присвоить VR1 значение равное 1575
VD2 = 9763647 ' Присвоить VD2 значение равное 9763647
Cls '  Очистить экран ЖКИ
DelayMS 500 ' Пауза 0.5 сек
Print At 1, 1, "VR1 = ", Dec VR1 ' Отобразить на экране первоначальное значение VR1
DelayMS 500 ' Пауза 0.5 сек
Print At 2, 1, "VD2 = ", Dec VD2 ' Отобразить на экране первоначальное значение VD2
DelayMS 500 ' Пауза 0.5 сек
Print At 3, 1, "VD2 = VD2 + VR1" ' Вывести надпись "VD2 = VD2 + VR1"
VD2 = VD2 + VR1 ' Прибавить к значению VD2 значение VR1 и результат поместить в VD2
DelayMS 500 ' Пауза 0.5 сек
Print At 4, 1, "VD2 = ", Dec VD2 ' Отобразить результат
DelayMS 5000 ' Пауза 5 сек
'-----------Демонстрация сложения переменных типов Float и Word -----------
VR1 = 1575 ' Присвоить VR1 значение равное 1575
FL2 = 79345.357 ' Присвоить FL2 значение равное 79345.357
Cls '  Очистить экран ЖКИ
DelayMS 500 ' Пауза 0.5 сек
Print At 1, 1, "VR1 = ", Dec VR1 ' Отобразить на экране первоначальное значение VR1
DelayMS 500 ' Пауза 0.5 сек
Print At 2, 1, "FL2 = ", Dec FL2 ' Отобразить на экране первоначальное значение FL2
DelayMS 500 ' Пауза 0.5 сек
Print At 3, 1, "FL2 = FL2 + VR1" ' Вывести надпись "FL2 = FL2 + VR1"
FL2 = FL2 + VR1 ' Прибавить к значению FL2 значение VR1 и результат поместить в FL2
DelayMS 500 ' Пауза 0.5 сек
Print At 4, 1, "FL2 = ", Dec FL2 ' Отобразить результат
DelayMS 5000 ' Пауза 5 сек
Goto main  

Страница 27
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/add_v/add_v.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Mатематическая операция ADD V

GIF

DSN

Рис. 1. Действующая модель add_v.DSN демонстрирующая работу математической операции ADD V.


По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Страница 28
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/add_v/add_v.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция DIVIDE V

Математические операции

DIVIDE V

Оператор деления "/"

Assignment Variable = Variable / Variable

Математический оператор "/" выполняет операцию деления переменных или констант. Он может выполнять
операции над числами имеющими различную разрядность: 8-битными, 16-битными, 32-битными, а также над
переменными с плавающей запятой. Результат помещается в переменную назначения - Assignment Variable

Assignment Variable- переменная назначения, она может быть любым действительным типом переменной:
Byte, Word, Dword, Float.

Variable - переменные, которые могут быть постоянными, переменными или выражениями.

Операция деления может осуществляться над числами в диапазоне от -2147483648 до +2147483647, а также над
дробными числами с точностью до третьего знака после запятой (см. рис.1).

Пример 1

'------------------------------------------' Деление 16-разрядных чисел-------------------------------------------


Dim VR1 As Word ' Обьявление переменной типа Word
Dim VR2 As Word ' Обьявление переменной типа Word
VR1 = 1000 ' Присвоить переменной VR1 значение равное 1000
VR2 = 5 ' Присвоить переменной VR2 значение равное 5
VR1 = VR1 / VR2 ' Выполнить операцию деления
Print Dec VR1 ' Отобразить результат VR1=200

Пример 2

'------------------------------------------' Деление 32-разрядных чисел-------------------------------------------


Dim VR1 As Word ' Обьявление переменной типа Word
Dim VR2 As DWord ' Обьявление переменной типа DWord
VR1 = 100 ' Присвоить переменной VR1 значение равное 100
VR2 = 10000 ' Присвоить переменной VR2 значение равное 10000
VR1 = VR2 / VR1 ' Выполнить операцию деления
Print Dec VR1 ' Отобразить результат VR1=100

На рисунке 1 приведена модель divide_v.DSN, демонстрирующая работу математической операции деления 16 и


32-битных чисел. Модель работает под управлением программы divide_v.bas.

GIF

DSN

Рис. 1. Действующая модель divide_v.DSN демонстрирующая работу операции деления.


По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Листинг программы divide_v.bas

Страница 29
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/divide_v/divide_v.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция DIVIDE V

Include "PROTON18_4.INC" '  Файл подключаемый из внешней библиотеки подпрограмм


Device = 18F452 ' Необходимо использовать процессор с 16-разрядным ядром
'------------------------------------------------' Обьявление переменных ------------------------------------------------
Dim VR1 As Word ' Объявление переменной типа Word
Dim VR2 As Word ' Объявление переменной типа Word
Dim VD2 As DWord ' Объявление переменной типа DWord
Dim FL1 As Float ' Объявление переменной типа Float
Dim FL2 As Float ' Объявление переменной типа Float
main:  Основная программа
'-------------------------------' Демонстрация операции деления 16-разрядных чисел--------------------------------
Cls '  Очистить экран ЖКИ
VR1 = 1000 ' Присвоить переменной VR1 значение равное 1000
VR2 = 5 ' Присвоить переменной VR2 значение равное 5
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
Print At 1,1, "VR1 = ", Dec VR1 ' Отобразить первоначальное значение VR1=1000
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
Print At 2,1, "VR2 = ", Dec VR2 ' Отобразить первоначальное значение VR2=5
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
VR1 = VR1 / VR2 ' Выполнить операцию деления
Print At 3,1, "VR1 = VR1 / VR2" ' Отобразить надпись VR1 = VR1 / VR2
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
Print At 4,1, "VR1 = ", Dec VR1 ' Отобразить результат VR1 = 200
DelayMS 6000 ' Пауза 6 сек чтобы замедлить процесс
'-------------------------------' Демонстрация операции деления 32-разрядных чисел--------------------------------
Cls '  Очистить экран ЖКИ
VR1 = 1000 ' Присвоить переменной VR1 значение равное 1000
VD2 = 2121212000 ' Присвоить переменной VD2 значение равное 2121212000
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
Print At 1,1, "VR1 = ", Dec VR1 ' Отобразить первоначальное значение VR1=1000
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
Print At 2,1, "VD2 = ", Dec VD2 ' Отобразить первоначальное значение VD2=2121212000
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
VD2 = VD2 / VR1 ' Выполнить операцию деления
Print At 3,1, "VD2 = VD2 / VR1" ' Отобразить надпись VD2 = VD2 / VR1
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
Print At 4,1, "VD2 = ", Dec VD2 ' Отобразить результат VD2 = 2121212
DelayMS 6000 ' Пауза 6 сек чтобы замедлить процесс
'-------------------------' Демонстрация операции деления чисел с плавающей запятой--------------------------
Cls '  Очистить экран ЖКИ
FL1 = 1.5 ' Присвоить переменной FL1 значение равное 1.5
FL2 = 90000.5 ' Присвоить переменной FL2 значение равное 90000.5
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
Print At 1,1, "FL1 = ", Dec FL1 ' Отобразить первоначальное значение FL1=1.5
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
Print At 2,1, "FL2 = ", Dec FL2 ' Отобразить первоначальное значение VD2=90000.5
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
FL2 = FL2 / FL1 ' Выполнить операцию деления
Print At 3,1, "FL2 = FL2 / FL1 " ' Отобразить надпись FL2 = FL2 / FL1
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
Print At 4,1, "FL2 = ", Dec FL2 ' Отобразить результат FL2 = 60000.333 (см. рис.1)
DelayMS 6000 ' Пауза 6 сек чтобы замедлить процесс
Goto main ' Повторить весь процесс

Страница 30
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/divide_v/divide_v.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция MODULUS '//'

Математические операции

MODULUS  '//'

Синтаксис

Assignment Variable = Variable // Variable

Оператор MODULUS  '//' возвращает только остаток получившийся после деления одного значения на другое.

Например, в обычной математике при делении 1000 / 6 = 166,667 получается результат с дробной частью.
Целочисленная математика оперирует только с целыми числами и поэтому часть результата будет потеряна.
Следовательно при делении 1000 / 6 = 166, а получивщийся остаток будет отброшен. Тем не менее, 166
представляет собой приблизительный результат, потому что 166 * 6 = 996. Оператор MODULUS  '//' возвратит
остаток равный 4.

Assignment Variable - переменная назначения, которая может иметь любой действительный тип переменной.

Variable - переменные, которые могут быть постоянными, переменными или выражениями.

Пример 1

Dim Value1 As Word ' Объявить переменную Value1 типа Word


Dim Value2 As Word ' Объявить переменную Value2 типа Word
Value1 = 1000 ' Присвоить переменной Value1 значение равное 1000
Value2 = 6 ' Присвоить переменной Value2 значение равное 6
Value1 = Value1 // Value2 ' Получить остаток от деления Value1 на Value2.
Print Dec Value1 ' Отобразить остаток равный 4.

При делении чисел которые делятся без остатка, оператор MODULUS  '//' возвращает 0.

Пример 2

Dim Value1 As Word ' Объявить переменную Value1 типа Word


Dim Value2 As Word ' Объявить переменную Value2 типа Word
Value1 =1000 ' Присвоить переменной Value1 значение равное 1000
Value2 = 5 ' Присвоить переменной Value1 значение равное 5
Value1 = Value1 // Value2 ' Получить остаток от деления Value1 на Value2.
Print Dec Value1 ' Отобразить остаток равный 0.

Пример 3

'--------------------------------Деление 32-разрядных чисел------------------------------


Dim Value1 As Word ' Объявить переменную Value1 типа Word
Dim Value2 As DWord ' Объявить переменную Value2 типа DWord
Value1 =100 ' Присвоить переменной Value1 значение равное 100
Value2 = 99999 ' Присвоить переменной Value2 значение равное 99999
Value2 = Value2 // Value1 '  Получить остаток от деления Value2 на Value1
Print Dec Value2 '  Отобразить остаток равный 99

На рисунке 1 приведена модель modulus.DSN, демонстрирующая работу операции извлечения остатка


MODULUS  '//' от деления 16 и 32-битных чисел. Модель работает под управлением программы modulus.bas.

Страница 31
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/modulus/modulus.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция MODULUS '//'

GIF

DSN

Рис. 1. Действующая модель modulus.DSN, демонстрирующая работу операции MODULUS  '//'.


По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Листинг программы modulus.bas

Include "PROTON18_4.INC" '  Файл подключаемый из внешней библиотеки подпрограмм


Device = 18F452 ' Необходимо использовать процессор с 16-разрядным ядром
'----------------------------------------------' Обьявление переменных ----------------------------------------------
Dim VR1 As Word ' Объявление переменной типа Word
Dim VR2 As Word ' Объявление переменной типа Word
Dim VD2 As DWord ' Объявление переменной типа DWord
main:  Основная программа
'----------------' Демонстрация операции извлечения остатка от деления 16-разрядных чисел----------------
Cls '  Очистить экран ЖКИ
VR1 = 1000 ' Присвоить переменной VR1 значение равное 1000
VR2 = 6 ' Присвоить переменной VR2 значение равное 6
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
Print At 1,1, "VR1 = ", Dec VR1 ' Отобразить первоначальное значение VR1 = 1000
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
Print At 2,1, "VR2 = ", Dec VR2 ' Отобразить первоначальное значение VR2 = 6
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
VR1 = VR1 // VR2 ' Выполнить операцию извлечения остатка от деления VR1 на VR2
Print At 3,1, "VR1 = VR1 // VR2" ' Отобразить надпись VR1 = VR1 // VR2
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
Print At 4,1, "VR1 = ", Dec VR1 ' Отобразить результат VR1 = 4
DelayMS 6000 ' Пауза 6 сек чтобы замедлить процесс
'-------' Демонстрация извлечения остатка от деления 16-разрядных чисел делящихся без остатка -------
Cls '  Очистить экран ЖКИ
VR1 = 1000 ' Присвоить переменной VR1 значение равное 1000
VR2 = 5 ' Присвоить переменной VR2 значение равное 5
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
Print At 1,1, "VR1 = ", Dec VR1 ' Отобразить первоначальное значение VR1 = 1000
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
Print At 2,1, "VR2 = ", Dec VR2 ' Отобразить первоначальное значение VR2 = 5
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
VR1 = VR1 // VR2 ' Выполнить операцию извлечения остатка от деления VR1 на VR2
Print At 3,1, "VR1 = VR1 // VR2" ' Отобразить надпись VR1 = VR1 // VR2
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс

Страница 32
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/modulus/modulus.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция MODULUS '//'

Print At 4,1, "VR1 = ", Dec VR1 ' Отобразить результат VR1 = 0


DelayMS 6000 ' Пауза 6 сек чтобы замедлить процесс
'----------------' Демонстрация операции извлечения остатка от деления 32-разрядных чисел----------------
Cls '  Очистить экран ЖКИ
VR1 = 100 ' Присвоить переменной VR1 значение равное 100
VD2 = 99999 ' Присвоить переменной VR2 значение равное 99999
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
Print At 1,1, "VR1 = ", Dec VR1 ' Отобразить первоначальное значение VR1 = 100
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
Print At 2,1, "VD2 = ", Dec VD2 ' Отобразить первоначальное значение VD2 = 99999
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
VD2 = VD2 // VR1 ' Выполнить операцию извлечения остатка от деления
Print At 3,1, "VD2 = VD2 // VR1" ' Отобразить надпись VD2 = VD2 // VR1
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
Print At 4,1, "VD2 = ", Dec VD2 ' Отобразить результат VD2 = 99
DelayMS 6000 ' Пауза 6 сек чтобы замедлить процесс

Примечание 2

Оператор MODULUS  '//' не работает с числами с плавающей запятой или дробными значениями


переменных.

Страница 33
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/modulus/modulus.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция MULTIPLY

Математические операции

MULTIPLY '*'

Оператор умножения '*'

Assignment Variable = Variable * Variable

Математический оператор '*' производит перемножение двух переменных или констант. Результат помещается в
переменную назначения - Assignment Variable

Assignment Variable- переменная назначения, она может быть любым действительным типом переменной:
Byte, Word, Dword, Float.

Variable - переменные, могут быть постоянными, переменными или выражениями.

Оператор умножения '*' может выполнять операции над числами в диапазоне от -2147483648 до +2147483647
имеющими различную разрядность - 8-битными, 16-битными, 32-битными или над числами с плавающей запятой.
Если при перемножении 32-разрядных переменных результат умножения получится больше чем 2147483647, то
лишние биты произведения будут утеряны.

Пример 1

' Перемножение переменной Value1 типа Word и переменной Value1 типа Word
Dim Value1 As Word ' Объявить переменную Value1 и её тип как Word
Dim Value2 As Word ' Объявить переменную Value2 и её тип как Word
Value1 = 1000 ' Присвоить переменной Value1 значение равное 1000
Value2 = 19 ' Присвоить переменной Value2 значение равное 19
Value2 = Value2 * Value1 ' Перемножить Value2 и Value1 и результат поместить в Value2
Print DEC Value2 '  Отобразить результат на дисплее
Stop  

Пример 2

' Перемножение переменной Value2 типа DWord и переменной Value1 типа Word
Dim Value1 As Word ' Объявить переменную Value1 и её тип как Word
Dim Value2 As DWord ' Объявить переменную Value2 и её тип как DWord
Value1 = 100 ' Присвоить переменной Value1 значение равное 100
Value2 = 10000 ' Присвоить переменной Value2 значение равное 10000
Value2 = Value2 * Value1 ' Перемножить Value2 и Value1 и результат поместить в Value2
Print DEC Value2 '  Отобразить результат на дисплее
Stop  

Пример 3

' Перемножение переменной FL2 типа Float и переменной Value1 типа Word


Dim Value1 As Word ' Объявить переменную Value1 и её тип как Word
Dim FL2 As Float ' Объявить переменную FL2 и её тип как Float
Value1 = 100 ' Присвоить переменной Value1 значение равное 100
FL2 = 79345.357 ' Присвоить переменной FL2 значение равное 79345.357
FL2 = FL2 * Value1 ' Перемножить FL2 и Value1 и результат поместить в FL2
Print DEC FL2 '  Отобразить результат на дисплее
Stop  

Пример 4

' Перемножение двух переменных типа Float


Dim FL1 As Float ' Объявить переменную FL1 и её тип как Float
Dim FL2 As Float ' Объявить переменную FL2 и её тип как Float
FL1 = 0.5 ' Присвоить переменной FL1 значение равное 0.5
FL2 = 50000.5 ' Присвоить переменной FL2 значение равное 50000.5
FL2 = FL2 * FL1 ' Перемножить FL2 и FL1 и результат поместить в FL2
Print DEC FL2 '  Отобразить результат на дисплее
Stop  

На рисунке 1 приведена действующая модель multiply.DSN демонстрирующая работу математической операции


умножения '*'над переменными разного типа. Модель работает под управлением программы multiply.bas.

Листинг программы multiply.bas

Страница 34
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/multiply/multiply.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция MULTIPLY

' Подключаемый из внешней библиотеки подпрограмм файл содержит


Include "PROTON18_4.INC"
типовые настройки ЖКИ и использует по умолчанию процессор 18F452
Dim VR1 As Word ' Объявить переменную VR1 типа Word
Dim VR2 As Word ' Объявить переменную VR2 типа Word
Dim VD2 As DWord ' Объявить переменную VD2 типа DWord
Dim FL1 As Float ' Объявить переменную FL1 типа Float
Dim FL2 As Float ' Объявить переменную FL2 типа Float
main: ' Главная программа
'-----------Демонстрация перемножения переменных типов Word и Word-----------
VR1 = 1000 ' Присвоить VR1 значение равное 1000
VR2 = 19 ' Присвоить VR2 значение равное 19
Cls '  Очистить экран ЖКИ
DelayMS 500 ' Пауза 0.5 сек
Print At 1, 1, "VR1 = ", Dec VR1 ' Отобразить на экране первоначальное значение VR1
DelayMS 500 ' Пауза 0.5 сек
Print At 2, 1, "VR2 = ", Dec VR2 ' Отобразить на экране первоначальное значение VR2
DelayMS 500 ' Пауза 0.5 сек
Print At 3, 1, "VR2 = VR2 * VR1" ' Вывести на ЖКИ надпись "VR2 = VR2 * VR1"
VR2 = VR2 * VR1 ' Перемножить значения VR2 и VR1 и результат поместить в VR2
DelayMS 500 ' Пауза 0.5 сек
Print At 4, 1, "VR2 = ", Dec VR2 ' Отобразить результат
DelayMS 5000 ' Пауза 5 сек
'-----------Демонстрация перемножения переменных типов DWord и Word-----------
VR1 = 100 ' Присвоить VR1 значение равное 100
VD2 = 10000 ' Присвоить VD2 значение равное 10000
Cls '  Очистить экран ЖКИ
DelayMS 500 ' Пауза 0.5 сек
Print At 1, 1, "VR1 = ", Dec VR1 ' Отобразить на экране первоначальное значение VR1
DelayMS 500 ' Пауза 0.5 сек
Print At 2, 1, "VD2 = ", Dec VD2 ' Отобразить на экране первоначальное значение VD2
DelayMS 500 ' Пауза 0.5 сек
Print At 3, 1, "VD2 = VD2 * VR1" ' Вывести на ЖКИ надпись "VD2 = VD2 * VR1"
VD2 = VD2 * VR1 ' Перемножить значения VD2 и VR1 и результат поместить в VD2
DelayMS 500 ' Пауза 0.5 сек
Print At 4, 1, "VD2 = ", Dec VD2 ' Отобразить результат
DelayMS 5000 ' Пауза 5 сек
'---------------Демонстрация перемножения переменных типа Float ---------------
FL1 = 0.5 ' Присвоить FL1 значение равное 0.5
FL2 = 50000.5 ' Присвоить FL2 значение равное 50000.5
Cls '  Очистить экран ЖКИ
DelayMS 500 ' Пауза 0.5 сек
Print At 1, 1, "FL1 = ", Dec FL1 ' Отобразить на экране первоначальное значение FL1
DelayMS 500 ' Пауза 0.5 сек
Print At 2, 1, "FL2 = ", Dec FL2 ' Отобразить на экране первоначальное значение FL2
DelayMS 500 ' Пауза 0.5 сек
Print At 3, 1, "FL2 = FL2 * FL1" ' Вывести надпись "FL2 = FL2 * FL1"
FL2 = FL2 * FL1 ' Перемножить значения FL2 и FL1 и результат поместить в FL2
DelayMS 500 ' Пауза 0.5 сек
Print At 4, 1, "FL2 = ", Dec FL2 ' Отобразить результат
DelayMS 5000 ' Пауза 5 сек
Goto main  

Страница 35
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/multiply/multiply.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция MULTIPLY

GIF

DSN

Рис. 1. Действующая модель multiply.DSN демонстрирующая работу математической операции умножения '*'.
По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Страница 36
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/multiply/multiply.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция MULTIPLY HIGH '**'

Математические операции

MULTIPLY HIGH '**'

Синтаксис

Assignment Variable = Variable ** Variable

Эта операция перемножает 8- или 16-разрядные переменные и/или константы и возвращает старшие 16 бит
произведения.

Assignment Variable- переменная назначения, она может быть любым действительным типом переменной:
Byte, Word, Dword, Float.

Variable - переменные, могут быть постоянными, переменными или выражениями.

При перемножении двух 16-разрядных чисел в результате получается 32-разрядное число. Но значение этого
числа может превысить максимально допустимое - 2147483647. А это значит, что результат будет искажен в связи
с утратой части информации в 16 старших битах 32-разрядного числа. Оператор же MULTIPLY HIGH '**' (** -
двойная звездочка) правильно возвращает эти старшие 16 разрядов.

Например, предположим, что число 65000 ($FDE8) умножается само на себя. В результате будет получено число 4
225 000 000 или $FBD4 6240. Обычная операция умножения MULTIPLY '*' (* одна звездочка), возвратит
младшие 16 бит. В нашем случае это будет шестнадцатеричное число $6240. А оператор MULTIPLY HIGH '**'
(** - двойная звездочка) возвратит старшие 16 бит со значением равным $FBD4. Таким образом, в некоторых
случаях, можно обойти ограничения связанные с максимально допустимым числом 2147483647.

Пример

Dim Value1 As Word ' Объявить переменную Value1 и её тип как Word


Dim Value2 As Word ' Объявить переменную Value2 и её тип как Word
Value1 = 65000 ' Присвоить переменной Value1 значение равное 65000 ($FDE8)
' ' Перемножить переменную VR1 саму на себя оператором MULTIPLY HIGH '**' и
Value2 = Value1 ** Value1
старшие 16 бит результата поместить в переменную Value2
Print DEC Value2 '  Отобразить на дисплее содержимое старших 16 бит произведения
Stop  

Примечание 1

Оператор MULTIPLY HIGH '**' был введен в Бейсик-ПРОТОН для того, чтобы обеспечить совместимость с
программами, написанными в предыдущих версиях языка Вasic для PIC-микроконтроллеров. Но он уже
устарел, а у операторов PROTON+IDE появились новые возможности которые позволяют его компилятору
превосходно работать с 32-разрядными числами.

На рисунке 1 приведена действующая модель multiply_high.DSN, демонстрирующая работу математической


операции MULTIPLY HIGH '**'. Модель работает под управлением программы multiply_high.bas.

Листинг программы multiply_high.bas

Include "PROTON18_4.INC" '  Файл подключаемый из внешней библиотеки подпрограмм


Device = 18F452 ' Необходимо использовать процессор с 16-разрядным ядром
Dim VR1 As Word ' Создать переменную VR1 типа Word
Dim VR2 As Word ' Создать переменную VR2 типа Word
main: ' Главная программа
VR1 = 65000 ' Присвоить VR1 значение равное 65000 ($FDE8)
'--------Демонстрация операции умножения MULTIPLY HIGH '**' (двойная звездочка)--------
Cls '  Очистить экран ЖКИ
Print At 1, 1, "MULTIPLY HIGH ' Отобразить на ЖКИ надпись MULTIPLY HIGH '**'
'**'"
DelayMS 500 ' Пауза 0.5 сек
Print At 2, 1, "VR1= ", HEX ' Отобразить на экране первоначальное значение VR1
VR1, " VR1= ", Dec VR1
DelayMS 500 ' Пауза 0.5 сек
Print At 3, 1, "VR2= VR1 ** ' Отобразить на ЖКИ надпись VR2= VR1 ** VR1
VR1"
VR2 = VR1 ** VR1 ' Перемножить переменную VR1 саму на себя оператором MULTIPLY HIGH '**'
и старшие 16 бит результата поместить в переменную VR2
DelayMS 500 ' Пауза 0.5 сек
Print At 4, 1, "VR2= ", HEX ' Отобразить на дисплее результат в шестнадцатеричном виде
VR2
DelayMS 6000 ' Пауза 6 сек
Страница 37
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/multiply_high/multiply_high.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция MULTIPLY HIGH '**'

'-----------Демонстрация операции умножения MULTIPLY '*' (одна звездочка)-----------


Cls '  Очистить экран ЖКИ
DelayMS 500 ' Пауза 0.5 сек
Print At 1, 1, "MULTIPLY '*'" ' Отобразить на ЖКИ надпись MULTIPLY '*'
DelayMS 500 ' Пауза 0.5 сек
Print At 2, 1, "VR1= ", HEX ' Отобразить на экране первоначальное значение VR1
VR1, " VR1= ", Dec VR1
DelayMS 500 ' Пауза 0.5 сек
Print At 3, 1, "VR2= VR1 * ' Вывести на ЖКИ надпись "VR2 = VR1 * VR1"
VR1"
VR2 = VR1 * VR1 ' Перемножить переменную VR1 саму на себя оператором MULTIPLY HIGH '*'
и младшие 16 бит результата поместить в переменную VR2
DelayMS 500 ' Пауза 0.5 сек
Print At 4, 1, "VR2= ", HEX ' Отобразить на дисплее результат в шестнадцатеричном виде
VR2
DelayMS 6000 ' Пауза 6 сек
Goto main  

GIF

DSN

Рис. 1. Действующая модель multiply_high.DSN, демонстрирующая работу


математической операции MULTIPLY HIGH '**'.
По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Страница 38
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/multiply_high/multiply_high.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция MULTIPLY MIDDLE '*/'

Математические операции

MULTIPLY MIDDLE '*/'

Синтаксис

Assignment Variable = Variable */ Variable

Эта операция производит перемножение переменных и/или констант и возвращает средние 16 бит 32-разрядного
произведения.

Assignment Variable- переменная назначения, она может быть любым действительным типом переменной:
Byte, Word, Dword, Float.

Variable - переменные, могут быть постоянными, переменными или выражениями.

Оператор MULTIPLY MIDDLE '*/' производит умножение не целыми числами, а их частями. Поясним это на
примере:

Предположим, необходимо умножить какое-то число на другое число равное 1,5.

В этом множителе есть целая часть числа, которая помещается в старшие 8 разрядов, и поэтому старшие 8
разрядов числа будут содержать множитель 1, и есть младшие 8 разрядов, в которые помещается дробная часть
равная 128 поскольку 128/256 = 0,5.

Это можно записать так: 1,5 = [1 + (128/256)]

Ещё яснее это можно представить себе, если рассмотреть как сохраняются шестнадцатеричные числа в памяти
микроконтроллера, поскольку содержимое шестнадцатеричных чисел сохраняется в старших и младших байтах
отдельно.

Десятичное число 1,5 в шестнадцатеричном представлении можно записать следующим образом - $0180, где в
старшем байте содержится целая часть числа -$01, а в младшем байте его дробная часть - $80.

Пример

Dim Value1 As Word ' Объявить переменную Value1 и её тип как Word


Value1 = 100 ' Присвоить переменной Value1 значение равное 100
Value1 = Value1 * / $0180 ' Умножить Value1 на 1,5 [1 + (128/256)]
Print Dec Value1 ' Отобразить результат который будет равен 150.
Stop  

Если вы желаете использовать в операторе MULTIPLY MIDDLE '*/' различные константы, такие например, как
Pi, необходимо представить в шестнадцатеричном коде их целые и дробные части. То есть так же, как и в
приведенном выше примере, где было представлено десятичное число 1,5.

Например, если принять Pi = 3,14159, то в старшем байте шестнадцатеричного числа будет размещаться его
целая часть равная $03, а младшем - $ 24, что эквивалентно [(0,14159 * 256) = 36].

Таким образом, константа Pi при использования с операцией MULTIPLY MIDDLE '*/', будет записана следующим
образом -$0324. Такая точность определения Pi не идеально подходит для использования в математических
расчетах выполняемых PIC-микроконтроллерами, но погрешность его представления, таким образом, составляет
лишь около 0,1%.

Примечания

Оператор MULTIPLY MIDDLE '*/' был введен в Basic-PROTON для того, чтобы обеспечить совместимость с
программами, написанными в предыдущих версиях языка Вasic для PIC-микроконтроллеров. Но он уже
устарел с учетом новых возможностей языка PROTON+IDE работать с 32-разрядными числами.

Страница 39
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/multiply_middle/multiply_middle.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Mатематическая операция SUBTRACT "-"

Математические операции

SUBTRACT "-"

Оператор вычитания "-"

Синтаксис

Assignment Variable = Variable - Variable

Математический оператор "-" производит операцию вычитания из содержимого одной переменной содержимое
другой переменной или константы. Он может выполнять операцию вычитания над числами имеющими различную
разрядность - 8-битную, 16-битную, 32-битную или над переменными с плавающей запятой. Результат
помещается в переменную назначения - Assignment Variable

Assignment Variable- переменная назначения, она может быть любым действительным типом переменной:
Byte, Word, Dword, Float.

Variable - переменные, могут быть постоянными, переменными или выражениями.

Пример 1

' Вычесть из переменной Value2 типа Word переменную Value1 типа Word
Dim Value1 As Word ' Объявить переменную Value1 и её тип как Word
Dim Value2 As Word ' Объявить переменную Value2 и её тип как Word
Value1 = 101 ' Присвоить переменной Value1 значение равное 101
Value2 = 150 ' Присвоить переменной Value2 значение равное 150
Value2 = Value2 - Value1 ' Вычесть из Value2 Value1 и результат поместить в Value2
Print DEC Value2 ' Отобразить результат на дисплее
Stop  

Пример 2

' Вычесть из переменной Value2 типа DWord переменную Value1 типа Word
Dim Value1 As Word ' Объявить переменную Value1 и её тип как Word
Dim Value2 As DWord ' Объявить переменную Value2 и её тип как DWord
Value1 = 64647 ' Присвоить переменной Value1 значение равное 64647
Value2 = 9763647 ' Присвоить переменной Value2 значение равное 9763647
Value2 = Value2 - Value1 ' Вычесть из Value2 Value1 и результат поместить в Value2
Print DEC Value2 ' Отобразить результат на дисплее
Stop  

Пример 3

' Вычесть из переменной FL2 типа Float переменную Value1 типа Word
Dim Value1 As Word ' Объявить переменную Value1 и её тип как Word
Dim FL2 As Float ' Объявить переменную FL2 и её тип как Float
Value1 = 1575 ' Присвоить переменной Value1 значение равное 100
FL2 = 79345.357 ' Присвоить переменной FL2 значение равное 79345.357
FL2 = FL2 - Value1 ' Вычесть из FL2 Value1 и результат поместить в FL2
Print Dec FL2 ' Отобразить результат на дисплее
Stop  

На рисунке 1 приведена действующая модель subtract.DSN, демонстрирующая работу математической операции


вычитания "-" c переменными разного типа. Модель работает под управлением программы subtract.bas.

Листинг программы subtract.bas

'  Файл подключаемый из внешней библиотеки подпрограмм содержит все


Include "PROTON18_4.INC"
нужные настройки ЖКИ
Device = 18F452 ' Необходимо использовать процессор с 16-разрядным ядром
Dim VR1 As Word ' Создать переменную VR1 типа Word
Dim VR2 As Word ' Создать переменную VR2 типа Word
Dim VD2 As DWord ' Создать переменную VВ2 типа DWord
Dim FL2 As Float ' Создать переменную FL2 типа Float
main: ' Главная программа
'-----------Демонстрация вычитания переменных типов Word и Word-----------
VR1 = 101 ' Присвоить VR1 значение равное 101

Страница 40
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/subtract/subtract.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Mатематическая операция SUBTRACT "-"

VR2 = 150 ' Присвоить VR2 значение равное 150


Cls '  Очистить экран ЖКИ
DelayMS 500 ' Пауза 0.5 сек
Print At 1, 1, "VR1 = ", Dec VR1 ' Отобразить на экране первоначальное значение VR1
DelayMS 500 ' Пауза 0.5 сек
Print At 2, 1, "VR2 = ", Dec VR2 ' Отобразить на экране первоначальное значение VR2
DelayMS 500 ' Пауза 0.5 сек
Print At 3, 1, "VR2 = VR2 - VR1" ' Вывести надпись "VR2 = VR2 - VR1"
VR2 = VR2 - VR1 ' Вычесть из значения VR2 значение VR1 и результат поместить в VR2
DelayMS 500 ' Пауза 0.5 сек
Print At 4, 1, "VR2 = ", Dec VR2 ' Отобразить результат
DelayMS 5000 ' Пауза 5 сек
'-----------Демонстрация вычитания переменных типов DWord и Word-----------
VR1 = 64647 ' Присвоить VR1 значение равное 64647
VD2 = 9763647 ' Присвоить VD2 значение равное 9763647
Cls '  Очистить экран ЖКИ
DelayMS 500 ' Пауза 0.5 сек
Print At 1, 1, "VR1 = ", Dec VR1 ' Отобразить на экране первоначальное значение VR1
DelayMS 500 ' Пауза 0.5 сек
Print At 2, 1, "VD2 = ", Dec VD2 ' Отобразить на экране первоначальное значение VD2
DelayMS 500 ' Пауза 0.5 сек
Print At 3, 1, "VD2 = VD2 - VR1" ' Вывести надпись "VD2 = VD2 - VR1"
VD2 = VD2 - VR1 ' Вычесть из значения VD2 значение VR1 и результат поместить в VD2
DelayMS 500 ' Пауза 0.5 сек
Print At 4, 1, "VD2 = ", Dec VD2 ' Отобразить результат
DelayMS 5000 ' Пауза 5 сек
'-----------Демонстрация вычитания переменных типов Float и Word -----------
VR1 = 1575 ' Присвоить VR1 значение равное 1575
FL2 = 79345.357 ' Присвоить FL2 значение равное 79345.357
Cls '  Очистить экран ЖКИ
DelayMS 500 ' Пауза 0.5 сек
Print At 1, 1, "VR1 = ", Dec VR1 ' Отобразить на экране первоначальное значение VR1
DelayMS 500 ' Пауза 0.5 сек
Print At 2, 1, "FL2 = ", Dec FL2 ' Отобразить на экране первоначальное значение FL2
DelayMS 500 ' Пауза 0.5 сек
Print At 3, 1, "FL2 = FL2 - VR1" ' Вывести надпись "FL2 = FL2 - VR1"
FL2 = FL2 - VR1 ' Вычесть из значения FL2 значение VR1 и результат поместить в FL2
DelayMS 500 ' Пауза 0.5 сек
Print At 4, 1, "FL2 = ", Dec FL2 ' Отобразить результат
DelayMS 5000 ' Пауза 5 сек
Goto main  

Страница 41
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/subtract/subtract.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Mатематическая операция SUBTRACT "-"

GIF

DSN

Рис. 1. Действующая модель subtract.DSN. Демонстрирация работы математической операции вычитания "-".
По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Страница 42
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/subtract/subtract.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция Abs

Математические операторы PROTON+

Abs

Синтаксис

Assignment Variable = Abs Variable

Оператор Abs возвращает абсолютное значение переменной.

Assignment Variable это переменная назначения, которая может быть любым действительным типом
переменной.

Variable может быть постоянной, переменной или выражением из которых необходимо извлечь абсолютную
величину.

Пример 1

Операции над 32-битными переменными

Device = 16F877 ' Использовать микроконтроллер 16F877


XTAL = 4 ' Установить частоту внешнего кварцевого резонатора 4 МГц.
'------------------- Определение переменных -------------------
Dim DWD1 As DWord ' Объявление переменной типа DWord
Dim DWD2 As DWord ' Объявление переменной типа DWord
CLS ' Очистка экрана ЖКИ
DWD1 = -1234567 ' Присвоение переменной DWD1 значения равного -1234567
DWD2 = Abs DWD1 ' Извлечение из DWD1 абсолютного значения и присвоения его DWD2
Print Dec DWD2 ' Вывод на ЖКИ результата в десятичной форме, который будет равен 1234567
Stop  

Пример 2

Операции над дробными числами с плавающей запятой

Листинг программы abs.bas

Device = 16F877 ' Использовать микроконтроллер 16F877


Include "PROTON_4.INC" ' Вставка внешнего файла "PROTON_4.INC"
'------------------- Определение переменных -------------------
Dim FLP1 As Float ' Объявление переменной типа Float
Dim FLP2 As Float ' Объявление переменной типа Float
'--------------------- Основная программа ---------------------
CLS ' Очистка экрана ЖКИ
FLP1 = -1234567.123 ' Присвоение переменной FLP1 значения равного -1234567.123
Print At 1,1, "FLT1=", Dec
' Отобразить на ЖКИ значение FLT1
FLT1
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
FLP2 = Abs FLP1 ' Извлечение из FLP1 абсолютного значения и присвоения его FLP2
Print At 2,1, "FLT2= ", Dec ' Вывод на ЖКИ результата в десятичной форме, который будет равен
FLT2 1234567.123
Stop  

На рисунке 1 приведена модель abs.DSN, демонстрирующая работу математической операции Abs. Модель работает
под управлением программы abs.bas.

Страница 43
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/abs/abs.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция Abs

GIF

DSN

Рис. 1. Действующая модель abs.DSN. Демонстрация работы математической операции Abs.


По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Страница 44
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/abs/abs.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция Exp

Математические операторы PROTON+

Exp

Синтаксис

Assignment Variable = Exp Variable

Оператор Exp возвращает значение показательной функции ex , где e - основание натуральных логарифмов, а x -
показатель степени. Например Exp 1 = е1 = 2.7182818.

Variable - переменная, экспоненциальное значение которой необходимо вычислить. Variable может быть
постоянной, переменной или выражением,.

Assignment Variable - переменная назначения, которая может быть любым действительным типом
переменной.

Пример

Листинг программы exp.bas

Include "PROTON18_4.INC" '  Файл подключаемый из внешней библиотеки подпрограмм


Device = 18F452 ' Использовать микроконтроллер с 16-битным ядром
Dim FLOATIN As Float ' Объявление переменной типа Float
Dim FLOATOUT As Float ' Объявление переменной типа Float
DelayMS 500 ' Пауза 500 мсек
CLS ' Очистка экрана ЖКИ
FLOATIN = 1 ' Присвоение переменной FLOATIN значения равного 1
' Вычисление экспоненциального значения FLOATIN и присвоения
FLOATOUT = Exp FLOATIN
результата FLOATOUT
Print At 1,1, "FLOATIN = ", Dec
' Вывод на ЖКИ значения FLOATIN
FLOATIN
Print At 2,1, "FLOATOUT= ", Dec
' Вывод на ЖКИ результата в десятичной форме
FLOATOUT
Stop  

На рисунке 1 приведена модель exp.DSN, демонстрирующая работу математической операции Exp. Модель
работает под управлением программы exp.bas.

GIF

DSN

Рис. 1. Действующая модель exp.DSN. Демонстрация работы математической операции Exp.


По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Примечания

Оператор Exp не работает с микроконтроллерами имеющими 12- и 14-разрядные ядра.

В микроконтроллерах c 16-разрядными ядрами, у которых имеются дополнительные функциональные


возможности и большое количество линейной памяти, компилятор Proton+IDE Compiler осуществляет
полноценную операцию Exp над 32 разрядными переменными, в том числе и c плавающей запятой.

Страница 45
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/exp/exp.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция Exp

Для вычисления таких математических функций трeбуется большой объем памяти, поэтому не удивляйтесь,
если большая часть памяти микроконтроллера будет использоваться одним единственным оператором. Это
также означает, что программы, где участвует математический оператор Exp, работают сравнительно
медленно.

Страница 46
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/exp/exp.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция Sqr

Математические операторы PROTON+

Sqr

Синтаксис

Assignment Variable = Sqr Variable

Оператор Sqr возвращает значение квадратного корня.

Variable - переменная, которая может быть постоянной, переменной или выражением, из значения которой
необходимо вычислить квадратный корень.

Assignment Variable это переменная назначения, которая может быть любым действительным типом
переменной.

Пример

Листинг программы sqr.bas

Include "PROTON18_4.INC" '  Файл подключаемый из внешней библиотеки подпрограмм


Device = 18F452 ' Используемый процессор
Dim FLOATIN As Float ' Объявление переменной типа Float
Dim FLOATOUT As Float ' Объявление переменной типа Float
DelayMS 500 ' Пауза 500 мсек
CLS ' Очистка экрана ЖКИ
FLOATIN = 600 ' Присвоение переменной FLOATIN значения равного 600
' Вычисление квадратного корня из значения FLOATIN и присвоение
FLOATOUT = Sqr FLOATIN
результата переменной FLOATOUT
Print At 1,1, "FLOATIN = ", Dec
' Вывод на ЖКИ значения FLOATIN
FLOATIN
Print At 2,1, "FLOATOUT= ",
' Вывод на ЖКИ результата в десятичной форме
Dec FLOATOUT
Stop  

На рисунке 1 приведена модель sqr.DSN, демонстрирующая работу математической операции Sqr. Модель
работает под управлением программы sqr.bas.

GIF

DSN

Рис. 1. Действующая модель sqr.DSN, демонстрирующая работу математической операции sqr.


По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Примечания

В микроконтроллерах с 12- и 14-разрядными ядрами функция Sqr возвращает целочисленный квадратный


корень значения. Однако необходимо иметь в виду, что большинство операций по извлечению квадратных
корней будут имеют в результате дробную часть, однако компилятор отказывается выполнять эту
математическую операцию для дробной части и выполняет её только для целого числа. Поэтому в
программах, рассчитанных на применение макроконтроллеров с 12- и 14-разрядными ядрами вычисляется
квадратный корень из 100 как 10 (и это правильно), но квадратный корень из 99 вычисляет как 9.
Фактически этот результат близок к 9.95, но такая программа отбросит дробную часть, например:

Страница 47
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/sqr/sqr.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция Sqr

VAR2 = Sqr VAR1  


или  
' На дисплей будет выведен результат извлечения квадратного корня из 100, его
Print DEC Sqr 100
значение будет равно 10
' На дисплей будет выведен результат извлечения квадратного корня из 99, его
Print DEC Sqr 99
значение будет равно 9 из-за усечения

В микроконтроллерах c 16-разрядными ядрами, у которых имеются дополнительные функциональные


возможности и большое количество линейной памяти, компилятор Proton+IDE Compiler осуществляет полную
операцию вычисления квадратного корня из 32-разрядных числел с плавающей запятой..

Для вычисления таких математических функций трeбуется большой объем памяти, поэтому не удивляйтесь,
если большая часть памяти микроконтроллера будет использоваться одним единственным оператором. Это
также означает, что программы, где участвует математический оператор Sqr, работают сравнительно
медленно.

Страница 48
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/sqr/sqr.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция Log

Математические операторы PROTON+

Log

Синтаксис

Assignment Variable = Log Variable

Оператор Log возвращает значение натурального логарифма.

Assignment Variable это переменная назначения, которая может быть любым действительным типом
переменной.

Variable может быть постоянной, переменной или выражением, которые требуют вычисления натурального
логарифма.

Пример

Листинг программы log.bas

Include "PROTON18_4.INC" '  Файл подключаемый из внешней библиотеки подпрограмм


Device = 18F452 ' Используемый процессор
Dim FLOATIN As Float ' Объявление переменной типа Float
Dim FLOATOUT As Float ' Объявление переменной типа Float
DelayMS 500 ' Пауза 500 мсек
CLS ' Очистка экрана ЖКИ
FLOATIN = 1 ' Присвоение переменной FLOATIN значения равного 1
' Вычисление натурального логарифма из значения FLOATIN и присвоения
FLOATOUT = Log FLOATIN
результата FLOATOUT
Print At 1,1, "FLOATIN = ", Dec
' Вывод на ЖКИ значения FLOATIN
FLOATIN
Print At 2,1, "FLOATOUT= ", Dec
' Вывод на ЖКИ результата в десятичной форме
FLOATOUT
Stop  

На рисунке 1 приведена модель log.DSN, демонстрирующая работу математической операции Log. Модель
работает под управлением программы log.bas.

GIF

DSN

Рис. 1. Действующая модель log.DSN, демонстрирующая работу математической операции Log.


По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Примечания

Оператор Log не работает с 12- и 14-разрядными микроконтроллерами.

В микроконтроллерах с 16-разрядными ядрами имеющими дополнительные функциональные возможности и


большое количество линейной памяти осуществляется полноценная операция Log над 32-разрядными
переменными, в том числе и над переменными типа Float.

Для вычисления таких математических функций трeбуется большой объем памяти, поэтому не удивляйтесь,

Страница 49
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/log/log.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция Log

если большая часть памяти микроконтроллера будет использоваться одним единственным оператором. Это
также означает, что программы, где участвует математический оператор Log, работают сравнительно
медленно.

Страница 50
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/log/log.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция Log10

Математические операторы PROTON+

Log10

Синтаксис

Assignment Variable = Log10 Variable

Оператор Log10 возвращает значение десятичного логарифма.

Assignment Variable это переменная назначения, которая может быть любым действительным типом
переменной.

Variable может быть постоянной, переменной или выражением, которые требуют вычисления десятичного
логарифма.

Пример

Листинг программы log10.bas

Include "PROTON18_4.INC" '  Файл подключаемый из внешней библиотеки подпрограмм


Device = 18F452 ' Используемый процессор
Dim FLOATIN As Float ' Объявление переменной типа Float
Dim FLOATOUT As Float ' Объявление переменной типа Float
DelayMS 500 ' Пауза 500 мсек
CLS ' Очистка экрана ЖКИ
FLOATIN = 10 ' Присвоение переменной FLOATIN значения равного 10
' Вычисление десятичного логарифма из значения FLOATIN и присвоения
FLOATOUT = Log10 FLOATIN
результата FLOATOUT
Print At 1,1, "FLOATIN = ", Dec
' Вывод на ЖКИ значения FLOATIN
FLOATIN
Print At 2,1, "FLOATOUT= ", Dec
' Вывод на ЖКИ результата в десятичной форме
FLOATOUT
Stop  

На рисунке 1 приведена модель log10.DSN, демонстрирующая работу математической операции Log10. Модель
работает под управлением программы log10.bas.

GIF

DSN

Рис. 1. Действующая модель log10.DSN, демонстрирующая работу математической операции Log10.


По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Примечания

Оператор Log10 не работает с 12- и 14-разрядными микроконтроллерами.

В микроконтроллерах с 16-разрядными ядрами имеющими дополнительные функциональные возможности и


большим количество линейной памяти осуществляется полноценная операция Log10 над 32 разрядными
переменными всех типов, в том числе и c переменными типа Float.

Для вычисления таких математических функций трeбуется большой объем памяти, поэтому не удивляйтесь,

Страница 51
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/log10/log10.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция Log10

если большая часть памяти микроконтроллера будет использоваться одним единственным оператором. Это
также означает, что программы, где участвует математический оператор Log10, работают сравнительно
медленно.

Страница 52
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/log10/log10.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математический оператор Max

Математические операторы PROTON+

Max

Синтаксис

VAR2 = VAR1 Max N

Оператор Max выбирает из двух чисел VAR1 и N наибольшее (максимум) и возвращает это значение
переменной VAR2 как результат работы оператора (см. пример 1).

Пример 1

Листинг программы max.bas

' Подключить внешний файл с настройками для ЖКИ и


Include "PROTON_4.INC"
микроконтроллера 16F877
Dim VAR1 As Byte ' Cоздать переменную VAR1 типа Byte
Dim VAR2 As Byte ' Cоздать переменную VAR2 типа Byte
Main: ' Метка начала цикла главной программы
Cls ' Очистить экран ЖКИ
' Присвоить переменной VAR1 случайное число из диапазона от 1
VAR1 = Random
до 65535
' Присвоить VAR2 наибольшее из значений VAR1 и 10000 (т.е.
VAR2 = VAR1 Max 10000
VAR2 может принимать значения в диапазоне от 10000 до 65535)
Print At 1,1, "VAR1 = ", Dec VAR1 ' Отобразить на дисплее десятичное значение переменной VAR1
' Отобразить на ЖКИ десятичное значение переменной VAR2 как
Print At 2,1, "VAR2 = ", Dec VAR2
результат операции Max
DelayMS 500 ' Пауза 0.5 сек чтобы замедлить процесс
GoTo Main ' Повторить главную программу

Эта программа выполняет операцию Max над содержимым переменной VAR1 и значением равным 10000.
Переменная VAR1, в свою очередь, получает свое значение от оператора Random, который генерирует
случайное число и присваивает его переменной VAR1. Если, в результате выполнения главной программы,
переменная VAR1 получит значение менее 10000, то переменная VAR2 получит значение равное 10000. Если
же переменная VAR1 получит значение более 10000, то переменная VAR2 получит то значениу, которое в этот
момент получила переменная VAR1.

На рисунке 1 приведена схема действующей модели max.DSN, демонстрирующая работу оператора Max.
Схема работает под управлением программы max.bas.

GIF

DSN

Страница 53
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/max/max.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математический оператор Max

Рис. 1. Действующая модель max.DSN, демонстрирующая работу математической операции Мax.


По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Примечание

Оператор Max (пока еще) не поддерживает переменные типа Dword или Float. Поэтому самое большое
доступное для него значение N может быть не более 65535.

Страница 54
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/max/max.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция Min

Математические операторы PROTON+

Min

Синтаксис

VAR2 = VAR1 Min N

Этот оператор выбирает минимальное значение из двух чисел VAR1 и N , а затем присваивает это значение
переменной VAR2. Оператор Min обычно используют для того, чтобы ограничить переменную определенным
числовым значением, например:

VAR2 = VAR1 Min 100 ' Присвоить VAR2 наименьшее из значений VAR1 и 100 (т.е. в этом
примере VAR2 может принимать значения в диапазоне от 0 до 100 и не
может быть больше чем 100)

Примечание

Оператор Min не поддерживает (пока еще) переменных типа Dword или Float. Поэтому самое большое
его значение N не может превышать 65535.

См. также: Max

Страница 55
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/min/min.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция Pow

Математические операторы PROTON+

Pow

Синтаксис

Assignment Variable = Pow Variable , Pow Variable

Переменная назначения = Pow основание степени, показатель степени

Команда Pow производит вычисление математической функции - возведение в степень.

Assignment Variable - переменная в которую помещается результат вычисления. Он может иметь любой
действительный тип переменной - Byte, Word, DWord или Float.

Variable - основание степени. Оно может быть константой, переменной или выражением.

Pow Variable - показатель степени. Он также может быть константой, переменной или выражением.

Пример

Листинг программы pow.bas

DEVICE = 18F452 ' Использовать 16 разрядный микроконтроллер 18F452


Dim POW_OF As Float ' Переменная для показателя степени
Dim FLOATIN As Float ' Переменная для основания степени
Dim FLOATOUT As Float ' Переменная для результата возведения в степень
DelayMs 500 ' Пауза для стабилизации микроконтроллера
Cls ' Очистить экран ЖКИ
POW_OF = 10 ' Показатель степени = 10
FLOATIN = 2 ' Основание степени = 2
FLOATOUT = Pow FLOATIN, POW_OF ' Возвести число FLOATIN=2 в степень POW_OF=10
Print At 1, 1, "FLOATIN = ", Dec FLOATIN,_ ' Вывести значения переменных FLOATIN и POW_OF на экран
" POW_OF = ", Dec POW_OF ЖКИ
Print At 2, 1, "FLOATOUT= ", Dec
' Вывести результат на экран ЖКИ
FLOATOUT
STOP  

На рисунке 1 приведена модель pow.DSN, демонстрирующая работу математической операции Pow. Модель
работает под управлением программы pow.bas.

GIF

DSN

Рис. 1. Действующая модель pow.DSN, демонстрирующая работу математической операции Pow.


По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Примечания

Команда Pow, не работает с микроконтроллерами имеющими 12- и 14-разрядные ядра. Но с


микроконтроллерами имеющими 16-разрядные ядра и которые обладают дополнительными

Страница 56
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/pow/pow.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция Pow

функциональными возможностями и большой линейной памятью эта команда работает в полной мере с 32-
битными переменными всех типов, в том числе и с переменными типа Float.

Известно, что математика с плавающей запятой чрезвычайно требовательна к объему памяти, так что не
удивляйтесь, если обнаружите, что большая часть памяти микроконтроллера будет использована этой
командой. И это также означает, что вычисления будут производиться относительно медленно.

Страница 57
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/pow/pow.html
PROTON+ Compiler. Development Suite. Руководство пользователя. Математический оператор DIV32

Математические операторы PROTON+

Оператор Div32

Синтаксис:

Div32

Несмотря на новые возможности компилятора PROTON+ работать с переменными типа DWord, в его систему команд
был введен oператор Div32 для того, чтобы сделать компилятор PROTON+ совместимым с программами
написанными для компилятора PicBasicPRO.

Оператор Div32 применяется в PicBasicPRO и обеспечивает косвенный доступ к 32-разрядному результату, который
получается внутри компилятора, в результате перемножения двух 16-разрядных чисел.

Компилятор PicBasicPRO может выполнять математические операции над переменными, максимальный размер
которых составляет 16 разрядов. Однако в результате перемножения двух 16-разрядных чисел, внутри компилятора
получается 32-разрядное число, которое кратковременно хранится в его двух 16-разрядных регистрах, поэтому к
этому числу можно получить доступ, но в два этапа.

Шаг 1:

' Первый шаг возвращает младшие 16 битов результата умножения


VARml = VAR1 * VAR2
которые помещаются в переменную VARml

Шаг 2:

' Второй шаг возвращает старшие 16 битов результата умноженияя


VARst = VAR1 ** VAR2
которые помещаются в переменную VARst

При перемножении двух переменных типа Word вначале выполняется функция «*», где результатом являются
младшие 16 разрядов, а затем функция «**», где в результате возвращаются старшие 16 разрядов. И нет другого
пути, чтобы получить доступ к 32-разрядному результату в один прием.

Назначение функции DIV32 фактически ограничено делением 31-разрядного целого числа без знака максимальной
величины 2147483647 (то есть это число может принимать значения от 0 до 2147483647) на 15-разрядное целое
число без знака. Максимальное значение такого делителя может быть всего 32767. Но поскольку компилятор
работает только с 16-разрядными переменными, то функция DIV32 должна выполняться сразу же, как только
выполнено умножение и внутренняя переменная все еще содержит 32-разрядный результат умножения. При этом
никакая другая операция не должна происходить между операцией умножения и функцией Div32, в противном
случае внутренняя переменная может быть изменена, и произойдет потеря 32-битного результата умножения.

Это, между прочим, означает то, что в это время и функции обработки прерывания должны быть отключены перед
операцией умножения и до окончания работы функции DIV32. Прерывания же написанные в виде вставок кода на
ассемблере не влияют на внутренние переменные, и таким образом они могут использоваться вне зависимости от
использования оператора DIV32.

Во многих случаях желательно иметь возможность деления всего 32-битного результата на 16-битное число для
усреднения результата, или других вычислений. В компиляторе PROTON+ это позволяет сделать оператор Div32.

Оператор Div32 фактически ограничен делением 31-битного целого числа без знака максимальной величины
2147483647, на целое 15-битное число без знака (которое в свою очередь может принимать значения от 0 до
32767). В большинстве случаев этого достаточно.

При использовании компилятора Мplab необходимо помнить, что он позволяет максимальный размер переменных
только в 16 бит (0 - 65535), поэтому логика работы оператора Div32 основывается на факте, что умножение было
выполнено только до команды Div32, и что внутренние переменные компилятора все еще содержат 32-bit результат
умножения.

Пример демонстрации операции Div32:

Листинг программы div32.bas

Device = 16F873A ' Сконфигурировать программу для микроконтроллера 16F873A


Xtal = 4 ' Установить частоту кварцевого генератора равной 4 МГц.
Declare LCD_Type = 0 ' Использовать алфавитно-цифровой ЖКИ
Declare LCD_Interface = 4 ' Использовать 4-разрядный интерфейс для подключения ЖКИ
' Использовать RB4,RB5,RB6,RB7 для подключения D4,D5,D6,D7
Declare LCD_DTPin = PORTB.4
(цепей данных) ЖКИ
Declare LCD_RSPin = PORTB.2 ' Подключение цепи RS ЖКИ
Declare LCD_ENPin = PORTB.3 ' Подключение цепи EN ЖКИ
Declare LCD_Lines = 2 ' Использовать 2-х строчный ЖКИ
' Установить паузы между передачей команд на ЖКИ равными 2000
Declare LCD_CommandUs = 2000
микросекундам
' Установить паузы между передачей данных на ЖКИ равными 50
Declare LCD_DataUs = 50
микросекундам
Dim WRD1 As Word ' Объявление переменной WRD1 типа Word

Страница 58
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/div32/div32.html
PROTON+ Compiler. Development Suite. Руководство пользователя. Математический оператор DIV32

Dim WRD2 As Word ' Объявление переменной WRD2 типа Word


Dim WRD3 As Word ' Объявление переменной WRD3 типа Word
Dim FAKE As Word ' Объявление временной переменной FAKE типа Word
WRD2 = 300 ' Присвоить переменной WRD2 значение 300
WRD3 = 1000  Присвоить переменной WRD3 значение 1000
FAKE = WRD2 * WRD3 ' Перемножить две 16-битные переменные и поместить младшие 16
бит 32-битного результата во временную (фиктивную) переменную
FAKE. (Bместо операци * можно было использовать операторы **
или */)
' Результат операции Div32 разделить на 100 и 16-битный остаток от
WRD1= Div32 100
деления поместить в WRD1
Print At 1, 1, "WRD1 = ", Dec WRD1 ' Отобразить результат на ЖКИ
Stop  

Программа присваивает WRD2 значение 300 и WRD3 значение 1000. Результат умножения которых равен 300000.
Значение этого результата превышает 16-разряднное число, максимальный размер которого не может быть более
65535, поэтому во временную переменную FAKE помещаются только младшие 16 бит результата. Далее переменная
FAKE операцией Div32 не используется. Но 32-битный результат перемножения 16-битных переменных WRD2 и
WRD3 кратковременно сохраняется в двух внутренних служебных 16-битных переменных. Они сохраняются там до
тех пор, пока не будет выполнена любая следующая операция.

В операции Div32 компилятор использует внутренние переменные в качестве операндов, поэтому нельзя
производить никакие другие операции между операцией умножения и операцией Div32, или изменять внутренние
переменные компилятора, иначе временный 32-битный результат умножения будет разрушен.

Далее в этом примере оператор Div32 делит 32-битный результат умножения, временно хранящийся во внутренних
служебных переменных компилятора, на 100 и сохраняет результат этого деления, равный 3000, в 16-битной
переменной WRD1.

На рисунке 1 приведена действующая модель div32.DSN, демонстрирующая операцию перемножения двух 16-
битных чисел при помощи оператора Div32. Модель работает под управлением программы div32.bas

GIF

DSN

Рис. 1. Действующая модель div32.DSNDiv32 .


По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Страница 59
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/div32/div32.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция ACos

Математические операторы PROTON+

ACos

Синтаксис

Assignment Variable = ACos Variable

Оператор ACos возвращает значение арккосинуса.

Variable - переменная, которая может быть постоянной, переменной или выражением, из значения которой
необходимо вычислить арккосинус. Значение Variable должно находится в диапазоне от -1 до +1.

Assignment Variable - это переменная назначения, в которую помещается результат операции.

Результат будет дробным числом с плавающей запятой в диапазоне от 0 до 3.141 (значения арккосинуса
выражаются в радианах). Однако переменная назначения может быть любым действительным типом
переменной, например: Bit, Byte, Word, Dword. В этих случаях значение дробной части результата будет
утеряно.

Пример

Листинг программы acos.bas

Include "PROTON18_4.INC" '  Файл подключаемый из внешней библиотеки подпрограмм


Device = 18F452 ' Использовать микроконтроллер с 16-битным ядром
Dim FLOATIN As Float ' Объявление переменной типа Float
Dim FLOATOUT As Float ' Объявление переменной типа Float
DelayMS 500 ' Пауза 500 мсек
CLS ' Очистка экрана ЖКИ
FLOATIN = 0.8 ' Присвоение переменной FLOATIN значения равного 0.8
' Вычисление из значения FLOATIN арккосинуса и присвоение результата
FLOATOUT = ACos FLOATIN
переменной FLOATOUT
Print At 1,1, "FLOATIN = ", Dec
' Вывод на ЖКИ значения FLOATIN
FLOATIN
Print At 2,1, "FLOATOUT= ", Dec ' Вывод на ЖКИ результата в десятичной форме, который будет равен
FLOATOUT 0.643
Stop  

На рисунке 1 приведена модель acos.DSN, демонстрирующая работу математической операции ACos. Модель
работает под управлением программы acos.bas.

GIF

DSN

Рис. 1. Действующая модель acos.DSN, демонстрирующая работу математической операции ACos.


По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Примечания

Оператор ACos не предназначен для работы с микроконтроллерами имеющими 12- и 14-разрядные ядра.

В микроконтроллерах c 16-разрядными ядрами, у которых имеются дополнительные функциональные возможности

Страница 60
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/acos/acos.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция ACos

и большое количество линейной памяти, компилятор Proton+IDE Compiler осуществляет полный 32-разрядный
арккосинус с плавающей запятой.

Для вычисления тригонометрических функций трeбуется большой объем памяти, поэтому не удивляйтесь, если
большая часть памяти микроконтроллера будет использоваться одним единственным оператором. Это также
означает, что программы, где участвуют тригонометрические операторы, работают сравнительно медленно.

Страница 61
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/acos/acos.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция ASIn

Математические операторы PROTON+

ASIn

Синтаксис

Assignment Variable = ASIn Variable

Оператор ASIn возвращает значение арксинуса.

Assignment Variable это переменная назначения, которая может быть любым действительным типом
переменной.

Variable может быть постоянной, переменной или выражением, из значения которой необходимо вычислить
арксинус. Это значение должно лежать в диапазоне от -1 до +1. Результат будет дробным числом с
плавающей запятой в диапазоне от -1.570 до 1.570. Значения арксинуса выражаются в радианах.

Пример

Листинг программы asin.bas

Include "PROTON18_4.INC" '  Файл подключаемый из внешней библиотеки подпрограмм


Device = 18F452 ' Используется 16-разрядный процессор
Dim FLOATIN As Float ' Объявление переменной типа Float
Dim FLOATOUT As Float ' Объявление переменной типа Float
DelayMS 500 ' Пауза 500 мсек
CLS ' Очистка экрана ЖКИ
FLOATIN = 0.8 ' Присвоение переменной FLOATIN значения равного 0.8
' Вычисление из значения FLOATIN арксинуса и присвоения результата
FLOATOUT = ASIn FLOATIN
FLOATOUT
Print At 1,1, "FLOATIN = ", Dec
' Вывод на ЖКИ значения FLOATIN
FLOATIN
Print At 2,1, "FLOATOUT= ", Dec
' Вывод на ЖКИ результата в десятичной форме
FLOATOUT
Stop  

На рисунке 1 приведена модель asin.DSN, демонстрирующая работу математической операции ASIn. Модель
работает под управлением программы asin.bas.

GIF

DSN

Рис. 1. Действующая модель asin.DSN, демонстрирующая работу математической операции ASIn.


По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Примечания

Оператор ASIn не предназначен для работы с микроконтроллерами имеющими 12- и 14-разрядные ядра.

В микроконтроллерах с 16-разрядными ядрами имеющими дополнительные функциональные возможности и


большое количество линейной памяти осуществляется полный 32-разрядный арксинус с плавающей запятой.

Для вычисления тригонометрических функций трeбуется большой объем памяти, поэтому не удивляйтесь, если

Страница 62
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/asin/asin.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция ASIn

большая часть памяти микроконтроллера будет использоваться одним единственным оператором. Это также
означает, что программы, где участвуют тригонометрические операторы, работают сравнительно медленно.

Страница 63
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/asin/asin.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция ATan

Математические операторы PROTON+

ATan

Синтаксис

Assignment Variable = ATan Variable

Оператор ATan возвращает значение арктакгенса.

Assignment Variable это переменная назначения, которая может быть любым действительным типом
переменной.

Variable может быть постоянной, переменной или выражением, из значения которой необходимо вычислить
арксинус. Результат будет дробным числом с плавающей запятой. Значения арктангенса выражаются в
радианах.

Пример

Листинг программы atan.bas

Include "PROTON18_4.INC" '  Файл подключаемый из внешней библиотеки подпрограмм


Device = 18F452 ' Используется 16-разрядный процессор
Dim FLOATIN As Float ' Объявление переменной типа Float
Dim FLOATOUT As Float ' Объявление переменной типа Float
DelayMS 500 ' Пауза 500 мсек
CLS ' Очистка экрана ЖКИ
FLOATIN = 1 ' Присвоение переменной FLOATIN значения равного 1
' Вычисление из значения FLOATIN арктангенса и присвоения
FLOATOUT = ASIn FLOATIN
результата FLOATOUT
Print At 1,1, "FLOATIN = ", Dec
' Вывод на ЖКИ значения FLOATIN
FLOATIN
Print At 2,1, "FLOATOUT= ", Dec
' Вывод на ЖКИ результата в десятичной форме
FLOATOUT
Stop  

На рисунке 1 приведена модель atan.DSN, демонстрирующая работу математической операции ATan. Модель
работает под управлением программы atan.bas.

GIF

DSN

Рис. 1. Действующая модель atan.DSN, демонстрирующая работу математической операции ATan.


По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Примечания

Оператор ATan не предназначен для работы с микроконтроллерами имеющими 12- и 14-разрядные ядра.

В микроконтроллерах с 16-разрядными ядрами имеющими дополнительные функциональные возможности и


большое количество линейной памяти осуществляется полный 32-разрядный арктангенс с плавающей запятой.

Для вычисления тригонометрических функций трубуется большой объем памяти, поэтому не удивляйтесь, если

Страница 64
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/atan/atan.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция ATan

большая часть памяти микроконтроллера будет использоваться одним единственным оператором. Это также
означает, что программы, где участвуют тригонометрические операторы, работают сравнительно медленно.

Страница 65
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/atan/atan.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция Cos

Математические операторы PROTON+

Cos

Синтаксис

Assignment Variable = Cos Variable

Оператор Cos возвращает значение косинуса.

Variable - переменная, которая может быть постоянной, переменной или выражением, из значения которой
необходимо вычислить косинус.

Assignment Variable - это переменная назначения, в которую помещается результат операции.

Результат будет дробным числом с плавающей запятой. Значения косинуса выражаются в радианах. Однако
переменная назначения может быть любым действительным типом переменной, например: Bit, Byte, Word,
Dword. В этих случаях значение дробной части результата будет утеряно.

Пример

Листинг программы cos.bas

Include "PROTON18_4.INC" '  Файл подключаемый из внешней библиотеки подпрограмм


Device = 18F452 ' Используемый процессор
Dim FLOATIN As Float ' Объявление переменной типа Float
Dim FLOATOUT As Float ' Объявление переменной типа Float
DelayMS 500 ' Пауза 500 мсек
CLS ' Очистка экрана ЖКИ
FLOATIN = 123 ' Присвоение переменной FLOATIN значения равного 123
' Вычисление из значения FLOATIN косинуcа и присвоениe результата
FLOATOUT = Cos FLOATIN
переменной FLOATOUT
Print At 1,1, "FLOATIN = ", Dec
' Вывод на ЖКИ значения FLOATIN
FLOATIN
Print At 2,1, "FLOATOUT= ", Dec
' Вывод на ЖКИ результата в десятичной форме
FLOATOUT
Stop  

На рисунке 1 приведена модель cos.DSN, демонстрирующая работу математической операции Cos. Модель
работает под управлением программы cos.bas.

GIF

DSN

Рис. 1. Действующая модель cos.DSN, демонстрирующая работу математической операции Cos.


По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Примечания

Оператор Cos работает с микроконтроллерами имеющими 12-, 14- и 16-разрядные ядра.

В микроконтроллерах с 12- и 14- разрядными ядрами в результате операции Cos возвращаетcя 8-разрядное
значение косинуса. В результате этой операции получается число от -127 до 127, в коде дополнительном до
двух. Аргументом являются двоичные радианы, а не общепринятые градусы. Двоичные радианы это числа
о о

Страница 66
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/cos/cos.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция Cos

от 0 до 255, вместо обычных градусов от 0 до 359 .

В микроконтроллерах c 16-разрядными ядрами, у которых имеются дополнительные функциональные


возможности и большое количество линейной памяти, компилятор Proton+IDE Compiler осуществляет полный
32-разрядный косинус с плавающей запятой.

Для вычисления тригонометрических функций трeбуется большой объем памяти, поэтому не удивляйтесь,
если большая часть памяти микроконтроллера будет использоваться одним единственным оператором. Это
также означает, что программы, где участвуют тригонометрические операторы, работают сравнительно
медленно.

Страница 67
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/cos/cos.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция Sin

Математические операторы PROTON+

Sin

Синтаксис

Assignment Variable = Sin Variable

Оператор Sin возвращает значение синуса.

Assignment Variable это переменная назначения, которая может быть любым действительным типом
переменной.

Variable может быть постоянной, переменной или выражением, из значения которой необходимо вычислить
синус. Значения синуса выражаются в радианах.

Пример

Листинг программы sin.bas

Include "PROTON18_4.INC" '  Файл подключаемый из внешней библиотеки подпрограмм


Device = 18F452 ' Используемый процессор
Dim FLOATIN As Float ' Объявление переменной типа Float
Dim FLOATOUT As Float ' Объявление переменной типа Float
DelayMS 500 ' Пауза 500 мсек
CLS ' Очистка экрана ЖКИ
FLOATIN = 123 ' Присвоение переменной FLOATIN значения равного 123
' Вычисление из значения FLOATIN синуcа и присвоения результата
FLOATOUT = Cos FLOATIN
FLOATOUT
Print At 1,1, "FLOATIN = ", Dec
' Вывод на ЖКИ значения FLOATIN
FLOATIN
Print At 2,1, "FLOATOUT= ", Dec
' Вывод на ЖКИ результата в десятичной форме
FLOATOUT
Stop  

На рисунке 1 приведена модель sin.DSN, демонстрирующая работу математической операции Sin. Модель
работает под управлением программы sin.bas.

GIF

DSN

Рис. 1. Действующая модель sin.DSN, демонстрирующая работу математической операции Sin.


По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Примечания

Оператор Sin работает с микроконтроллерами имеющими 12-, 14- и 16-разрядные ядра.

В микроконтроллерах с 12- и 14-разрядными ядрами в результате операции Sin возвращаетcя 8-разрядное


значение синуса. В результате этой операции получается число от -127 до 127, в коде дополнительном до
двух. Аргументом являются двоичные радианы, а не общепринятые градусы. Двоичные радианы это числа
от 0 до 255, вместо обычных градусов от 0 о до 359о.

В микроконтроллерах с 16-разрядными ядрами имеющими дополнительные функциональные возможности и

Страница 68
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/sin/sin.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция Sin

большое количество линейной памяти осуществляется полный 32-разрядный синус с плавающей запятой.

Для вычисления тригонометрических функций трeбуется большой объем памяти, поэтому не удивляйтесь,
если большая часть памяти микроконтроллера будет использоваться одним единственным оператором. Это
также означает, что программы, где участвуют тригонометрические операторы, работают сравнительно
медленно.

Страница 69
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/sin/sin.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция Tan

Математические операторы PROTON+

Tan

Синтаксис

Assignment Variable = Tan Variable

Оператор Tan возвращает значение тангенса.

Assignment Variable это переменная назначения, которая может быть любым действительным типом
переменной.

Variable может быть постоянной, переменной или выражением, из значения которой необходимо вычислить
тангенс. Значения тангенса выражаются в радианах.

Пример

Листинг программы tan.bas

Include "PROTON18_4.INC" '  Файл подключаемый из внешней библиотеки подпрограмм


Device = 18F452 ' Используемый процессор
Dim FLOATIN As Float ' Объявление переменной типа Float
Dim FLOATOUT As Float ' Объявление переменной типа Float
DelayMS 500 ' Пауза 500 мсек
CLS ' Очистка экрана ЖКИ
FLOATIN = 1 ' Присвоение переменной FLOATIN значения равного 1
' Вычисление из значения FLOATIN тангенса и присвоения результата
FLOATOUT = tng FLOATIN
FLOATOUT
Print At 1,1, "FLOATIN = ", Dec
' Вывод на ЖКИ значения FLOATIN
FLOATIN
Print At 2,1, "FLOATOUT= ", Dec
' Вывод на ЖКИ результата в десятичной форме
FLOATOUT
Stop  

На рисунке 1 приведена модель tan.DSN, демонстрирующая работу математической операции Tan. Модель
работает под управлением программы tan.bas.

GIF

DSN

Рис. 1. Действующая модель tan.DSN, демонстрирующая работу математической операции Tan.


По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Примечания

Оператор Tan не работает с микроконтроллерами имеющими 12- и 14-разрядные ядра.

В микроконтроллерах с 16-разрядными ядрами имеющими дополнительные функциональные возможности и


большое количество линейной памяти осуществляется полный 32-разрядный тангенс с плавающей запятой.
Для вычисления тригонометрических функций трeбуется большой объем памяти, поэтому не удивляйтесь,
если большая часть памяти микроконтроллера будет использоваться одним единственным оператором. Это
также означает, что программы, где участвуют тригонометрические операторы, работают сравнительно мед
ленно.

Страница 70
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/tan/tan.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Логический оператор BITWISE AND '&'

Операции поразрядной логики

BITWISE AND '&'

Синтаксис

Result = Value1 & Value2

или

Value1 & Value2

Логический оператор BITWISE AND '&' выполняет операцию побитового логического умножения ("Побитовое
И") двух значений.

Result - переменная, в которую помещается результат. Result может быть 8-, 16- или 32-разрядным
действительным числом.

Value1 и Value2 - 8-, 16- или 32-разрядные исходные значения. Они не могут быть числами с плавающей
запятой.

Каждый бит результата этой операции определяется слeдующими правилами:

Произносится          Записывается          Или записывается

0 И 0 = 0                  0 AND 0 = 0                  0 & 0 = 0

0 И 1 = 0                  0 AND 1 = 0                  0 & 1 = 0

1 И 0 = 0                  1 AND 0 = 0                  1 & 0 = 0

1 И 1 = 1                  1 AND 1 = 1                  1 & 1 = 1

В результате поразрядно возвращается 0, если в двух исходных значениях их соответствующие разряды


содержат разные битовые значения (0 и 1), и 1, если их соответствующие разряды содержат 1.

Пример

Dim Value1 As Byte ' Создать переменную Value1 типа Byte


Dim Value2 As Byte ' Создать переменную Value2 типа Byte
Dim Result As Byte ' Создать переменную Result типа Byte
Value1 = %00001111 ' Присвоение значения переменной Value1
Value2 = %10101101 ' Присвоение значения переменной Value2
' Выполнить операцию BITWISE AND '&' ("Побитовое И")
Result = Value1 & Value2
' и присвоить результат переменной Result
Print Bin Result ' Отобразить на дисплее значение Result = %00001101
' Или  
Print Bin ( %00001111 & %10101101 ) ' Отобразить на дисплее результат операции AND ( %00001101 )

На рисунке 1 приведена действующая модель bitwise_and.DSN, демонстрирующая работу оператора BITWISE


AND '&' с 8, 16 и 32-разрядными числами. Модель работает под управлением программы bitwise_and.bas

Листинг программы bitwise_and.bas

' ------------------------------------------Общие настройки------------------------------------------
Device = 16F877A ' Используемый микроконтроллер
XTAL = 20 ' Частота осциллятора 20 МГц
' ------------------------------------Настройки подключения ЖКИ------------------------------------
Declare LCD_TYPE TOSHIBA ' Тип ЖКИ - на контроллере Toshiba - T6963
Declare LCD_DTPORT PORTD ' Порт данных
Declare LCD_WRPIN PORTE.2 ' Цепь управления WR
Declare LCD_RDPIN PORTE.1 ' Цепь управления RD
Declare LCD_CDPIN PORTA.1 ' Цепь управления CD
Declare LCD_CEPIN PORTE.0 ' Цепь управления CE
Declare LCD_RSTPIN PORTA.2 ' Цепь управления RST
' Количество пикселей по горизонтали у
Declare LCD_X_RES 240
' используемого монитора
' Количество пикселей по вертикали у
Declare LCD_Y_RES 128
' используемого монитора
' Использовать шрифт 6 пикселей в ширину и
Declare LCD_FONT_WIDTH 6

Страница 71
http://terrarus.ucoz.ru/proton_plus_ide/proton/bitwise/bitwise_and/bitwise_and.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Логический оператор BITWISE AND '&'

' 8 пикселей в высоту


' ------------------------------------------Настройки портов------------------------------------------
Declare ALL_DIGITAL = On ' Сделать все порты цифровыми входами/выходами
' ---------------------------------------Объявления переменных---------------------------------------
Dim VR1 As Byte ' Cоздать переменную VR1 типа Byte
Dim VR2 As Byte ' Cоздать переменную VR2 типа Byte
Dim VD1 As Word ' Cоздать переменную VD1 типа Word
Dim VD2 As Word ' Cоздать переменную VD2 типа Word
Dim Result As Word ' Cоздать переменную Result типа Word
Dim D1 As DWord ' Cоздать переменную D1 типа DWord
Dim D2 As DWord ' Cоздать переменную D2 типа DWord
' --------------------------------Присвоение первоначальных значений---------------------------------
VR1 = %00001111 ' Присвоить 8-битное значение VR1
VR2 = %10101001 ' Присвоить 8-битное значение VR2
VD1 = %0000111100001111 ' Присвоить 16-битное значение VD1
VD2 = %1010100110101001 ' Присвоить 16-битное значение VD2
D1 = %00001111000011110000111100001111 ' Присвоить 32-битное значение D1
D2 = %10101001101010011010100110101001 ' Присвоить 32-битное значение D2
' -----------------------------------------Главная программа--------------------------------------------
Main: ' Метка начала главной программы
DelayMS 500 ' Пауза 0,5 сек
Cls ' Очистить дисплей ЖКИ
Print At 0,0, "BITVISE AND", $20,$27,$26,$27 ' Отобразить на ЖКИ надпись "BITVISE AND, '&'"
' ----------------------Демонстрация работы оператора AND с 8-разрядными значениями----------------------
Print At 1,0, "Example 8-bit numbers:" ' Отобразить на ЖКИ надпись "Example 8-bit numbers:"
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Print At 3,0, "VR1 =", Bin8 VR1 ' Отобразить на ЖКИ значение VR1
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Print At 4,0, "VR2 =", Bin8 VR2 ' Отобразить на ЖКИ значение VR2
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Result = VR1 & VR2 ' Выполнить операцию AND
Print At 5,0, "Result=", Bin8 Result ' Отобразить на ЖКИ значение Result
DelayMS 3000 ' Пауза 3 сек чтобы замедлить процесс
' ----------------------Демонстрация работы оператора AND с 16-разрядными значениями----------------------
Print At 7,0, "Example 16-bit numbers:" ' Отобразить на ЖКИ надпись "Example 16-bit numbers:"
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Print At 8,0, "VD1 =", Bin16 VD1 ' Отобразить на ЖКИ значение VD1
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Print At 9,0, "VD2 =", Bin16 VD2 ' Отобразить на ЖКИ значение VD2
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Print At 10,0, "VD1 & VD2=", Bin16 VD1 & VD2 ' Отобразить на ЖКИ результат операции AND
DelayMS 3000 ' Пауза 3 сек чтобы замедлить процесс
' ----------------------Демонстрация работы оператора AND с 32-разрядными значениями----------------------
Print At 12,0, "Example 32-bit numbers:" ' Отобразить на ЖКИ надпись "Example 32-bit numbers:"
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Print At 13,0, Bin30 D1 ' Отобразить на ЖКИ значение D1
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Print At 14,0, Bin30 D2 ' Отобразить на ЖКИ значение VD2
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Print At 15,0, Bin30 D1 & D2 ' Отобразить на ЖКИ результат операции AND
DelayMS 10000 ' Пауза 10 сек чтобы замедлить процесс
GoTo main ' Повторить программу

Страница 72
http://terrarus.ucoz.ru/proton_plus_ide/proton/bitwise/bitwise_and/bitwise_and.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Логический оператор BITWISE AND '&'

GIF

DSN

Рис. 1. Действующая модель bitwise_and.DSN, демонстрирующая работу операции BITWISE AND '&'.
По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Примечание

Операция BITWISE AND '&' может быть произведена над 8-, 16- и 32-разрядными числами, кроме чисел
с плавающей запятой. Побитовая операция BITWISE AND '&' недопустима над числами с плавающей
запятой.

Страница 73
http://terrarus.ucoz.ru/proton_plus_ide/proton/bitwise/bitwise_and/bitwise_and.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Оператор работы с битам BITWISE COMPLEMENT '~'

Операторы работы с битами

BITWISE COMPLEMENT '~'

Синтаксис

Value2 = ~ Value1

Value1 и Value2 - переменные любых типов кроме Float

Логический оператор BITWISE COMPLEMENT '~' это оператор поразрядной инверсии, или, как еще говорят -
операция "ДОПОЛНЕНИЕ" (оператор представления числа в дополнительном коде). В результате действия
этого оператора, каждый бит, который содержит 1 заменяется на 0, и каждый бит, который содержит 0
заменяется на 1. Этот процесс также известен как "ПОРАЗРЯДНОЕ НЕ".

Пример

Листинг программы complement.bas


' Подключить из внешней библиотеки подпрограмм файл,
Include "PROTON18_4.INC" ' содержащий настройки микроконтроллера 18F452 и
' алфавитно-цифорвого ЖКИ
Device = 18F452 ' Используемый процессор
'---------------------------------------Объявление переменных и их типов-----------------------------------------
Dim Value1 As Word ' Cоздать переменную Value1 типа Word
Dim Value2 As Word ' Cоздать переменную Value2 типа Word
Dim DWD1 As DWord ' Cоздать переменную DWD1 типа DWord
Dim DWD2 As DWord ' Cоздать переменную DWD2 типа DWord
main: ' Главная программа
'------------------------Демонстрация работы оператора с 16-разрядными значениями------------------------
Cls ' Очистить дисплей
DelayMs 500 ' Пауза 0,5 сек
' Присвоить переменной Value1 двоичное значение равное
Value1 = %1111000011110000
' %1111000011110000
Value2 = ~ Value1 ' Дополнение к переменной Value1
Print At 1,1, "Value1 = " Bin16 Value1 ' Отобразить на дисплее значение Value1
DelayMs 500 ' Пауза 0,5 сек
Print At 2,1, "Value2 = " Bin16 Value2 ' Отобразить на дисплее значение Value2
DelayMs 3000 ' Пауза 3 сек
'------------------------Демонстрация работы оператора с 32-разрядными значениями------------------------
Cls ' Очистить дисплей
DelayMs 500 ' Пауза 0,5 сек
' Присвоить переменной DWD1 двоичное значение равное
DWD1 =
%11110000111100001111000011110000
' %11110000111100001111000011110000
DWD2 = ~ DWD1 ' Дополнение к переменной DWD1.
Print At 1,1, "DWD1 = " BIN32 DWD1 ' Отобразить на дисплее значение DWD1
DelayMs 500 ' Пауза 0,5 сек
Print At 2,1, "DWD2 = " BIN32 DWD2 ' Отобразить на дисплее значение DWD2
DelayMs 3000 ' Пауза 3 сек
GoTo main ' Повторить главную программу

На рисунке 1 приведена модель complement.DSN, демонстрирующая работу математической операции


BITWISE COMPLEMENT '~'. Модель работает под управлением программы complement.bas.

Страница 74
http://terrarus.ucoz.ru/proton_plus_ide/proton/bitwise/complement/complement.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Оператор работы с битам BITWISE COMPLEMENT '~'

GIF

DSN

Рис. 1. Действующая модель complement.DSN.


Демонстрирация работы математической операции BITWISE COMPLEMENT '~'.
По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Примечание

Операция "Дополнение" может быть произведена над всеми типами переменных, кроме переменных с
плавающей запятой. Пытаясь дополнить переменную с плавающей запятой этот оператор произведет
синтаксическую ошибку.

Страница 75
http://terrarus.ucoz.ru/proton_plus_ide/proton/bitwise/complement/complement.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Логический оператор BITWISE OR T-

Операции поразрядной логики

BITWISE OR T-

Синтаксис

Result = Value1 | Value2

или

Value1 | Value2

Логический оператор BITWISE OR T- ( | ) выполняет операцию побитового логического сложения ("ПОБИТОВОЕ


ИЛИ") ( | ) двух значений.

Result - переменная, в которую помещается результат. Result может быть 8-, 16- или 32-разрядным
действительным числом.

Value1 и Value2 - 8-, 16- или 32-разрядные исходные значения. Они не могут быть числами с плавающей
запятой.

Каждый бит результата этой операции определяется слeдующими правилами:

Произносится          Записывается          Или записывается

0 ИЛИ 0 = 0                0 OR 0 = 0                  0 | 0 = 0

0 ИЛИ 1 = 1                0 OR 1 = 1                  0 | 1 = 1

1 ИЛИ 0 = 1                1 OR 0 = 1                  1 | 0 = 1

1 ИЛИ 1 = 1                1 OR 1 = 1                  1 | 1 = 1

В результате поразрядно возвращается 1, если в двух исходных значениях их соответствующие разряды содержат
разные битовые значения (0 и 1), и 0, если их соответствующие разряды оба содержат 0.

Пример 1

Dim Value1 As Byte ' Создать переменную Value1 типа Byte


Dim Value2 As Byte ' Создать переменную Value2 типа Byte
Dim Result As Byte ' Создать переменную Result типа Byte
Value1 = %00001111 ' Присвоение значения переменной Value1
Value2 = %10101101 ' Присвоение значения переменной Value2
' Выполнить операцию BITWISE OR T- ("ПОБИТОВОЕ ИЛИ")
Result = Value1 | Value2
' и присвоить результат переменной Result
Print Bin Result ' Отобразить на дисплее значение Result = %10101111
или  
Print Bin ( %00001111 | %10101101 ) ' Отобразить на дисплее результат операции OR ( %10101111 )

На рисунке 1 приведена действующая модель bitwise_or_t.DSN, демонстрирующая работу оператора BITWISE


OR T- с 8-, 16- и 32-разрядными числами. Модель работает под управлением программы bitwise_or_t.bas

Листинг программы bitwise_or_t.bas

' -------------------------------------------------Общие настройки--------------------------------------------------
Device = 16F877A ' Используемый микроконтроллер
XTAL = 20 ' Частота осциллятора 20 МГц
' -------------------------------------------Настройки подключения ЖКИ-------------------------------------------
Declare LCD_TYPE TOSHIBA ' Тип ЖКИ - на контроллере Toshiba - T6963
Declare LCD_DTPORT PORTD ' Порт данных
Declare LCD_WRPIN PORTE.2 ' Цепь управления WR
Declare LCD_RDPIN PORTE.1 ' Цепь управления RD
Declare LCD_CDPIN PORTA.1 ' Цепь управления CD
Declare LCD_CEPIN PORTE.0 ' Цепь управления CE
Declare LCD_RSTPIN PORTA.2 ' Цепь управления RST
' Количество пикселей по горизонтали у используемого
Declare LCD_X_RES 240
' монитора
' Количество пикселей по вертикали у используемого
Declare LCD_Y_RES 128
' монитора
'  Использовать шрифт 6 пикселей в ширину и 8 пикселей
Declare LCD_FONT_WIDTH 6
' в высоту
' -------------------------------------------------Настройки портов--------------------------------------------------
Страница 76
http://terrarus.ucoz.ru/proton_plus_ide/proton/bitwise/bitwise_or_t/bitwise_or_t.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Логический оператор BITWISE OR T-

Declare ALL_DIGITAL = On ' Сделать все порты цифровыми входами/выходами


' ----------------------------------------------Объявления переменных----------------------------------------------
Dim VR1 As Byte ' Cоздать переменную VR1 типа Byte
Dim VR2 As Byte ' Cоздать переменную VR2 типа Byte
Dim VD1 As Word ' Cоздать переменную VD1 типа Word
Dim VD2 As Word ' Cоздать переменную VD2 типа Word
Dim Result As Word ' Cоздать переменную Result типа Word
Dim D1 As DWord ' Cоздать переменную D1 типа DWord
Dim D2 As DWord ' Cоздать переменную D2 типа DWord
' --------------------------------------Присвоение первоначальных значений--------------------------------------
VR1 = %00001111 ' Присвоить 8-битное значение VR1
VR2 = %10101001 ' Присвоить 8-битное значение VR2
VD1 = %0000111100001111 ' Присвоить 16-битное значение VD1
VD2 = %1010100110101001 ' Присвоить 16-битное значение VD2
D1 = %00001111000011110000111100001111 ' Присвоить 32-битное значение D1
D2 = %10101001101010011010100110101001 ' Присвоить 32-битное значение D2
' ------------------------------------------------Главная программа--------------------------------------------------
Main: ' Метка начала главной программы
DelayMS 500 ' Пауза 0,5 сек
Cls ' Очистить дисплей ЖКИ
Print At 0,0, "BITVISE OR T-" ' Отобразить на ЖКИ надпись "BITVISE OR T-"
' ---------------------Демонстрация работы оператора AND с 8-разрядными значениями----------------------
Print At 1,0, "Example 8-bit numbers:" ' Отобразить на ЖКИ надпись "Example 8-bit numbers:"
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Print At 3,0, "VR1 =", Bin8 VR1 ' Отобразить на ЖКИ значение VR1
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Print At 4,0, "VR2 =", Bin8 VR2 ' Отобразить на ЖКИ значение VR2
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Result = VR1 | VR2 ' Выполнить операцию OR
Print At 5,0, "Result=", Bin8 Result ' Отобразить на ЖКИ значение Result
DelayMS 3000 ' Пауза 3 сек чтобы замедлить процесс
' ---------------------Демонстрация работы оператора AND с 16-разрядными значениями----------------------
Print At 7,0, "Example 16-bit numbers:" ' Отобразить на ЖКИ надпись "Example 16-bit numbers:"
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Print At 8,0, "VD1 =", Bin16 VD1 ' Отобразить на ЖКИ значение VD1
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Print At 9,0, "VD2 =", Bin16 VD2 ' Отобразить на ЖКИ значение VD2
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Print At 10,0, "VD1 | VD2=", Bin16 VD1 | VD2 ' Отобразить на ЖКИ результат операции
DelayMS 3000 ' Пауза 3 сек чтобы замедлить процесс
' ---------------------Демонстрация работы оператора AND с 32-разрядными значениями----------------------
Print At 12,0, "Example 32-bit numbers:" ' Отобразить на ЖКИ надпись "Example 32-bit numbers:"
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Print At 13,0, Bin30 D1 ' Отобразить на ЖКИ значение D1
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Print At 14,0, Bin30 D2 ' Отобразить на ЖКИ значение D2
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Print At 15,0, Bin30 D1 | D2 ' Отобразить на ЖКИ результат операции OR
DelayMS 10000 ' Пауза 10 сек чтобы замедлить процесс
GoTo main ' Повторить программу

Страница 77
http://terrarus.ucoz.ru/proton_plus_ide/proton/bitwise/bitwise_or_t/bitwise_or_t.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Логический оператор BITWISE OR T-

GIF

DSN

Рис. 1. Действующая модель bitwise_or_t.DSN, демонстрирующая работу операции BITWISE OR T-.


По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Примечание

Операция BITWISE OR T- может быть произведена над 8-, 16- и 32-разрядными числами, кроме чисел с
плавающей запятой. Побитовая операция BITWISE OR T- недопустима над переменными с плавающей
запятой.

Страница 78
http://terrarus.ucoz.ru/proton_plus_ide/proton/bitwise/bitwise_or_t/bitwise_or_t.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Оператор работы с битам BITWISE SHIFT LEFT '<<'

Операторы работы с битами

BITWISE SHIFT LEFT '<<'

Синтаксис

Variable << N

Операция BITWISE SHIFT LEFT '<<' выполняет побитовый сдвиг влево на определенное число бит содержимого
Variable. Освободившиеся места сдвинутых бит заполняются нулями.

Variable - может быть 8-, 16-, 32-разрядной постоянной или переменной.

N - количество разрядов на которое необходимо сдвинуть влево биты Variable,


N - может быть константой или переменной значения, которых может находиться в диапазоне:

- от 1 до 8 для Variable типа Byte;

- от 1 до 16 для Variable типа Word;

- от 1 до 32 для Variable типа DWord;

Пример 1

Листинг программы shift_left.bas


' Файл, подключаемый из внешней библиотеки
Include "PROTON18_4.INC"
' подпрограмм
Device = 18F452 ' Используемый микроконтроллер
'---------------------------------------Объявление переменных и их типов-----------------------------------------
Dim VR1 As Word ' Создать переменную VR1 типа Word
Dim DW1 As DWord ' Создать переменную DW1 типа DWord
Dim Loop As Word ' Создать переменную Loopтипа Word
main: ' Метка начала главной программы
'------------------------Демонстрация работы оператора с 16-разрядными значениями------------------------
Cls ' Очистить дисплей
DelayMs 500 ' Пауза 0,5 сек
VR1 = %1111111111111111 ' Присвоение значения переменной VR1
Print At 1,1, "VR1 =", Bin16 VR1 ' Отобразить на ЖКИ двоичное значение VR1
DelayMs 500 ' Пауза 0,5 сек
For loop = 0 To 16 ' Создать цикл на 17 проходов
' Сдвигать в цикле результат влево от = 0 до 16
Print At 2,1, "VR1<<",Dec2 loop ,"=", Bin16 VR1 << loop
' позиций и результаты отображать на ЖКИ
DelayMs 500 ' Пауза 0,5 сек
' Продолжить цикл если он не закончен, иначе
Next
' перейти к следующему оператору
DelayMs 3000 ' Пауза 3 сек
'------------------------Демонстрация работы оператора с 32-разрядными значениями------------------------
Cls ' Очистить дисплей
DelayMs 500 ' Пауза 0,5 сек
DW1 = %11111111111111111111111111111111 ' Присвоение значения переменной DW1
Print At 1,1, "DW1 =", Bin32 DW1 ' Отобразить на ЖКИ двоичное значение DW1
DelayMs 500 ' Пауза 0,5 сек
For loop = 0 To 32 ' Создать цикл на 33 прохода
' Сдвигать в цикле результат влево от = 0 до 32
Print At 2,1, "DW1<<",Dec2 loop ,"=", Bin32 DW1 << loop
' позиций и результаты отображать на ЖКИ
DelayMs 500 ' Пауза 0,5 сек
' Продолжить цикл если он не закончен, иначе
Next
' перейти к следующему оператору
DelayMs 3000 ' Пауза 3 сек
GoTo main ' Повторить главную программу

На рисунке 1 приведена модель shift_left.DSN демонстрирующая работу операции с битами BITWISE SHIFT
LEFT '<<'. Модель работает под управлением программы shift_left.bas.

Страница 79
http://terrarus.ucoz.ru/proton_plus_ide/proton/bitwise/shift_left/shift_left.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Оператор работы с битам BITWISE SHIFT LEFT '<<'

GIF

DSN

Рис. 1. Действующая модель shift_left.DSN демонстрирующая работу операции с битами BITWISE SHIFT LEFT
'<<'.
По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Примечание

Сдвиг битов числа влево на один разряд эквивалентно умножению числа на 2, например:

%100 << 1 = %1000     ' Здесь двоичное число %100 равно 4 десятичному, а двоичное %1000 равно 8
десятичному.

Сдвиг на n число бит имеет эффект умножению этого числа на 2 n, например:

%10 << 3 = %10000     ' Здесь двоичное число %10 равно 2 десятичному, а двоичное %10000 равно 16
десятичному.

Побитовая операция BITWISE SHIFT LEFT '<<' не допустима над переменными с плавающей запятой.

Страница 80
http://terrarus.ucoz.ru/proton_plus_ide/proton/bitwise/shift_left/shift_left.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Оператор работы с битам BITWISE SHIFT RIGHT '>>'

Операторы работы с битами

BITWISE SHIFT RIGHT '>>'

Синтаксис

Variable << N

Операция BITWISE SHIFT RIGHT '>>' выполняет побитовый сдвиг влево на определенное число байт
содержимого Variable. Освободившиеся места сдвинутых бит заполняются нулями.

Variable - может быть 8-, 16-, 32-разрядной постоянной или переменной.

N - количество разрядов на которое необходимо сдвинуть влево биты Variable,


N - может быть константой или переменной значения, которых может находиться в диапазоне:

- от 1 до 8 для Variable типа Byte;

- от 1 до 16 для Variable типа Word;

- от 1 до 32 для Variable типа DWord;

Пример 1

Листинг программы shift_right.bas


' Файл, подключаемый из внешней библиотеки
Include "PROTON18_4.INC"
' подпрограмм
Device = 18F452 ' Используемый микроконтроллер
'---------------------------------------Объявление переменных и их типов-----------------------------------------
Dim VR1 As Word ' Создать переменную VR1 типа Word
Dim DW1 As DWord ' Создать переменную DW1 типа DWord
Dim Loop As Word ' Создать переменную Loopтипа Word
main: ' Метка начала главной программы
'------------------------Демонстрация работы оператора с 16-разрядными значениями------------------------
Cls ' Очистить дисплей
DelayMs 500 ' Пауза 0,5 сек
VR1 = %1111111111111111 ' Присвоение значения переменной VR1
Print At 1,1, "VR1 =", Bin16 VR1 ' Отобразить на ЖКИ двоичное значение VR1
DelayMs 500 ' Пауза 0,5 сек
For loop = 0 To 16 ' Создать цикл на 17 проходов
' Сдвигать в циле результат вправо от = 0 до 16
Print At 2,1, "VR1>>",Dec2 loop ,"=", Bin16 VR1 >> loop
' позиций и результаты отображать на ЖКИ
DelayMs 500 ' Пауза 0,5 сек
' Продолжить цикл если он не закончен, иначе
Next
' перейти к следующему оператору
DelayMs 3000 ' Пауза 3 сек
'------------------------Демонстрация работы оператора с 32-разрядными значениями------------------------
Cls ' Очистить дисплей
DelayMs 500 ' Пауза 0,5 сек
DW1 = %11111111111111111111111111111111 ' Присвоение значения переменной DW1
Print At 1,1, "DW1 =", Bin32 DW1 ' Отобразить на ЖКИ двоичное значение DW1
DelayMs 500 ' Пауза 0,5 сек
For loop = 0 To 32 ' Создать цикл на 33 прохода
' Сдвигать в циле результат вправо от = 0 до 32
Print At 2,1, "DW1>>",Dec2 loop ,"=", Bin32 DW1 >> loop
' позиций и результаты отображать на ЖКИ
DelayMs 500 ' Пауза 0,5 сек
' Продолжить цикл если он не закончен, иначе
Next
' перейти к следующему оператору
DelayMs 3000 ' Пауза 3 сек
GoTo main ' Повторить главную программу

На рисунке 1 приведена модель shift_right.DSN демонстрирующая работу операции с битами BITWISE SHIFT
RIGHT '>>'. Модель работает под управлением программы shift_right.bas.

Страница 81
http://terrarus.ucoz.ru/proton_plus_ide/proton/bitwise/shift_right/shift_right.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Оператор работы с битам BITWISE SHIFT RIGHT '>>'

GIF

DSN

Рис. 1. Действующая модель shift_right.DSN демонстрирующая работу операции с битами BITWISE SHIFT RIGHT
'>>'.
По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Примечание

Побитовое операции не являются допустимыми над переменныи с плавающей запятой.

Сдвиг битов числа вправо на один разряд эквивалентно делению числа на 2, например:

%1000 >> 1 = %100     ' Здесь двоичное число %1000 равно 8 десятичному, а двоичное %100 равно 4
десятичному.

Сдвиг на n число бит имеет эффект деления этого числа на 2 n, например:

%1000 >> 3 = %1     ' Здесь двоичное число %1000 равно 8 десятичному, а двоичное %1 равно 1
десятичному.

Страница 82
http://terrarus.ucoz.ru/proton_plus_ide/proton/bitwise/shift_right/shift_right.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Логический оператор BITWISE XOR '^'

Операции поразрядной логики

BITWISE XOR '^'

Синтаксис

Result = Value1 ^ Value2

или

Value1 ^ Value2

Логический оператор BITWISE XOR '^'выполняет операцию "побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ" двух значений.

Result - переменная в которую помещается результат. Result может быть 8-, 16- или 32-разрядным
действительным числом.

Value1 и Value2 - 8-, 16- или 32-разрядные исходные значения. Они не могут быть числами с плавающей
запятой.

Каждый бит результата этой операции определяется слeдующими правилами:

0 XOR 0 = 0

0 XOR 1 = 1

1 XOR 0 = 1

1 XOR 1 = 0

В результате поразрядно возвращается 1 если в двух исходных значениях их соответствующие разряды содержат
разные битовые значения (0 и 1), и 0 если их соответствующие разряды содержат одинаковые битовые значение
( 0 и 0 или 1 и 1 ).

Пример 1

Dim Value1 As Byte ' Создать переменную Value1 типа Byte


Dim Value2 As Byte ' Создать переменную Value2 типа Byte
Dim Result As Byte ' Создать переменную Result типа Byte
Value1 = %00001111 ' Присвоить Value1 значение равное %00001111
Value2 = %10101101 ' Присвоить Value2 значение равное %10101101
' Выполнить операцию BITWISE AND '^' (ИСКЛЮЧАЮЩЕЕ ИЛИ)
Result = Value1 ^ Value2
' и присвоить результат переменной Result
Print Bin Result ' Отобразить на дисплее значение Result = %10100010
' Или  
Print Bin ( %00001111 ^ %10101101 ) ' Отобразить на дисплее результат операции AND ( %10100010 )

На рисунке 1 приведена действующая модель bitwise_xor.DSN демонстрирующая работу оператора BITWISE


XOR '^' с 8-, 16- и 32-разрядными числами. Модель работает под управлением программы bitwise_xor.bas

Листинг программы bitwise_xor.bas

' -------------------------------------------------Общие настройки------------------------------------------------
Device = 16F877A ' Используемый микроконтроллер
XTAL = 20 ' Частота осциллятора 20 МГц
' ------------------------------------------Настройки подключения ЖКИ------------------------------------------
Declare LCD_TYPE TOSHIBA ' Тип ЖКИ - на контроллере Toshiba - T6963
Declare LCD_DTPORT PORTD ' Порт данных
Declare LCD_WRPIN PORTE.2 ' Цепь управления WR
Declare LCD_RDPIN PORTE.1 ' Цепь управления RD
Declare LCD_CDPIN PORTA.1 ' Цепь управления CD
Declare LCD_CEPIN PORTE.0 ' Цепь управления CE
Declare LCD_RSTPIN PORTA.2 ' Цепь управления RST
' Количество пикселей по горизонтали у используемого
Declare LCD_X_RES 240
' монитора
Declare LCD_Y_RES 128 ' Количество пикселей по вертикали у используемого монитора
' Использовать шрифт 6 пикселей в ширину и 8 пикселей в
Declare LCD_FONT_WIDTH 6
' высоту
' ------------------------------------------------Настройки портов------------------------------------------------
Declare ALL_DIGITAL = On ' Сделать все порты цифровыми входами/выходами
' ---------------------------------------------Объявления переменных--------------------------------------------

Страница 83
http://terrarus.ucoz.ru/proton_plus_ide/proton/bitwise/bitwise_xor/bitwise_xor.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Логический оператор BITWISE XOR '^'

Dim VR1 As Byte ' Создать переменную VR1 типа Byte


Dim VR2 As Byte ' Создать переменную VR2 типа Byte
Dim VD1 As Word ' Создать переменную VD1 типа Word
Dim VD2 As Word ' Создать переменную VD2 типа Word
Dim Result As Word ' Создать переменную Result типа Word
Dim D1 As DWord ' Создать переменную D1 типа DWord
Dim D2 As DWord ' Создать переменную D2 типа DWord

' ------------------------------------Присвоение первоначальных значений-------------------------------------


VR1 = %00001111 ' Присвоить 8-битное значение VR1
VR2 = %10101001 ' Присвоить 8-битное значение VR2
VD1 = %0000111100001111 ' Присвоить 16-битное значение VD1
VD2 = %1010100110101001 ' Присвоить 16-битное значение VD2
D1 = %00001111000011110000111100001111 ' Присвоить 32-битное значение D1
D2 = %10101001101010011010100110101001 ' Присвоить 32-битное значение D2
' -----------------------------------------------Главная программа-------------------------------------------------
Main: ' Метка начала главной программы
DelayMS 500 ' Пауза 0,5 сек
Cls ' Очистить дисплей ЖКИ
Print At 0,0, "BITVISE XOR",$20,$27,$5E,$27 ' Отобразить на ЖКИ надпись "BITVISE XOR, '^'"

' ---------------------Демонстрация работы оператора XOR с 8-разрядными значениями--------------------


Print At 1,0, "Example 8-bit numbers:" ' Отобразить на ЖКИ надпись "Example 8-bit numbers:"
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Print At 3,0, "VR1 =", Bin8 VR1 ' Отобразить на ЖКИ значение VR1
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Print At 4,0, "VR2 =", Bin8 VR2 ' Отобразить на ЖКИ значение VR2
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Result = VR1 ^ VR2 ' Выполнить операцию XOR
Print At 5,0, "Result=", Bin8 Result ' Отобразить на ЖКИ значение Result
DelayMS 3000 ' Пауза 3 сек чтобы замедлить процесс

' --------------------Демонстрация работы оператора XOR с 16-разрядными значениями--------------------


Print At 7,0, "Example 16-bit numbers:" ' Отобразить на ЖКИ надпись "Example 16-bit numbers:"
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Print At 8,0, "VD1 =", Bin16 VD1 ' Отобразить на ЖКИ значение VD1
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Print At 9,0, "VD2 =", Bin16 VD2 ' Отобразить на ЖКИ значение VD2
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Print At 10,0, "VD1^VD2=", Bin16 VD1 ^ VD2 ' Отобразить на ЖКИ результат операции XOR
DelayMS 3000 ' Пауза 3 сек чтобы замедлить процесс

' --------------------Демонстрация работы оператора XOR с 32-разрядными значениями--------------------


Print At 12,0, "Example 32-bit numbers:" ' Отобразить на ЖКИ надпись "Example 16-bit numbers:"
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Print At 13,0, Bin30 D1 ' Отобразить на ЖКИ значение D1
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Print At 14,0, Bin30 D2 ' Отобразить на ЖКИ значение VD2
DelayMS 500 ' Пауза 0, 5 сек чтобы замедлить процесс
Print At 15,0, Bin30 D1^D2 ' Отобразить на ЖКИ результат операции XOR
DelayMS 10000 ' Пауза 10 сек чтобы замедлить процесс
GoTo main ' Повторить программу

Страница 84
http://terrarus.ucoz.ru/proton_plus_ide/proton/bitwise/bitwise_xor/bitwise_xor.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Логический оператор BITWISE XOR '^'

GIF

DSN

Рис. 1. Действующая модель bitwise_xor.DSN.


Демонстрация работы оператора BITWISE XOR '^' (побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ).
По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Замечание

Операция BITWISE XOR '^' может быть произведена над 8-, 16- и 32-разрядными числами, кроме чисел с
плавающей запятой. Побитовая операция BITWISE XOR '^' недопустима над числами с плавающей запятой.

Страница 85
http://terrarus.ucoz.ru/proton_plus_ide/proton/bitwise/bitwise_xor/bitwise_xor.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Оператор работы с битам ˆ DCD

Операторы работы с битами

DCD

Синтаксис

DCD n

Оператор DCD устанавливает заданный бит переменной в 1, а все остальные сбрасывает в 0. Его можно
применять к переменным типа Byte и Word.

Оператор DCD может принимать значения n от 0 до 15, и возвращает 16-битное число с соответствующим
разрядом установленым в 1, например:

Листинг программы dcd.bas

Include "PROTON18_4.INC" '  Файл подключаемый из внешней библиотеки подпрограмм


Device = 18F452 ' Используется 16-разрядный процессор
Dim VAR1 As Word ' Объявление переменной VAR1 типа Word
VAR1 = %1000000010101010 ' Задание первоначального значения VAR1
Print At 1,1, "VAR1 = ", BIN16 VAR1 ' Отобразить первоначальное значение VAR1
DelayMS 500 ' Пауза 0.5 сек
VAR1 = DCD 12 ' Установить 12 разряд в 1
Print At 2,1, "VAR1 DCD 12 = ", BIN16 VAR1 ' Отобразить значение VAR1
Stop  

На рисунке 1 приведена модель dcd.DSN демонстрирующая работу оператора DCD. Модель работает под
управлением программы dcd.bas.

GIF

DSN

Рис. 1. Действующая модель dcd.DSN демонстрирующая работу операции DCD.


По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Замечание

Оператор DCD пока еще не поддерживаем переменные типа DWord и Float. Поэтому он может работать
максимально с 16-битными числами, принимающими значения в диаппазоне от 0 до 65535.

Страница 86
http://terrarus.ucoz.ru/proton_plus_ide/proton/bitwise/dcd/dcd.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция Dig

Математические операторы PROTON+

Dig

Синтаксис

Dig

Dig возвращает указанную десятичную цифру 16-разряднoй положительной переменной, которая может
принимать значения от 0 до 65535.

Если переменная равна, например, десятичному числу 56789, то содержимое любого из пяти десятичных разрядов
может быть считано из него и присвоено другой переменной. Выбрать любой из пяти разрядов такого числа
можно указав в операторе Dig его номер, с 0 по 4, причем 0 соответствует самому младшему (правому) из
разрядов.

Пример 1

WRD1 = 56789  
Print Dec WRD1 Dig 0 ' Вывести на дисплей цифру нулевого разряда переменной WRD1 = 9
Print Dec WRD1 Dig 2 ' Вывести на дисплей цифру второго разряда переменной WRD1 = 7;
Print Dec WRD1 Dig 3 ' Вывести на дисплей цифру четвертого разряда переменной WRD1 = 6.

На рисунке 1 приведена модель dig.DSN демонстрирующая работу математической операции Dig. Модель
работает под управлением программы dig.bas.

GIF

DSN

Рис. 1. Действующая модель dig.DSN.


Демонстрация работы математического оператора Dig.
По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Листинг программы dig.bas

Include "PROTON18_4.INC" ' Файл подключаемый из внешней библиотеки подпрограмм


Device = 18F452 ' Используемый микроконтроллер
Dim WRD1 As Word ' Объявление переменной типа Word
Dim Loop As Byte ' Объявление переменной типа Byte
WRD1 = 56789 ' Присвоение значения переменной WRD1
main: ' Начало главной программы
Cls ' Очистить дисплей ЖКИ
DelayMS 500 ' Пауза 500 мсек
Print At 1,1, "WRD1 = ", Dec WRD1 ' Отобразить значение WRD1
DelayMS 500 ' Пауза 500 мсек
' Отобразить содержимое нулевого (младшего) разряда
Print At 2,1, "WRD1 DIG 0 = ", Dec WRD1 Dig 0
' WRD1
DelayMS 500 ' Пауза 500 мсек
Print At 3,1, "WRD1 DIG 2 = ", Dec WRD1 Dig 2 ' Отобразить содержимое второго разряда WRD1
DelayMS 500 ' Пауза 500 мсек
Страница 87
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/dig/dig.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Математическая операция Dig

Print At 4,1, "WRD1 DIG 4 = ", Dec WRD1 Dig 4 ' Отобразить содержимое четвертого разряда WRD1
DelayMS 5000 ' Пауза 5 сек
Cls ' Очистить экран ЖКИ
Print At 1,1, "WRD1= ", Dec WRD1 ' Отобразить значение WRD1
DelayMS 500 ' Пауза 500 мсек
For Loop = 0 To 4 ' Создать цикл из 5 шагов
Print At 3,1, "Loop      = ", Dec Loop ' Отобразить значение Loop
DelayMS 200 ' Пауза 0,2 сек
Print At 4,1, "WRD1 DIG = ", Dec WRD1 Dig Loop ' Отобразить цифру соответстсующего Loop разряда WRD1

DelayMS 1000 ' Пауза 1 сек


' Если цикл не закончился, то продолжить его,
Next
' иначе прейти к следующему оператору
DelayMS 2000 ' Пауза 2 сек
GoTo main ' Повторить процесс

Примечание

В такой форме, оператор Dig совместим c более ранними версиями языка BASIC для PIC-
микроконтроллеров. Однако эта версия оператора Dig не поддерживает переменные типа Dword и Float.
Разработчики сделали так потому, чтобы оператор Dig остался совместимым с компиляторами BASIC STAMP,
PICBASIC PRO и Mplab.

Страница 88
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/dig/dig.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic.Математический оператор Ncd

Математические операторы PROTON+

Ncd

Синтаксис

Ncd

Оператор Ncd возвращает порядковый номер старшего разряда двоичного числа имеющего значение 1 и
увеличивает этот номер еще на одну единицу. Поэтому результатом его работы могут быть значения от 1 до
16. Если все разряды числа равны 0, то возвращаемое значение будет равно 0.

Оператор Ncd используется для того, чтобы найти в двоичном числе самый старший разряд, значение которого
равно 1.

По другому можно сказать, что использование оператора Ncd позволяет быстро получить ответ на вопрос -
"Какой самый старший разряд рассматриваемого двоичного числа имеет значащий бит?"

Пример

WRD1 = %1101 ' Самый старший бит установленный в 1 этого числа имеет номер 3.
Print At 1, 1, Dec Ncd WRD1 ' Отобразить на дисплее значение Ncd для WRD1. Это будет число 4.

Примечание

Оператор Ncd не поддерживает (пока еще) переменные типа Dword и Float.

Страница 89
http://terrarus.ucoz.ru/proton_plus_ide/proton/maht/ncd/ncd.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Оператор работы с битам Rev

Операторы работы с битами

Rev

Синтаксис

VAR2 = VAR1 Rev n      (Эта форма синтаксиса применима для постоянных и переменных типов Byte, Word, Dword
).

где n - указатель количества разрядов, который может быть десятичной константой в диапазоне от 1 до 32 .

или

VAR1 Rev var                (Эта форма синтаксиса применима для постоянных и переменных только типов Byte и
Word ).

где var - указатель количества разрядов, который может быть десятичной константой или переменной
принимающей значения в диапазоне от 1 до 32 .

Свое имя оператор Rev получил от сокращенной записи слова "reverse - противоположный".

Этот оператор вначале зеркально переворачивает все биты указанной переменной, делая старшие биты
младшими, а младшие старшими, видимо по замыслу авторов в этом и состоит реверсирование разрядов, а затем
сдвигает все биты числа вправо, так чтобы справа оставалось только указанное количество разрядов (n) от
исходного числа.

Все остальные левые разряды числа обнуляются. Количество разрядов, которое может быть реверсировано
составляет от 1 до 32 .

Пример 1

Dim VAR1 As Byte ' Объявление переменной VAR1 и её типа


Dim VAR2 As Byte ' Объявление переменной VAR2 и её типа
VAR1 = %11111011 ' Присвоение значения VAR1
VAR2 = VAR1 Rev 8 ' Здесь значение VAR2 будет равно %11011111
VAR2 = VAR1 Rev 7 ' Здесь значение VAR2 будет равно %01101111
VAR2 = VAR1 Rev 6 ' Здесь значение VAR2 будет равно %00110111
VAR2 = VAR1 Rev 5 ' Здесь значение VAR2 будет равно %00011011
VAR2 = VAR1 Rev 4 ' Здесь значение VAR2 будет равно %00001101
VAR2 = VAR1 Rev 3 ' Здесь значение VAR2 будет равно %00000110
VAR2 = VAR1 Rev 2 ' Здесь значение VAR2 будет равно %00000011
VAR2 = VAR1 Rev 1 ' Здесь значение VAR2 будет равно %00000001

или

Dim DWD1 As DWord ' Объявление переменной DWD1 и её типа


Dim DWD2 As DWord ' Объявление переменной DWD2 и её типа
DWD1 = %10101010000000001111111110101100 ' Присвоение значения DWD1
DWD2 = DWD1 Rev 32 ' Реверсирование всех 32 разрядов числа DWD1
Print At 1,1, BIN32 DWD1 ' Отобразить на ЖКИ значение DWD1
' Отобразить на ЖКИ значение DWD2которое будет равно
Print At 2,1, BIN32 DWD2
' %00110101111111110000000001010101

Пример 2

Dim As Word ' Создать переменную VAR1 типа Word


VAR1 = %1111011111010011 ' Присвоение переменной VAR1 значения
Print At 1,1, BIN16 VAR1 Rev 16 ' Отобразить на ЖКИ двоичное значение VAR1 равное %1100101111101111
Print At 2,1, BIN16 VAR1 Rev 15 ' Отобразить на ЖКИ двоичное значение VAR1 равное %0110010111110111
Print At 3,1, BIN16 VAR1 Rev 14 ' Отобразить на ЖКИ двоичное значение VAR1 равное %0011001011111011
Print At 4,1, BIN16 VAR1 Rev 13 ' Отобразить на ЖКИ двоичное значение VAR1 равное %0001100101111101

Пример 3

Листинг программы rev.bas

' Включить из внешней библиотеки подпрограмм


Include "PROTON18_4.INC" ' файл с настройками для МК 18F452 и
' алфавитно-цифрового ЖКИ
Device = 18F452 ' Использовать микроконтроллер 18F452

Страница 90
http://terrarus.ucoz.ru/proton_plus_ide/proton/bitwise/rev/rev.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Оператор работы с битам Rev

'-------------------------------------Объявление переменных и их типов-------------------------------------


Dim VAR1 As Byte ' Объявление переменной VAR1 и её типа
Dim VAR2 As Word ' Объявление переменной VAR2 и её типа
Dim VAR3 As Word ' Объявление переменной VAR3 и её типа
Dim DW1 As DWord ' Объявление переменной DW1 и её типа
Dim DW2 As DWord ' Объявление переменной DW2 и её типа
' Объявление вспомогательной переменной X и
Dim X As Byte
' её типа
'----------------------Демонстрация работы оператора Rev c 8-разрядными числами ------------------------
main: ' Метка начала главной программы
Cls ' Очистить дисплей ЖКИ
VAR1 = %11111011 ' Присвоение значения переменной VAR1
DelayMS 500 ' Пауза 0,5 сек
Print At 1,1, "VAR1         = ", BIN8 VAR1 ' Отобразить двоичное значение VAR1
DelayMS 500 ' Пауза 0,5 сек
For X = 8 To 1 Step -1 ' Создать нисходящий цикл на 8 проходов
Print At 2,1, "VAR1 Rev ", Dec X, " = ", BIN8 VAR1 Rev X ' Отобразить реверсированное значение VAR1

DelayMS 1000 ' Пауза 1 сек


Next  

DelayMS 3000 ' Пауза 3 сек


'---------------------Демонстрация работы оператора Rev c 16-разрядными числами ------------------------
Cls ' Очистить дисплей ЖКИ
VAR2 = %1111011111010011 ' Присвоение значения переменной VAR1
DelayMS 500 ' Пауза 0,5 сек
Print At 1,1, "VAR2         = ", BIN16 VAR2 ' Отобразить двоичное значение VAR1
DelayMS 500 ' Пауза 0,5 сек
For X = 16 To 1 Step -1 ' Создать нисходящий цикл на 16 проходов
' реверсировать VAR2 и результат поместить в
VAR3 = VAR2 Rev X
' VAR3
Print At 2,1, "VAR2 Rev ", DEC2 X, " = ", BIN16 VAR3 ' Отобразить значение VAR3
DelayMS 1000 ' Пауза 1 сек
Next  
DelayMS 3000 ' Пауза 3 сек
'---------------------Демонстрация работы оператора Rev c 32-разрядными числами ------------------------
Cls ' Очистить дисплей ЖКИ
DW1 = %10101010000000001111111110101100 ' Присвоение значения переменной DW1
Print At 1,1, "DW1 =", BIN32 DW1 ' отобразить на ЖКИ значение DW1
DelayMS 500 ' Пауза 0,5 сек
' Реверсировать значение DW1 и присвоить
DW2 = DW1 Rev 32
' результат DW2
Print At 2,1, "DW2(32)=", BIN32 DW2 ' Отобразить значение DW2 (для Rev = 32)
DelayMS 2000 ' Пауза 2 сек
' Реверсировать значение DW1 и присвоить
DW2 = DW1 Rev 31
' результат DW2
Print At 2,1, "DW2(31)=", BIN32 DW2 ' Отобразить значение DW2 (для Rev = 31)
DelayMS 1000 ' Пауза 1 сек
' Реверсировать значение DW1 и присвоить
DW2 = DW1 Rev 30
' результат DW2
Print At 2,1, "DW2(30)=", BIN32 DW2 ' Отобразить значение DW2 (для Rev = 30)
DelayMS 2000 ' Пауза 2 сек
' Реверсировать значение DW1 и присвоить
DW2 = DW1 Rev 16
' результат DW2
Print At 2,1, "DW2(16)=", BIN32 DW2 ' Отобразить значение DW2 (для Rev = 16)
DelayMS 2000 ' Пауза 2 сек
' Реверсировать значение DW1 и присвоить
DW2 = DW1 Rev 8
' результат DW2

Страница 91
http://terrarus.ucoz.ru/proton_plus_ide/proton/bitwise/rev/rev.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Оператор работы с битам ˆ Rev

Print At 2,1, "DW2(8) =", BIN32 DW2 ' Отобразить значение DW2 (для Rev = 8)
DelayMS 2000 ' Пауза 2 сек
' Реверсировать значение DW1 и присвоить
DW2 = DW1 Rev 4
' результат DW2
Print At 2,1, "DW2(4) =", BIN32 DW2 ' Отобразить значение DW2 (для Rev = 4)
DelayMS 3000 ' Пауза 3 сек
GoTo main ' Повторить главную программу

На рисунке 1 приведена модель rev.DSN демонстрирующая работу математической операции Rev c различными
типами переменных - Byte, Word, DWord. Модель работает под управлением программы rev.bas.

GIF

DSN

Рис. 1. Действующая модель rev.DSN демонстрирующая работу математической операции Rev.


По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Страница 92
http://terrarus.ucoz.ru/proton_plus_ide/proton/bitwise/rev/rev.html
Aнатолий Медведев. Программирование PIC-микроконтроллеров в PROTON+IDE на ВASIC. Команда AdIn

Команды и директивы компилятора PROTON

ADIn

Синтаксис:

Variable = ADIn channel number

Команда ADIn предназначена для преобразования аналоговой величины в цифровой код. Эта команда делает
процесс аналогово-цифрового преобразования очень простым.

По команде ADIn считываются значения аналоговой величины в выбранном канале (channel number) АЦП, а затем
аналоговая величина преобразуется в цифровой код и результат сохраняется в переменной Variable.

Прежде чем использовать команду ADIn, необходимо соответствующий разряд регистра TRISA установить так,
чтобы нужные разряды (каналы) PORTA установились в состояние входа.

Например при использовании PORTA.5 в качестве входа для измерения аналогового сигнала следует сделать в
начале программы следующую запись:

TRISA = %00100000           ' Сделать канал (вывод) AN4 (PORTA.5) входом

В регистре ADCON1 соответствующие разряды должны быть также установлены так, чтобы разряды (выводы)
PORTA работали как аналоговые входы, а в некоторых случаях установить формат результата и источник
синхронизации. Для более подробной информации об этих регистрах и как их установить в нужный режим, для
определенного микроконтроллера, смотрите справочные данные приводимые в Datasheet's для конкретного PIC-
микроконтроллера фирмы Microchip.

Для команды ADIn существуют три директивы (определения):

1. Declare ADIN_RES 8 , 10 , или 12.

По этой директиве устанавливается разрядность АЦП-преобразования.


Если директива не используется, то результату АЦП-преобразования присваивается значение по умолчанию,
то есть максимально возможное разрешение для используемого типа PIC-микроконтроллера. Например, для
микроконтроллера типа 16F876А будет установлена разрешающая способность в 10 бит. Использование
этой директивы позволяет получить результат в 10 или 8 бит от 10-разрядных PIC-микроконтроллеров, но
никак не 10 бит от 8-разрядных типов.

2. Declare ADIN_TAD 2_FOSC, 8_FOSC, 32_FOSC, 64_FOSC, или FRC.

Эта директива устанавливает источник синхронизации для аналого-цифрового преобразования. Все PIC-
микроконтроллеры обладающие встроенным АЦП могут синхронизироваться от внешнего источника
синхронизации или от внутреннего, встроенного в микроконтроллер RC генератора.

При синхронизации от внешнего источника синхронизации возможны четыре варианта:

2_FOSC, 8_FOSC, 32_FOSC, и 64_FOSC - где 2, 8, 32, 64 это коэффициенты отношения к частоте
внешнего генератора. Вместо того, чтобы использовать эти названия для режимов источника
синхронизации, можно использовать значения от 0 до 3. Они отражают параметры настройки битов 6-
7 в регистре ADCON0.

Для выбора внутреннего источника синхронизации в директиве должно быть указано значение FRC. FRC -
это внутренний RC генератор микроконтроллера.

Следует отметить, что выбор неправильного источника синхронизации или его режима может привести к
недостаточной разрешающей способности, или вообще к отсутствию преобразовании. Поэтому будьте
внимательны при выборе источника синхронизации. Если у Вас есть сомнения в правильности Вашего
выбора источника синхронизации или его режима, то используйте в качестве источника синхронизации
внутренний RC генератор (FRC). Использование режима FRC приведет к небольшому уменьшению
разрешающей способности и меньшей скорости преобразования, но будет гарантированно работать. Вообще
FRC это настройка по умолчанию, если в программе отсутствует специальное объявление.

3. Declare ADIN_STIME 0 до 65535 микросекунд.

Установка этого параметра отводит время на зарядку внутренних измерительных конденсаторов прежде, чем
будет предпринята выборка результата. Этот параметр может иметь значения от 0 до 65535 микросекунд.
Слишком маленькое значение может привести к уменьшению разрешающей способности, но к увеличению
скорости работы программы. Слишком большое значение может привести к значительному уменьшению
скорости преобразования без дополнительного увеличения разрешающей способности.

Типичное значение для ADIn _STIME - 50 - 100. Экспериментирование с этим значением в каждом
конкретном случае может дать Вам оптимальное значение. Если эта директива не используется, то время
устанавливается по умолчанию равное 50 микросекундам.

Ниже приведены определения по умолчанию:

' Установить кол-во битов в результате АЦП-преобразования


Declare ADIN_RES = 10
' равными 10 (можно также установить 8, 10, или 12)

Страница 93
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/adin/adin.html
Aнатолий Медведев. Программирование PIC-микроконтроллеров в PROTON+IDE на ВASIC. Команда AdIn

Declare ADIN_TAD = FRC ' Установить синхронизацию от внутреннего RC генератора


Declare ADIN_STIME = 50 ' Установить время ожидания в 50 мкс перед началом преобразования
Dim VAR1 As Word ' Объявить переменную VAR1 размером WORD
TRISA = %00000001 ' Сделать канал (вывод) AN0 (PORTA.0) входом
ADCON1 = %10000000 ' Установить все выводы PORTA в режим АЦП
VAR1 = ADIn 0 ' Поместить результат преобразования из канала AN0 в переменную VAR1

Замечаниe

Если аналого-цифровые преобразования используются в пределах программы очень часто, то после команды
ADIn должна использоваться маленькая задержка в несколько микросекунд:

Again: ' Метка начала цикла


VAR1 = ADIn 3 ' Произвести АЦП в 3-ем канале и результат записать в переменную VAR1
DelayUS 1 ' Пауза 1 мкс
GoTo Again ' Вновь осуществить операцию АЦП

Эта задержка необходима, для того чтобы внутренние конденсаторы аналого-цифрового преобразователя
успевали полностью разряжаться.

Чтобы изучить работу АЦП PIC-микроконтроллера Вы можете воспользоваться приведенной на рисунке 1


действующей схемой типовой установки для простого исследования аналого-цифрового преобразователя PIC-
микроконтроллера.

GIF

DSN

Рис. 1. Действующая схема для изучения команды ADIn.


По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

Ниже приведен листинг программы которая производит 10-битное аналого-цифровое преобразование в канале
PORTA.0 и выводит его результат на двухстрочном ЖКИ в десятичном и двоичном виде. Результаты работы этой
программы приведены на рисунке 1.

Device = 16F873A ' Cконфигурировать программу для микроконтроллера 16F873A


XTAL = 4 ' Установить частоту генератора равной 4 МГц
'-------------------------------------Настройки АЦП-------------------------------------
Declare ADIN_RES 10 ' Pазрядность результата преобразования АЦП = 10
Declare ADIN_TAD FRC ' Источник тактирования АЦП = FRC
Declare ADIN_STIME 50 ' Установить время ожидания в 50 мкс перед началом преобразования
'-------------------------------Настройки подключения ЖКИ--------------------------------
Declare LCD_TYPE ALPHA ' Тип ЖКИ - буквенно -цифровой
Declare LCD_DTPIN PORTB.4 ' Порт данных ЖКИ
Declare LCD_ENPIN PORTB.3 ' Цепь управления E
Declare LCD_RSPIN PORTB.2 ' Цепь управления RS

Страница 94
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/adin/adin.html
Aнатолий Медведев. Программирование PIC-микроконтроллеров в PROTON+IDE на ВASIC. Команда AdIn

Declare LCD_INTERFACE 4 ' Разрядность шины данных


Declare LCD_COMMANDUS 2000 ' Задержка перед посылкой команды
Declare LCD_DATAUS 50 ' Задержка перед посылкой данных
Declare LCD_LINES 2 ' Количество строк ЖКИ
'------------------------------------Настройка портов------------------------------------
Declare PORTB_PULLUPS = OFF ' Выключить подтягивающие резисторы на PORTB
Declare ALL_DIGITAL = OFF ' Каждый порт выполняет свою функцию по умолчанию
TRISA = %00000001 ' Сделать канал (вывод) AN0 (PORTA.0) входом
ADCON1 = %10000000 ' Установить все выводы PORTA в режим АЦП
'---------------------------------Объявление переменных----------------------------------
Dim VAR1 As Word ' Объявить переменную VAR1 размером WORD
'--------------------------------Главная программа---------------------------------------
Again: ' Метка начала цикла главной программы
' Произвести АЦП в 0-ом канале и результат записать в
VAR1 = ADIn 0
' переменную VAR1
Print At 1, 1, "VAR1= " , DEC4 VAR1 ' Вывести в первой строке ЖКИ десятичное значение VAR1
Print At 2, 1, "VAR1= " , BIN10 VAR1 ' Вывести во второй строке ЖКИ двоичное значение VAR1
GoTo Again ' Вновь осуществить операцию АЦП

Замечания о настройке аналоговых входов PIC-микроконтроллеров

В PIC-микроконтроллерах регистр ADCON1 предназначен для того, чтобы выбирать, какими входами, цифровыми
или аналоговыми будут вывода порта PORTA

Кроме ADCON1, также отвечают за настройку выводов АЦП и регистры TRISA и TRISE. Если выводы микросхемы
настраиваются как аналоговые входы, то при этом должны быть установлены соответствующие биты в регистре
TRIS. Если соответствующий бит сброшен в 0, то вывод микросхемы настроен как цифровой выход со значениями
выходных напряжений U вых0=0V или U вых1=5V. Сам же модуль АЦП функционирует независимо от состояния
битов регистров TRISA и TRISE.

Настроенные как цифровой вход каналы будут преобразовывать входные аналоговые уровни в цифровые, что
однако не окажет влияния на точность преобразования в других каналах настроенных как входные аналоговые.

Смотрите также: RCIn, Pot

Страница 95
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/adin/adin.html
Aнатолий Медведев. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда ASM

Команды и директивы компилятора PROTON

ASM...ENDASM

Синтаксис:

ASM

assembler mnemonics         ; код на ассемблере

ENDASM

Или

@ assembler mnemonics      ; код на ассемблере

Команда конструкции ASM... ENDASM сообщает компилятору о том, что подпрограмма, находящаяся
между этими двумя строками написана на языке ассемблер и не должна интерпретироваться как бейсик-
подпрограмма. Это придает большую гибкость языку PROTON, позволяя включать в текст бейсик-
программы, подпрограммы, написанные на ассемблере.

Максимальный размер для раздела с текстом ассемблера не должен превышать 8 КБ. Под максимальным
размером понимается фактический размер источника, включая комментарии, на сгенерированный код.
Если текстовый блок является большим, чем это значение, необходимо ассемблерный блок разделить на
несколько частей конструкции ASM...ENDASM, либо просто включать его в отдельный файл.

Когда компилятор сталкивается с директивой ASM, он сбрасывает банк оперативной памяти в 0. То же


самое происходит, когда встречается команда ENDASM.

Следует отметить, что такое действие приводит к пустым тратам драгоценной памяти контроллера.
Поэтому добавление черточки после команд ASM и ENDASM удалит мнемонику сброса оперативной
памяти.

ASM-

ENDASM-

Поскольку оперативная память PIC-микроконтроллеров достаточно фрагментирована, то делайте это


только тогда, когда Вы достаточно уверены в том, что вы делаете.

Пример:

ASM
  bsf PORTA, 0 ; Установить в 1 бит 0 PORTA
bcf PORTB, 0 ; Установить в 0 бит 0 PORTB

ENDASM

Для получения дополнительной информации смотрите раздел по программированию на ассемблере.

Страница 96
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/asm/asm.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Box

Команды и директивы компилятора PROTON

Box

Синтаксис:

Box Set_Clear, Xpos Start, Ypos Start, Size

Команда предназначена для работы с графическим ЖК монитором, она рисует на экране квадрат (см. рис. 1).

Параметр Set_Clear определяет цвет, которым рисуется квадрат. Этот параметр может быть константой или
переменной.

При Set_Clear равным 1 на светлом поле экрана будет нарисован черный квадрат.

Если же Set_Clear присвоить значение 0, то квадрат будет закрашен новым цветом, то есть пикселы
квадрата станут светлыми на светлом фоне поля ЖКИ, совпадающим с цветом фона экрана (если конечно
фон был задан светлым). И если до этого на экране был квадрат, то теперь он будет стёрт.

Xpos Start - параметр, который указывает X (горизонтальную) позицию центра квадрата. Он может быть
константой или переменной. Его значения могут меняться от 0 до 127.

Ypos Start - параметр, который указывает Y (вертикальную) позицию центра квадрата. Он может быть
константой или переменной. Его значения могут меняться от 0 до 63.

Size - параметр, который указывает размер квадрата (в пикселях). Он может быть константой или переменной.
Значения его могут меняться от 0 до 255.

Пример:

' Нарисовать на экране ЖК монитора работающего под управлением контроллера Samsung KS0108
квадрат, размером 20 х 20 пикселей и с центром координат Х =63, Y = 32 , (см. рис. 1).

Device = 16F877A ' Применить микроконтроллер 16F877A


XTAL = 4 ' Использовать кварцевый резонатор 4 МГц.
'-------------------------------Настройки подключения ЖКИ--------------------------------
Declare LCD_TYPE = GRAPHIC ' Применить графический ЖКИ c контроллером Samsung KS0108
Declare LCD_DTPORT = PORTD ' Определение порта данных
Declare LCD_RSPIN = PORTC.1 ' Определение подключения линии RS
Declare LCD_ENPIN = PORTE.0 ' Определение подключения линии E
Declare LCD_RWPIN = PORTC.0 ' Определение подключения линии R/W
Declare LCD_CS1PIN = PORTE.1 ' Определение подключения линии CS1
Declare LCD_CS2PIN = PORTE.2 ' Определение подключения линии CS2
Declare LCD_CS_INVERT 1 ' Инвертировать порядок следования букв в строке
Declare ALL_DIGITAL = True ' Сделать все разряды PORTA и PORTE цифровыми
'--------------------------------------Объявление переменных---------------------------------------
Dim XPOS As Byte ' Создать переменную XPOS типа Byte
Dim SIZE As Byte ' Создать переменную SIZE типа Byte
Dim SET_CLR As Byte ' Создать переменную SET_CLR типа Byte
'----------------------------------------Главная программа-----------------------------------------
DelayMs 200 ' Пауза 200 миллисекунд для стабилизации ЖК- монитора
Cls ' Очистить экрана монитора от предыдущего изображения
XPOS = 63 ' Координаты центра квадрата по горизонтали
YPOS = 32 ' Координаты центра квадрата по вертикали
SIZE = 20 ' Установить размер квадрата в 20 пикселей
SET_CLR = 1 ' Установить цвет линии (черный), которым будет нарисован квадрат
Box SET_CLR , XPOS , YPOS , SIZE ' Рисование квадрата
Stop ' Остановить программу

Страница 97
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/box/box.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Box

GIF

DSN

Рис. 1. Действующая модель box.DSN для изучения команды Box


По этой ссылке можно скачать архив действующей модели box.DSN и необходимые для ее работы ASM и HEX файлы.

Примечание

В связи с тем, что пиксели на экране ЖК мониторов как правило, размещены непропорционально, т.е. по
вертикали они приблизительно в 1,5 раза плотнее, чем по горизонтали, квадрат, который будет нарисован на
экране монитора, выглядит как прямоугольник.

См. также: Circle, Line, LineTo, Plot, UnPlot.

Страница 98
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/box/box.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Branch

Команды и директивы компилятора PROTON

Branch

Синтаксис:

Branch Index, [Label1 {,...Labeln }]

Команда Branch подобна многоуровневому IF...THEN. Она осуществляет переход к метке, выбранной с
помощью переменного индекса. Затем она работает как команда GOTO.

Параметр - Index определяет одну из меток списка, и выполнение программы возобновляется с этой метки.
Например, если Index равен нулю, то программа переходит к первой метке в списке программы, например:

Branch Index, [metka1, metka2, metka3, metka4]

Если значение Index - равно единице, то программа переходит ко второй метке и так далее. Если Index больше
номера последней метки, то команда Branch никаких действие не предпринимает и осуществляется переход к
команде следующей после оператора Branch. В команде Branch могут использоваться до 255 меток. Для
процеcсоров серии 18Cxxx можно использовать 256 меток.

При создании программ для микроконтроллеров с 12- и 14 -разрядными ядрами, а также для
микроконтроллеров серии 17Cxxx, нужно помнить, что метка должна находится на той же самой странице
памяти программ, что и команда Branch.

Команда Branch - прежде всего, предназначена для использования с PIC-микроконтроллерами, которые имеют
одну страницу памяти с адресами ячеек 0-7FF (0-2047). Это микроконтроллеры с 12- и 14-разрядными ядрами,
а также и микроконтроллеры серии 17Cxxx. Если же у микроконтроллера память больше, и Вы не уверены что
метка перехода будет находиться на той же самой странице памяти, то вместо этой команды следует
использовать команду Branchl.

Так как команда Branch работает так же как и команда GoTo, то она может быть очень полезной когда
необходимо организовать структуру типа:

If VAR1 = 0 Then GoTo Lab_0 ' Если переменная VAR1 = 0 то идти к метке Lab_0
If VAR1 = 1 Then GoTo Lab_1 ' Если переменная VAR1 = 1 то идти к метке Lab_1
If VAR1 = 2 Then GoTo Lab_2 ' Если переменная VAR1 = 2 то идти к метке Lab_2

С помощью команды Branch запись этой структуры получается более простой:

Branch VAR1, [Lab_0 , Lab_1, Lab_2]

Она будет работать точно так же, как и в вышеупомянутой структуре работают команды If...Then GoТo.

Если значение Index находится вне диапазона, то есть, если значение VAR1 больше чем число меток [Lab_0 ,
Lab_1, Lab_2], то команда Branch, никаких действий не предпринимает и ход программы будет продолжен с
команды, следующий сразу после команды Branch.

Пример:

Листинг программы branch.bas

Device 16F84A ' Применить микрокнтроллер 16F84A


XTAL = 4 ' Установить частоту генератора равной 4 МГц
'-----------------------------------------------Настройки портов-----------------------------------------------
TRISA = %00000001 ' Сделать канал (вывод) RA0 входом
TRISB = %00000000 ' Сделать все каналы (выводы) RB0...RB7 выходами
'-------------------------------------------Объявление переменных-------------------------------------------
Dim INDEX As Byte ' Создать переменную INDEX размером Byte
'--------------------------------------Присвоение начальных значений---------------------------------------
INDEX = 2 ' Присвоить переменной INDEX значение равное 2
'----------------------------------------------Главная программа-----------------------------------------------
Start: ' Метка начала основной программы
' Создать задержку 0,5 сек, чтобы глаза успевали
DelayMS 500:
' заметить изменения
' Если нажата кнопка SB1 присвоить INDEX значение
If PORTA.0 = 0 Then INDEX = 3
' равное 3
PORTB = %00000000 ' Погасить все светодиоды
Branch INDEX,[Lab_0, Lab_1, Lab_2] ' Перейти к метке Lab_n, потому что INDEX = n
PORTB.3 = 1 ' Включить желтый светодиод D4
GoTo Start ' Перейти в начало программы

Страница 99
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/branch/branch.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Branch

' Включить красный светодиод D1 и присвоить INDEX значение


Lab_0: PORTB.0 = 1: INDEX = 2
' равное 2
GoTo Start ' Перейти в начало программы
' Включить зеленый светодиод D2 и присвоить INDEX значение
Lab_1: PORTB.1 = 1: INDEX = 0
' равное 0
GoTo Start ' Перейти в начало программы
' Включить голубой светодиод D3 и присвоить INDEX значение
Lab_2: PORTB.2 = 1: INDEX = 1
' равное 1
GoTo Start ' Перейти в начало программы

На рисунке 1 приведена схема действующей модели branch.DSN, иллюстрирующая работу команды Branch.
Схема работает под управлением программы branch.bas.

GIF

DSN

Рис. 1. Действующая модель branch.DNS, иллюстрирующая работу команды Branch.


По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

Вначале этого примера, переменной INDEX присваивается значение равное 2. Затем команда Branch адресует
основную программу к метке Lab_2, где командой "PORTB.2 = 1" включается голубой светодиод D3, а
переменной INDEX присваивается новое значение равное 1. Команда GoTo возвращает ход основной
программы к метке Start, то есть в начало программы.

Теперь команда Branch адресует основную программу к метке Lab_1. Здесь командой "PORTB.1 = 1"
включается зеленый светодиод D2 и переменной INDEX снова присваивается новое значение равное 0.
Команда GoTo снова возвращает ход основной программы к метке Start.

Так как переменная INDEX получила значение равное 0 команда Branch снова адресует основную программу,
но теперь уже к метке Lab_0. Здесь командой "PORTB.0 = 1" включается красный светодиод D1, а переменной
INDEX снова присваивается новое значение равное 2. Команда GoTo опять возвращает ход основной
программы к метке Start. Цикл замкнулся.

Если по какой-то причине переменная INDEX примет значение более 2, (в приведенном примере эта ситуация
моделируется нажатием на кнопку SB1, в этом случае переменной INDEX будет присвоено значение равное 3),
то команда Branch будет пропущена без исполнения и программа выполнит следующую за ней команду:

PORTB.3 = 1 ' Включить желтый светодиод D4

Следующая команда GoTo адресует программу к метке Start, а так как переменная INDEX не изменилась, её
значение так и осталось равное 3, то программа войдет в замкнутый цикл. Она будет вечно крутиться между
меткой START: и командой "PORTB.3 = 1", о чем будет сигнализировать желтый светодиод D4. В этой ситуации
основная программа будет игнорировать команду Branch.

Для того чтобы предусмотреть выход из такой ситуации необходимо, например, после команды

PORTB.3 = 1

переменной INDEX присвоить новое значение в диапазоне от 0 до 2.

Страница 100
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/branch/branch.html
Aнатолий Медведев. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда BRANCHL

Команды и директивы компилятора PROTON

BranchL

Синтаксис:

BranchL Index, [Label1 {,...Labeln }]

Команда BranchL работает точно также как и команда Branch, но она способна пересекать границы между 2-
килобайтными страницами памяти.

BranchL также заставляет программу переходить к различным ее местам, в зависимости от значений


переменной Index. Основное различие между командами BranchL и Branch заключается в том, что BranchL
может перейти к метке, которая находится на другой странице памяти. Но команда BranchL генерирует код,
который вдвое больше чем код, сгенерированный командой Branch.

Пример:

Листинг программы branchl.bas

Device 16F84A ' Применить микрокнтроллер 16F84A


XTAL = 4 ' Установить частоту генератора равной 4 МГц
'-----------------------------------------------Настройки портов-----------------------------------------------
TRISA = %00000001 ' Сделать канал (вывод) RA0 входом
TRISB = %00000000 ' Сделать все каналы (выводы) RB0...RB7 выходами
'-------------------------------------------Объявление переменных-------------------------------------------
Dim INDEX As Byte ' Создать переменную INDEX размером Byte
'--------------------------------------Присвоение начальных значений---------------------------------------
INDEX = 2 ' Присвоить переменной INDEX значение равное 2
'----------------------------------------------Главная программа-----------------------------------------------
Start: ' Метка начала основной программы
' Создать задержку 0,5 сек, чтобы глаза успевали
DelayMS 500:
' заметить изменения
' Если нажата кнопка SB1 присвоить INDEX значение
If PORTA.0 = 0 Then INDEX = 3
' равное 3
PORTB = %00000000 ' Погасить все светодиоды
Branchl INDEX, [Lab_0, Lab_1, Lab_2] ' Перейти к метке Lab_n, потому что INDEX = n
PORTB.3 = 1 ' Включить желтый светодиод D4
GoTo Start ' Перейти в начало программы
' Включить красный светодиод D1 и присвоить INDEX значение
Lab_0: PORTB.0 = 1: INDEX = 2
' равное 2
GoTo Start ' Перейти в начало программы
' Включить зеленый светодиод D2 и присвоить INDEX значение
Lab_1: PORTB.1 = 1: INDEX = 0
' равное 0
GoTo Start ' Перейти в начало программы
' Включить голубой светодиод D3 и присвоить INDEX значение
Lab_2: PORTB.2 = 1: INDEX = 1
' равное 1
GoTo Start ' Перейти в начало программы

На рисунке 1 приведена действующая модель branchl.DSN иллюстрирующая работу команды BranchL. Схема
работает под управление программы branchl.bas.

Страница 101
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/branchl/branchl.html
Aнатолий Медведев. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда BRANCHL

GIF

DSN

Рис. 1. Действующая модель branchl.DSN иллюстрирующая работу команды BranchL.


По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

Вначале этого примера, переменной INDEX присваивается значение равное 2. Затем команда BranchL адресует
основную программу к метке Lab_2, где командой "PORTB.2 = 1" включается голубой светодиод D3, а
переменной INDEX присваивается новое значение равное 1. Команда GoTo возвращает ход основной
программы к метке Start, то есть в начало программы.

Теперь команда BranchL адресует основную программу к метке Lab_1. Здесь командой "PORTB.1 = 1"
включается зеленый светодиод D2 и переменной INDEX снова присваивается новое значение равное 0.
Команда GoTo снова возвращает ход основной программы к метке Start.

Так как переменная INDEX получила значение равное 0 команда BranchL снова адресует основную программу,
но теперь уже к метке Lab_0. Здесь командой "PORTB.0 = 1" включается красный светодиод D1, а переменной
INDEX снова присваивается новое значение равное 2. Команда GoTo опять возвращает ход основной
программы к метке Start. Цикл замкнулся.

Если по какой-то причине переменная INDEX примет значение более 2, (в приведенном примере эта ситуация
моделируется нажатием на кнопку SB1, в этом случае переменной INDEX будет присвоено значение равное 3),
то команда BranchL будет пропущена без исполнения и программа выполнит следующую за ней команду:

PORTB.3 = 1    ' Включить желтый светодиод D4

Следующая команда GoTo адресует программу к метке Start, а так как переменная INDEX не изменилась, её
значение так и осталось равное 3, то программа войдет в замкнутый цикл. Она будет вечно крутиться между
меткой START: и командой "PORTB.3 = 1", о чем будет сигнализировать желтый светодиод D4. В этой ситуации
основная программа будет игнорировать команду BranchL.

Для того чтобы предусмотреть выход из такой ситуации необходимо, например, после команды

PORTB.3 = 1

переменной INDEX присвоить новое значение в диапазоне от 0 до 2.

Примечание

Если Вы уверены, что метки находятся на той же самой странице памяти, где находится и команда BranchL,
или если микроконтроллер не имеет больше одной страницы памяти, то следует использовать команду Branch
так как это уменьшит размер скомпилированного HEX-файла программы в отличие от команды BranchL.

Если же PIC-микроконтроллер имеет более одной страницы памяти, без команды BranchL не обойтись.

Страница 102
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/branchl/branchl.html
Aнатолий Медведев. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Break

Команды и директивы компилятора PROTON

Break

Команда Break предназначена для принудительного выхода из циклов типа For...Next, While...Wend или
Repeat...Until.

Команда Break подобна команде GoTo, но работает внутренне. Когда программа встречает команду Break,
компилятор вызывает переход к внутренней метке выхода из цикла.

Пример 1

Выйти из цикла For - Next, когда счет достигает 10

Include  "PROTON_4.INC"  
Dim VAR1 As Byte ' Объявление переменной VAR1 как Byte
DelayMs 200 ' Пауза 200 мсек для стабилизации ЖКИ
Cls ' Очистить экран ЖК монитора
For VAR1 = 0 To 39 ' Создать цикл в 40 проходов
Print At 1, 1, Dec VAR1 ' Вывести на экран значение переменной
If VAR1 = 10 Then Break ' Выйти из цикла, когда переменная VAR1 = 10
DelayMs 200 ' Задержка 200 мсек для того чтобы увидеть что произошло
Next ' Закрыть цикл For-Next
Print At 2, 1,"EXITED AT " , Dec VAR1 ' Вывести на экран значение переменной при нарушении цикла
Stop  

Пример 2

Выйти из цикла Repeat - Until когда счет достигает 10

Include  "PROTON_4.INC"  
Dim VAR1 As Byte ' Объявление переменной VAR1 как Byte
DelayMs 200 ' Пауза 200 мсек для стабилизации ЖКИ
Cls ' Очистить экран ЖК монитора
VAR1 = 0 ' Присвоение значения переменной
Repeat ' Создать цикл
Print At 1, 1, Dec VAR1 ' Вывести на экран значение переменной
IF VAR1 = 10 Then Break ' Выйти из цикла, когда переменная VAR1 = 10
DelayMs 200 ' Задержка 200 мсек для того чтобы увидеть что произошло
' Инкрементирование переменной VAR1 (то есть увеличение
Inc VAR1
значение переменной на 1).
Until VAR1 > 39 ' Прекратить цикл после 40 проходов
' Вывести на экран значение переменной, при нарушении
Print At 2, 1,"EXITED AT " , Dec VAR1
цикла
Stop  

Пример 3

Выйти из цикла While - Wend когда счет достигнет 10

Include  "PROTON_4.INC"  
Dim VAR1 As Byte ' Объявление переменной VAR1 как Byte
DelayMs 200 ' Пауза 200 мсек для стабилизации ЖКИ
Cls ' Очистить экран ЖК монитора
VAR1 = 0 ' Присвоение значения переменной
While VAR1 < 40 ' Создать цикл в 40 проходов
Print At 1, 1, Dec VAR1 ' Вывести на экран значение переменной
If VAR1 = 10 Then Break ' Выйти из цикла когда VAR1 = 10
DelayMs 200 ' Задержка 200 мсек для того чтобы увидеть что произошло
' Инкрементирование переменной VAR1 (то есть увеличение
Inc VAR1
значение переменной на 1).
Wend ' Закрыть цикл
Print At 2, 1,"EXITED AT " , Dec VAR1 ' Вывести на экран значение переменной при нарушении цикла
Stop  

Страница 103
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/break/break.html
Aнатолий Медведев. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Break

На рисунке 1 приведена действующая модель break.DSN демонстрирующая работу команды Вreak.

GIF

DSN

Рис. 1. Действующая модель break.DSN, демонстриющая работу команды Вreak.


Отображение результатов работы примеров 1, 2 и 3.
По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

Замечание

Если команда Break будет применена вне циклов: For...Next, While...Wend или Repeat...Until, то при попытке
компиляции будет выдана ошибка.

Страница 104
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/break/break.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда BStart

Команды и директивы компилятора PROTON

BStart

Синтаксис:

BStart

Команда BStart посылает условие Start по шине I 2C.

В связи с тем, что стандарт на протокол шины I 2C подразумевает наличие таких команд-условий как Start,
Stop, ACK и Restart, а стандартные команды языка Basic-PROTON - BusIn и BusOut несколько недостаточны,
поэтому и были введены эта и ей подобные команды. Команда BStart должна использоваться совместно с
командами BusIn и BusOut.

Команда BStart работает со всеми типами микроконтроллеров.

Пример:

Листинг программы bstart.bas

' -------------Организация связи с микросхемой EEPROM 24LC32 по интерфейсу I 2C------------

Device = 16F873A  
XTAL = 4  
' -------------------Настройка двухстрочного алфавитно-цифрового ЖКИ-----------------
Declare LCD_DTPIN = PORTB.4  
Declare LCD_RSPIN = PORTB.2  
Declare LCD_ENPIN = PORTB.3  
Declare LCD_INTERFACE = 4  
Declare LCD_LINES = 2  
Declare LCD_TYPE = 0  
Declare LCD_COMMANDUS = 2000  
Declare LCD_DATAUS = 50  
' ---------------------------------Настройка I 2C интерфейса-----------------------------
Declare SCL_PIN = PORTC.3  
Declare SDA_PIN = PORTC.4  
' ----------------------------Объявление переменных и массивов-------------------------
Dim Loop As Byte  
Dim Array[16] As Byte ' Определить массив из 16 элементов
' ------------------------------------Основная программа---------------------------------
Print At 1, 1, "Connect 24LC32"  
DelayMS 1000 ' Задержка 1 сек чтобы глаз успел заметить изменения
' ----------------Установка связи с ЕЕПРОМ типа 24LC32 по интерфейсу I 2C--------------
BStart ' Послать условие Start
BusOut %10100000 ' Послать на EEPROM команду записи
BusOut 0 ' Отправить старший байт адреса
BusOut 0 ' Отправить младший байт адреса
For Loop = 48 To 63 ' Создать цикл, содержащий ASCII коды от 0 до 15
BusOut Loop ' Послать значения LOOP на EEPROM
Next ' Закрыть цикл
BStop ' Послать условие STOP
DelayMS 10 ' Ждать 10 мс пока данные будут записаны в EEPROM
' ------------------------------Прием байтов по шине I 2C-------------------------------
BStart ' Послaть условие START
BusOut %10100000 ' Цель EEPROM, послать команду WRITE
BusOut 0 ' Отправить старший байт адреса
BusOut 0 ' Отправить младший байт адреса
BREStart ' Послaть условие RESTART
BusOut %10100001 ' Послать команду чтение из EEPROM
For Loop = 0 To 15 ' Создать цикл из 16 проходов

Страница 105
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/bstart/bstart.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда BStart

Array[Loop] = BusIn ' Загрузить массив полученными байтами


If Loop = 15 Then BStop : Else : BusAck ' Послать условие ACK иначе STOP
Next ' Завершить цикл
Print At 2, 1, Str Array ' Вывести на дисплей массив строковых переменных
Stop  

На рисунке 1 приведена действующая модель bstart.DSN демонстрирующая работу команды BStart. Модель
работает под управлением приведенной выше программы bstart.bas.

GIF

DSN

Рис. 1. Действующая модель bstart.DSN демонстрирующая работу команды BStart.


По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

Смотрите также:  BStop, BREStart, BusAck, BusIn, BusOut, HBStart, HBREStart, HBusAck, HBusIn, HBusOut.

Страница 106
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/bstart/bstart.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда BStop

Команды и директивы компилятора PROTON

BStop

Синтаксис:

BStop

Команда BStop посылает условие STOP по шине I 2C.

Смотрите пример в описании команды BStart

Страница 107
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/bstop/bstop.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда BREStart

Команды и директивы компилятора PROTON

BREStart

Синтаксис:

BREStart

Эта команда посылает условие рестарта по шине I 2C.

Смотрите пример в описании команды BStart

Страница 108
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/brestart/brestart.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда BusAck

Команды и директивы компилятора PROTON

BusAck

Синтаксис:

BusAck

Команда BusAck посылает условие подтверждения по шине I 2C.

Смотрите пример в описании команды BStart

Страница 109
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/busack/busack.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда CALL

Команды и директивы компилятора PROTON

Call

Синтаксис:

Call Label

По этой команде вызывается подпрограмма на ассемблере расположенная после метки Label.

Обычно, для того чтобы выполнить некоторую подпрограмму в Бейсике используется команда Gosub. Если же
подпрограмма написана на ассемблере, то в этом случае необходимо использовать команду Call.

Очень важное различие между командами Gosub и Call заключается в следующем:

при использовании команды Call, существование метки не проверяется до компиляции программы;


при использовании команды Call происходит обращение к подпрограмме написанной на ассемблере, что
недоступно в команде Gosub. Но это еще означает, что любые выявленные ошибки после метки Label
будут ошибками на языке ассемблера.

Пример:

MainProgram: ' Программа моргания светодиодом, подключенным к порту PORTB.0


       PORTB.0 = 0 ' Погасить светодиод
' Выполнить подпрограмму ассемблера расположенную после метки
       Call Zaderzhka
' Zaderzhka
       PORTB.0 = 1 ' Включить светодиод
' Выполнить подпрограмму ассемблера расположенную после метки
       Call Zaderzhka
' Zaderzhka
GoTo MainProgram ' Переход в начало главной программы
ASM ' Начало фрагмента кода на ассемблере

' Задержка 1 000 000 машинных циклов. Длительность задержки


      Zaderzhka:  
' 1 секундa. Частота задающего генератора 4 МГц.
  movlw      .30  
  movwf      Reg_1  
  movlw      .49  
  movwf      Reg_2  
  movlw      .6  
  movwf      Reg_3  
  decfsz      Reg_1,F  
  GoTo        $-1  
  clrwdt  
  decfsz      Reg_2,F
  GoTo        $-4
  decfsz      Reg_3,F
  GoTo        $-6
  nop      
  nop      
      Return ' Возврат из подпрограммы ассемлера в основную программу
ENDASM ' Конец фрагмента кода на ассемблере

Замечание

Команду Call следует использовать только в случае, если нужная подпрограмма находится на той же странице
памяти, на которой находится и основная программа. В случае использования микроконтроллеров с 16-
разрядными ядрами, это ограничение уже не важно, поскольку такие микроконтроллеры имеют более
линейную организацию памяти.

Смотрите также: GoSub, GoTo

Страница 110
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/call/call.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда CData

Команды и директивы компилятора PROTON

CData

Синтаксис:

CData { alphanumeric data }

Команда CData сохраняет данные непосредственно в перепрограммируемой flash-памяти микроконтроллера. Эта


команда доступна только для PIC-микроконтроллеров имеющих перепрограммируемую flash-память, таких как
16F87x и более новых серий. Для доступа к этим данным используются команды CRead и CWrite

Alphanumeric data - это алфавитно-цифровые данные, которые могут быть записаны в основную память
микроконтроллера. Они могут быть любого типа, включая строковые переменные, и принимать любые
значения, могут быть заключенны в кавычки ("..."), или могут быть просто числовыми значениями без
кавычек.

Пример 1.

' Необходимо использовать микроконтроллер с перепрограммируемой


Device = 16F877
' flash-памятью
Dim VAR1 As Byte ' Cоздать переменную типа Byte
VAR1 = CRead 2000 ' Cчитать данные по адресу 2000 и присвоить их переменной VAR1
Org 2000 ' Установить адрес в памяти куда будет записывать команда CData данные
CData 120 ' Записать в память значение 120 по установленному адресу

В примере 1, данные будут сохранены по адресу 2000 в памяти PIC-микроконтроллера. Для чтения этих данных
можно использовать команду CRead.

В командах CRead и CWrite можно также использовать метку, как адрес в памяти (cм. пример 2).

Пример 2.

Эта программа считывает с помощью команды CRead 10 значений из памяти по адресам, определяемым
параметром Loop, и выводит их на дисплей. На экране дисплея в результате отображается фраза "HELLO
WORLD" (см. рис. 1).

Листинг программы cdata2.bas

' Включить внешний файл содержащий типовые настройки


Include "PROTON_4.INC"
' микроконтроллера 16F877 и алфавитно-цифрового ЖКИ
Dim DByte As Byte ' Создать переменную DByte типа Byte
Dim Loop As Byte ' Создать переменную Loop типа Byte
main: ' Метка начала главной программы
Cls ' Очистить дисплей ЖКИ
DelayMs 500 ' Пауза 0,5 сек чтобы замедлить процесс
For Loop = 0 To 10 ' Создать внутренний цикл на 11 шагов
DByte = CRead ADDRESS + Loop ' Cчитать значение из памяти по адресу: ADDRESS + LOOP
Print At 1, Loop + 1, DByte ' Отобразить на дисплее считанное значение Dbyte
DelayMs 500 ' Пауза 0,5 сек чтобы замедлить процесс
'  Если переменная Loop не достигла значения равного 10, то продолжить
Next
' работу внутреннего цикла, иначе перейти к следующему оператору
DelayMs 2000 ' Пауза 2 сек чтобы замедлить процесс
GoTo ' Повторить главную программу
' Oстановка микроконтроллера если программа несанкционированно вышла
Stop
' за пределы главной программы
' Метка начала адреса в основной памяти микроконтроллера по которому
ADDRESS:
' размещена строка текста "HELLO WORLD"
CData "HELLO WORLD" ' Создадить строку текста во FLASH памяти

На рисунке 1 приведена модель cdata2.DSN, демонстрирующая работу оператора Cdata. Модель работает под
управлением программы cdata2.bas.

Страница 111
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/cdata/cdata.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда CData

GIF

DSN

Рис. 1. Схема действующeй модели cdata2.DSN


Демонстрация работы команды Cdata.
По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

Используя комбинацию команд, CRead и Print, вышеупомянутая программа может быть записана следующим
образом:

' Считать из памяти и вывести на дисплей значения находящиеся


Print CRead Address + Loop
' по адресу ADDRESS + LOOP

Для того, чтобы записать в память некоторые значения используется команда CWrite которая функционирует по
тем же правилам, что и команда CRead (cм. пример 3).

Пример 3.

' Использовать микроконтроллер с перепрограммируемой


Device = 16F877
' flash-памятью
Dim DByte As Byte ' Создать переменную DByte типа Byte
Dim Loop As Byte ' Создать переменную Loop типа Byte
CWrite Address , [ "HELLO WORLD" ] ' Запиcать строку символов во flash-память
For Loop = 0 To 9 ' Создать цикл до 10
' Cчитать значение из памяти по адресу: ADDRESS + LOOP
Print CRead Address + Loop
' и отобразить его на дисплее
Next ' Переход к следующему шагу цикла
Stop ' Остановить программу
ADDRESS: ' Метка начала таблицы данных созданной командой CData
CData 32, 32, 32, 32, 32, 32, 32, 32, 32, 32 ' Зарезервировать 10 знакомест во flash-памяти МК

Примечания 1

Обратите внимание на то, что в команде CWrite допускается использовать и строку текста (как это
показано в примере 3). Такая возможность позволяет использовать PIC-контроллер для хранения и поиска
данных.

Необходимо отметить, что для того чтобы использовать в программе команды CData, CRead и CWrite,
необходимо отключить защиту от записи в регистре конфигурации. При использовании директивы Config
параметр WRTE_ON должен быть включен в список параметров этой директивы, например:

Config HS_OSC, WDT_ON, WRTE_ON, PWRTE_ON, BODEN_OFF, LVP_OFF, CP_OFF, DEBUG_OFF

Поскольку микроконтроллеры с 14-разрядным ядром способны сохранять 14-разрядные значения, то в их


flash-памяти значения больше чем 16383 ($3FFF) не могут быть сохранены.

Еще одно очень важное замечание! Будьте внимательны к тому чтобы не записать поверх существующих

Страница 112
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/cdata/cdata.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда CData

значений кода программы новых значений, а также помните, что все PIC-микроконтроллеры с flash-памятью
имеют конечное количество циклов записи (приблизительно 1000).

Требования к микроконтроллерам с 16-разрядным ядром.

Микроконтроллеры серии 18Fxxx- ориентированы на работу со значениями типа Byte, в отличии от


микроконтроллеров с 14-разрядными ядрами, которые ориентированны на использование значений размером в
Word, поэтому таблицы CData должны содержать четное число значений, в противном случае, при чтении из
таблиц последних значений, могут произойти искажения считанных данных, например:

EVEN:   CData 1,2,3,"123" ' Зарезервировать 10 знакомест во FLASH -памяти


ODD:      CData 1,2,3,"12" ' Зарезервировать 10 знакомест во FLASH -памяти

Форматирование таблиц CDATA для микроконтроллеров с 16-битными ядрами.

Иногда бывает необходимо создать таблицу известного формата для её данных. Например, для каждого значения
всей базы значений необходимо отвести по 4 байта пространства памяти, хотя некоторые значения этой базы
будут занимать только по 1 или 2 байта. Такая cтрока кода

CData 100000, 10000, 1000, 100, 10, 1

будет неравномерно использовать пространство flash-памяти, так как каждый элемент этих данных требует
различных размеров места памяти для своего хранения. Для значения 100000 потребуется 4 байта пространства
памяти, для 10000 и 1000 требуется по 2 байта, а 100, 10 и 1 лишь по 1 байту.

Чтение этих значений оператором CRead создаст ошибки, потому что нет способа заранее узнать, какое
количество байт нужно для каждого прочитанного элемента, чтобы при чтении не разделить или не соединить в
один элемент рядом прочитанные значения.

Решение этой проблемы заключается в использовании указателей форматирования, чтобы любые значения,
записанные командой CData в flash-память микроконтроллера, занимали заранее отведенное количество байт. К
таким указателям относятся ключевые слова:

Byte,
Word,
Dword,
Float.

Размещение одного из этих указателей форматирования перед каждым значением, определит его сохранение во
flash-памяти, командой CData, определенной длины, например:

CData Dword 100000, Dword 10000, Dword 1000, Dword 100 , Dword 10, Dword 1

Каждое из этих значений будет занимать во flash-памяти по 4 байта, независимо от их величины.

Указатель Byte заставит значения занимать лишь по одному байту пространства памяти, независимо от величины
этих значений. Значения выше 255 будут усечены до младшего байта.

Указатель Word заставит значения занимать по два байта пространства памяти, независимо от их величины.
Любые значения выше 65535 будут усечены до 2 младших байтов, а любое значение меньше 255 будут дополнено
до 2 байтов.

Указатель DWord отведёт для каждого из значений, независимо от их величины, по четыре байта пространства
памяти. Любое значение меньше 65535 будет дополнено до 4 байтов.

Указатель Float переопределит тип значений и сделает их типом с плавающей запятой, которые всегда занимают
по 4 байта пространства памяти.

Если все значения в таблице CData должны занимать по одинаковому количество байт, то можно использовать
следующую форму записи оператора CData:

CData As DWord 100000, 10000, 1000, 100, 10, 1

Если значения в таблице CData будут занимать не одинаковое количество байт, но заранее известны их
максимальные значения, то можно использовать в операторе CData различные указатели форматирования,
например:

CData DWord 100000, Word 10000, Word 1000, Byte 100, Byte 10, Byte1, Float 3.14, Float 0.5, Float
345.775

В следующем примере 4 показано форматирование таблицы CData при помощи указателя форматирования
DWORD.

Пример 4

Листинг программы cdata4.bas

' Преобразовать значение типа DWord в строковый массив


' Использовать только основные BASIC команды
' Подобный принцип реализован в команде St$

Страница 113
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/cdata/cdata.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда CData

'---------------------------------Настройки микроконтроллера и ЖКИ---------------------------------


' Подключить внешний файл с настройками по умолчанию
Include "PROTON18_4.INC"
' для 18F452 с 16-разрядным ядром и настройками ЖКИ
'---------------------------------------Объявление переменных----------------------------------------
Dim P10 As Dword ' Создать пременную P10 типа DWord
Dim CNT As Byte ' Создать пременную CNT типа Byte
Dim J As Byte ' Создать пременную J типа Byte
' Cоздать переменную VALUE для хранения значения
Dim VALUE As Dword
' подлежащего преобразованию
' Создать строковую переменную для хранения
Dim STRING1[11] As Byte ' преобразованного значения и способную хранить
' 11 элементов типа Byte
' Создать переменную PTR для указателя в пределах
Dim PTR As Byte
' байтового массива
main: ' Метка начала главной программы
DelayMS 500 ' Пауза 0,5 сек для стабилизации микроконтроллера
Cls ' Очистить экран ЖКИ
Clear ' Очистить всю оперативную память
VALUE = 1234576 ' Загрузить в переменную VALUE значение для преобразования
Print At 1, 1, "VALUE = ", Dec VALUE ' Отобразить на дисплее десятичное значение VALUE
' Отобразить на дисплее первоначальное содержимое
Print At 2, 1, "STRING1= ", Str STRING1
' строковой переменной
DelayMS 2000 ' Пауза 2 сек чтобы замедлить процесс
GoSub DWORD_TO_STR ' Перейти к подпрограмме конвертации
Print At 2, 1, "STRING1= ", Str STRING1 ' Отобразить на дисплее результат преобразования
DelayMS 2000 ' Пауза 2 сек чтобы замедлить процесс
GoTo main ' Повторить главную программу
' Остановить программу если она несанкционированно
Stop
' вышла за пределы глвной преграммы
'--------------------------------------Подпрограмма конвертации--------------------------------------
' Преобразовать значения DWORD в строковый массив
' Преобразовать значение и разместиь его в переменной VALUE1
' Байтовый массив 'STRING1' создан с эквивалентом ASCII
DWORD_TO_STR: ' Метка начала программы конвертации
PTR = 0 ' Присвоить переменной PTR значение равное 0
J= 0 ' Присвоить переменной J значение равное 0
   
Repeat ' Начало цикла Repeat...Until
' Прочитать значение из таблицы DWORD_TBL по адресу
P10 = CRead DWORD_TBL + (J * 4) ' определяемым выражением (DWORD_TBL + (J * 4))
' и присвоить его переменной Р10
CNT = 0 ' Присвоить переменной CNT значение равное 0
' Если условие VALUE >= P10 истинно, то выполнить
следующие
' операторы (VALUE = VALUE - P10: Inc CNT), если ложно, то
While VALUE >= P10 ' перейти к оператору расположенному после команды Wend
VALUE = VALUE - P10 ' Выполнить операцию вычитания
Inc CNT ' Инкрементировать (увеличить на единицу) значение CNT
Wend ' Завершить оператор While...Wend
   
If CNT <> 0 Then ' Если CNT не равно 0, то
' Загрузить в строковую переменную текущее значение CNT и
STRING1[PTR] = CNT + "0"
' объединить его с нулем
Inc PTR ' Инкрементировать (увеличить на единицу) значение PTR
EndIf ' Конец оператора If
   
Inc J ' Инкрементировать (увеличить на единицу) значение J
Until J > 8 ' Выйти из цикла Repeat...Until при достижении условия J > 8
   

Страница 114
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/cdata/cdata.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда CData

' Загрузить в строковую переменную значение VALUE и


STRING1[PTR] = VALUE + "0"
' объединить его с нулем
Inc PTR ' Инкрементировать (увеличить на единицу) значение PTR
STRING1[PTR] = 0 ' Добавить ПУСТОЙ УКАЗАТЕЛЬ в конце строки
Return ' Вернуться из подпрограммы в главную программу
   
DWORD_TBL: ' Метка начала таблицы CData
CData As Dword 1000000000, 100000000, 10000000, 1000000, 100000, 10000, 1000, 100, 10
' Таблица CData отформатирована для сохранения всех её элементов как 32-битных значений.
' Это означает, что для каждого значения требуется по 4 байта пространства flash-памяти

На рисунке 2 приведена модель cdata4.DSN, демонстрирующая работу оператора Cdata с указателем


форматирования DWord. Модель работает под управлением программы cdata4.bas.

GIF

DSN

Рис. 2. Схема действующeй модели cdata4.DSN


Демонстрация работы команды Cdata с указателем форматирования DWord.
По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

Использование имен меток как указателей на другие таблицы данных

Имена меток нескольких таблиц данных можно использовать в качестве списка значений и хранить их в
отдельной таблице CData. Это позволит обращаться к другим таблицам данных, используя их адреса как данные,
которые полученны из отдельной таблицы CData (см. пример 5).

Пример 5

Листинг программы cdata5.bas

' Получить из отдельной таблицы адреса двух других таблиц STRING1: и STRING2:,
'а затем отобразить на ЖКИ текст, хранящийся в них.
'---------------------------------Настройки микроконтроллера и ЖКИ---------------------------------
' Включить внешний файл с настройками по умолчанию
Include "PROTON18_4.INC"
' для 18F452 с 16-разрядным ядром и настройками ЖКИ
'---------------------------------------Объявление переменных----------------------------------------
Dim ADDRESS As Word ' Создать пременную ADDRESS типа Word
Dim LOOP As Word ' Создать пременную LOOP типа Word
Dim DATA_BYTE As Byte ' Создать пременную DATA_BYTE типа Byte
main: ' Метка начала главной программы
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
Cls ' Очистить экран ЖКИ
ADDRESS = CRead ADDR_TABLE ' Получить адрес первой таблицы STRING1
While 1 = 1 ' Создать первый внутренний цикл
DATA_BYTE = CRead ADDRESS ' Читать в цикле каждый символ из первой таблицы STRING1:

Страница 115
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/cdata/cdata.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда CData

' Если прочитанные данные равны 0, то перейти к метке


If DATA_BYTE = 0 Then EXIT_LOOP1
' EXIT_LOOP1:
Print DATA_BYTE ' Отобразить на ЖКИ содержимое переменной DATA_BYTE
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
' Инкрементировать (увеличить на единицу) значение
Inc ADDRESS
' переменной ADDRESS
' Закрыть вервый цикл образованный операторами
Wend
While...Wend
DelayMS 2000 ' Пауза2 сек чтобы замедлить процесс
EXIT_LOOP1: ' Метка EXIT_LOOP1
Cursor 2, 1 ' Установить курсор ЖКИ в начало второй строки
ADDRESS = CRead ADDR_TABLE + 2 ' Прочитать адрес второй строки STRING2
While 1 = 1 ' Создать второй внутренний цикл
Data_BYTE = CRead ADDRESS ' Читать в цикле каждый символ из второй таблицы STRING2:
' Если прочитанные данные равны 0, то перейти к
If DATA_BYTE = 0 Then EXIT_LOOP2
' метке EXIT_LOOP2:
Print DATA_BYTE ' Отобразить на ЖКИ содержимое переменной DATA_BYTE
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
' Инкрементировать (увеличить на единицу) значение
Inc ADDRESS
' переменной ADDRESS
Wend ' Закрыть второй цикл образованный операторами While...Wend
EXIT_LOOP2: ' Метка EXIT_LOOP2
DelayMS 2000 ' Пауза2 сек чтобы замедлить процесс
GoTo main ' Повторить главную программу
' Остановить программу если она несанкционированно
Stop
' вышла за пределы глвной преграммы
'---------------------------------------Таблица данных CData----------------------------------------
' Метка начала первой таблицы в которой хранятся адреса
ADDR_TABLE: двух
' других таблиц CData STRING1: и STRING2:
CData As Word STRING1, STRING2 ' Таблица с адресами двух других таблиц
STRING1: ' Метка начала первой таблицы с данными
CData "HELLO", 0 ' В таблице STRING1: хранится текст "HELLO"
STRING2: ' Метка начала второй таблицы с данными
CData "WORLD", 0 ' В таблице STRING2: хранится текст "WORLD"

На рисунке 3 приведена модель cdata5.DSN, демонстрирующая работу оператора Cdata с несколькими


таблицами данных. Модель работает под управлением программы cdata5.bas.

GIF

DSN

Рис. 3. Схема действующeй модели cdata5.DSN

Страница 116
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/cdata/cdata.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда CData

Демонстрация работы команды Cdata с несколькими таблицами данных.


По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

Примечание 2

Указатели форматирования нельзя применять c операторами CData в программах для микроконтроллеров с


14-разрядными ядрами, так как они могут содержать двоичные числа состоящее всего из 14-бит, а их
максимальные значения не могут быть больше $ 3FFF (16383).

Страница 117
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/cdata/cdata.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Cf_Init

Команды и директивы компилятора PROTON

CF_Init

Синтаксис:

CF_Init

Команда CF_Init предназначена для инициализации цепей CF_Sector, CF_Read и CF_Write, которые
используются при работе с устройствами Compact Flash.

CF_Init устанавливает выводы микроконтроллера, используемые для работы с карточкой Compact Flash
соответственно в состояние входа или выхода. Команда CF_Init должна быть располагаться в программе ранее
любых команд, которые будут задействованы при обращении к Compact Flash .

По сути то, что выполняет команда CF_Init можно показать командами BASIC, перечисленными ниже:

Low CF_DTPORT ' Установить цепи данных на выход и в низкое логическое состояние
Low CF_ADPORT ' Установить цепи адреса на выход и в низкое логическое состояние
Output CF_WEPIN ' Установить вывод CF_WE на выход
Low CF_CE1PIN ' Установить вывод CF CE1 на выход и в низкое логическое состояние
Output CF_OEPIN ' Установить вывод CF OE на выход
Input CF_CD1PIN ' Установить вывод CF CD1 на вход
Input CF_RDYPIN ' Установить вывод CF RDY_BSY на вход</td>
High CF_RSTPIN ' Установить вывод CF RESET на выход в высокое логическое состояние
Delayus 1 ' Задержка 1 мс между переключениями
Low CF_RSTPIN ' Установить вывод CF RESET на выход в низкое логическое состояние

Если в начале программы отсутствует объявление Declare CF_RSTPIN, то это будет означать, что ни один
вывод микроконтроллера не задействован в цепи сброса Compact Flash, и поэтому программный сброс работать
не будет. Однако если даже это так, не следует осталять вывод RESET Compact Flash не подключенным к цепи
"земля".

То же самое относится и к выводу CE1. Если объявления Declare CF_CE1PIN не было в начале программы, то
этот вывод становится не управляемым, чтобы избежать такой ситуации вывод CE1 Compact Flash следует
подключить к цепи GND (общей земле).

См. также: CF_Sector, CF_Read, CF_Write.

Страница 118
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/cf_init/cf_init.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Circle

Команды и директивы компилятора PROTON

Circle

Синтаксис:

Circle Set_Clear , Xpos , Ypos , Radius

Это команда рисует окружность на экране графического ЖК монитора.

Параметр Set_Clear определяет цвет, которым рисуется окружность. Этот параметр может быть константой или
переменной с заданным размером в 1 бит.

При Set_Clear равным 1 на светлом поле экрана будет нарисована черная окружность.

Если же Set_Clear присвоить значение 0, то окружность будет закрашена новым цветом, то есть пиксели
окружности станут светлыми на светлом фоне поля ЖКИ, совпадающим с цветом фона экрана (если конечно
фон был задан светлым). И если до этого на экране была окружность, то теперь она будет стёрта.

Параметр Xpos - константа или переменная, тип которых, может быть только Byte. Он указывает позицию
центра окружности по горизонтали. Значения этого параметра могут меняться от 0 до 127.

Параметр Ypos - константа или переменная, тип которых, может быть только Byte. Этот параметр
определяет позицию центра окружности по вертикали. Значения параметра могут меняться от 0 до 63.

Параметр Radius - байтовая константа или переменная, которая определяет радиус окружности. Этот
параметр может иметь значения от 0 до 255.

Пример 1

Листинг программы circle.bas

' Нарисовать окружность с центром в точке 63, 32 и радиусом в 20 пикселей.

' Включить внешний файл из библиотеки подпрограмма, содержащий


Include "PROTON_G4.INT" ' настройки для МК 18F452 и графического ЖКИ под управлением
' контроллера Samsung KS0108
Dim XPOS as Byte ' Определить параметр XPOS как Byte
Dim YPOS as Byte ' Определить параметр YPOS как Byte
Dim RADIUS as Byte ' Определить параметр RADIUS как Byte
Dim SET_CLR as Byte ' Определить параметр SET_CLR как Byte
DelayMs 200 ' Пауза 200 мс для стабилизации PIC микроконтроллера
Cls ' Очистить экран LCD
XPOS = 63 ' Позиция центра окружности по горизонтали
YPOS = 32 ' Позиция центра окружности по вертикали
RADIUS = 20 ' Радиус окружности 20 пикселей
SET_CLR = 1 ' Задать режим рисования, но не стирания
Circle SET_CLR , XPOS , YPOS , RADIUS ' Нарисовать окружность с заданными параметрами
Stop ' Остановить программу

На рисунке 1 приведена действующая модель circle.DSN, иллюстрирующая работу команды Circle. Модель
работает под управлением программы circle.bas.

Страница 119
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/circle/circle.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Circle

GIF

DSN

Рис. 1. Действующая модель circle.DSN. Демонстрация работы команды Circle.


По этой ссылке можно скачать архив действующей модели и необходимые для ее работы ASM и HEX файлы.

Примечание

Необходимо отметить, что экраны графических ЖК мониторов имеют прямоугольную форму с соотношением
сторон 4,5/3 поэтому отображаемые на экране фигуры будут иметь приплюснутую форму. Это значит, что
окружность на экране графического ЖК монитора будет иметь вид эллипса.

См. также: Box, Line, LineTo, Plot, UnPlot.

Страница 120
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/circle/circle.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Clear

Команды и директивы компилятора PROTON

Clear

Синтаксис:

Clear Variable

или

Clear Variable.Bit

или

Clear

Команда Clear предназначена для очистки переменных и очень упрощает эту процедуру.

Первая синтаксическая форма Clear Variable записывает нули во все разряды указанных переменной или
регистра.

Вторая синтаксическая форма Clear Variable.Bit предназначена для очистки только указанного бита переменной
или регистра.

Третья синтаксическая форма Clear используется для очистки сразу всей области оперативной памяти
(очищаются все переменные).

В качестве параметра Variable - может быть указана любая переменная или регистр используемого
микроконтроллера либо их псевдоним.

Пример 1

Clear ' Очистить всю область оперативной памяти (все переменные)


Clear VAR1.3 ' Очистить третий бит в переменной VAR1
Clear VAR1 ' Обнулить переменную VAR1
Clear ADCON0.0 ' Очистить флаг в младшем разряде регистра ADCON0

Если Clear должна очистить строковые переменные, то это будет означать, что все символы строковой
переменной будут заменены пустыми указателями, то есть нулями.

Пример 2

Dim ST As STRING * 50 ' Создать строковую переменную


Clear ST ' Заполнить переменную ST пустыми указателями

Пример 3

Листинг программы clear.bas

' Пример работы команды Clear с переменными, их отдельными разрядами и регистрами PIC-
микроконтроллера

'-------------------------------------------------Общие настройки--------------------------------------------------
Device = 16F877A ' Используемый микроконтроллер
XTAL = 20 ' Частота осциллятора 20 МГц
'------------------------------------------Настройки подключения ЖКИ---------------------------------------------
Declare LCD_TYPE TOSHIBA ' Тип ЖКИ - на контроллере Toshiba - T6963
Declare LCD_DTPORT PORTD ' Порт данных
Declare LCD_WRPIN PORTE.2 ' Цепь управления WR
Declare LCD_RDPIN PORTE.1 ' Цепь управления RD
Declare LCD_CDPIN PORTA.1 ' Цепь управления CD
Declare LCD_CEPIN PORTE.0 ' Цепь управления CE
Declare LCD_RSTPIN PORTA.2 ' Цепь управления RST
'--------------------------------------------------Настройки портов-------------------------------------------------
Declare ALL_DIGITAL = On ' Сделать все порты цифровыми входами/выходами
'--------------------------------------------Объявления переменных------------------------------------------------
Dim V1 As Byte ' Создать переменную V1 типа Byte
Dim V2 As Byte ' Создать переменную V2 типа Byte
Dim V3 As Word ' Создать переменную V3 типа Word
'---------------------------------------------------Инициализация----------------------------------------------------

Страница 121
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/clear/clear.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Clear

Print At 0, 4, "Example" ' Отобразить в первой строке ЖКИ надпись "Example"


Print At 1, 1, "command Clear" ' Отобразить во второй строке ЖКИ надпись "command Clear"
Print At 2, 0, "Set ALL Variable" ' Отобразить в третьей строке ЖКИ надпись "Set ALL Variable"
Set V1: Set V2: Set V3: ' Установить все разряды всех переменных в высокое состояние
GoSub Display ' Выполнить подпрограмму Display
DelayMS 2000 ' Пауза 2сек чтобы замедлить процесс
Print At 2, 0, "                " ' Очистить вторую строку ЖКИ
'------------------------------------------Главная программа-------------------------------------------
Main: ' Метка начала главной программы
Print At 3, 0, "Clear Variables' " ' Сообщение об очистке переменных
Clear ' Очистить все переменные
Clear ADCON0.0 ' Сбросить флаг в нулевом разряде регистра ADCON0
GoSub Display ' Выполнить подпрограмму Display
DelayMS 2000 ' Пауза 2сек чтобы замедлить процесс
' Сообщение об установке разрядов переменных в единичное
Print At 3, 0, "Set Variables' ' "
' состояние
Set V1.3 ' Установить третий бит переменной V1 в высокое состояние
Set V2 ' Установить все разряды V2 (загрузить в V2 число 255)
Set V3 ' Установить все разряды V3 (загрузить в V3 число 65535)
Set ADCON0.0 ' Установить флаг в нулевом разряде регистра ADCON0
GoSub Display ' Выполнить подпрограмму Display
DelayMS 2000 ' Пауза 2сек чтобы замедлить процесс
GoTo Main ' Повторить главную программу
'-----------------------------------------Подпрограмма Display-----------------------------------------
Display: ' Метка начала подпрограммы Display
Print At 4, 0, "V1= ", BIN8 V1 ' Отобразить в пятой строке ЖКИ содержимое переменной V1
Print At 5, 0, "V2= ", BIN8 V2 ' Отобразить в шестой строке ЖКИ содержимое переменной V2
Print At 6, 0, "V3= ", DEC6 V3 ' Отобразить в седьмой строке ЖКИ содержимое переменной V3
Print At 7, 0, "ADCON0=", BIN8 ADCON0 ' Отобразить в восьмой строке ЖКИ состояние регистра ADCON0
Return ' Возврат из подпрограммы туда, откуда она была вызвана

На рисунке 1 приведена действующая модель clear.DSN демонстрирующая работу команды Clear с


переменными, их отдельными разрядами и регистрами PIC-микроконтроллера . Модель работает под
управлением программы clear.bas.

При запуске программы clear.bas, на графическом ЖКИ, после заставки, отображаются процессы установки
командой Set всех разрядов всех переменных в единичное состояние. Затем по команде Clear все переменные
обнуляются и сбрасывается флаг в нулевом разряде регистра ADCON0. Через 2-х секундную паузу командами
Set записываются единицы в указанные разряды переменных, а также производится установка флага в
нулевом разряде регистра ADCON0.

Страница 122
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/clear/clear.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Clear

GIF

DSN

Рис. 1. Действующая модель clear.DSN. Демонстрация работы команды Clear


с переменными и регистрами PIC-микроконтроллера.
По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

Примечание

Обнулить переменную или отдельный её бит можно и командой Low, но между командами Clear и Low
есть существенное различие. Команда Clear не изменяет регистр TRISn, если ее целью является регистр
PORTn.

Страница 123
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/clear/clear.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда ClearBit

Команды и директивы компилятора PROTON

ClearBit

Синтаксис:

ClearBit Variable , Index

По этой команде очищается часть переменной или часть регистра. При этом используется индекс для указания
очищаемого разряда переменной.

Variable - переменная определенная пользователем, которая может быть типа Byte, Word или DWord.

Index - константа, переменная, или выражение, указывающие на разряд в переменной который требует
очистки.

Пример 1      

Листинг программы clearbit.bas

' Очистить по очереди каждый бит переменной EX_VAR

'---------------------------------------------Общие настройки---------------------------------------------
' Включить файл содержащий настройки для МК 16F877 и
Include "PROTON_4.INC"
' алфавитно-цифрового ЖКИ
'---------------------------------------Объявления переменных-------------------------------------------
Dim EX_VAR AS Byte ' Создать переменную EX_VAR типа Byte
Dim INDEX AS Byte ' Создать переменную INDEX типа Byte
CLS ' Очистить дисплей
EX_VAR = %11111111 ' Присвоить переменной EX_VAR значение равное %11111111
'-------------------------------------Главная программа--------------------------------------
AGAIN: ' Метка начала главной программы
For INDEX = 0 To 7 ' Создать цикл из 8 проходов
ClearBit EX_VAR,INDEX ' Очистить бит INDEX в переменной EX_VAR
Print At 1,1, Bin8 EX_VAR ' Вывести на дисплей двоичный результат
DelayMs 100 ' Замедлить процесс, для того чтобы видеть происходящее
Next ' Закрыть цикл
For INDEX = 7 To 0 Step -1 ' Снова создать цикл из 8 проходов
SetBit EX_VAR, INDEX ' Запиcать в каждый разряд переменной EX_VAR единицу
Print At 1,1, Bin8 EX_VAR ' Вывести на дисплей двоичный результат
DelayMs 100 ' Замедлить процесс, для того чтобы видеть происходящее
Next ' Закрыть цикл
GoTo AGAIN ' Вернуться к началу главной программы

На рисунке 1 приведена действующая модель clearbit.DSN, которая иллюстрирует работу команды ClearBit.
Модель работает под управлением программы clearbit.bas.

Страница 124
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/clearbit/clearbit.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда ClearBit

GIF

DSN

Рис. 1. Действующая модель clearbit.DSN. Иллюстирация работы команды СlearBit.


Модель работает под управлением программы clearbit.bas описанного выше примера.
По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

Примечания

Существует много различных способов обнуления значений как полностью всей переменной, так и ее
частей. Однако любой метод требует, чтобы было произведено некоторое количество манипуляций. Это
можно делать с помощью циклов или использовать метод косвенной адресации, используя регистры FSR, и
INDF. Каждый метод имеет свои достоинства и свои недостатки, а также требует некоторого количества
знаний, для того чтобы правильно выполнить задачу. Команда ClearBit делает же выполнение этой задачи
чрезвычайно простым.

Для того чтобы очистить некоторый известный постоянный бит в переменной или регистре, можно
обратиться к нему непосредственно.

Например:

PORTA.1 = 0

или

VAR1.4 = 0

Если команда ClearBit работает с портом PORT, то регистр TRIS при этом не затрагивается.

Смотрите также : LoadBit, GetBit, SetBit.

Страница 125
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/clearbit/clearbit.html
Aнатолий Медведев. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Cls

Команды и директивы компилятора PROTON

Cls

Синтаксис:

Cls

Команда Cls очищает экран алфавитно-цифрового или графического ЖК мониторa и помещает курсор в
начальную позицию первой строки алфавитно-цифрового ЖКИ или в первую строку первого столбца
графического ЖК монитора.

Пример:

Cls ' Очистить LCD


Print "HELLO" ' Вывести на экран дисплея слово "HELLO"
Cursor 2 , 1 ' Поместить курсор на 2-ю строку в 1-ое знакоместо
Print "WORLD" ' Вывести на экран дисплея слово "WORLD"

В приведенном примере, экран ЖК монитора очищается с использованием команды Cls, которая также
размещает курсор в начальную позицию, то есть в первое знакоместо первой строки. Затем выводится слово
HELLO в верхнем левом углу. Далее курсор перемещается на 2-ю строку в знакоместо номер 1 и выводится
слово WORLD.

Страница 126
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/cls/cls.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Config

Команды и директивы компилятора PROTON

Config

Синтаксис:

Config { Configuration fuse settings }

По команде Config происходит настройка регистров конфигурации микроконтроллера. Она включает или
отключает специфические параметры используемого типа PIC-микроконтроллера.

Эту команду можно использовать только с микроконтроллерами которые имеют 12- и 14-разрядные ядра .

Параметр - Configuration fuse settings зависит от типа используемого микроконтроллера, однако, есть
некоторые общие параметры, перечисленные ниже, и их настройки для большинства типов PIC
микроконтроллеров:

WDT_ON - включить сторожевой таймер


WDT_OFF - отключить сторожевой таймер
HS_OSC - использовать высокочастотный кварц от 4 MHz и выше
XT_OSC - использовать стандартный кварц (4 MHz или близкий к нему)
LP_OSC - использовать низкочастотный кварц работающий в кHz диапазоне
PWRTE_ON - включить таймер включения питания
PWRTE_OFF - выключить таймер включения питания

Пример 1

'Пример Config для 16F877. Выключить сторожевой таймер и использовать высокочастотный кварц

Config HS_OSC , WDT_OFF , PWRTE_ON , BODEN_OFF , LVP_OFF , WRTE_ON , CP_OFF , DEBUG_OFF

Важное замечание!

Из-за сложностей, которые связаны с настройкой 16-разрядных микроконтроллеров, эта директива не


совместима с этими устройствами. Поэтому, если требуется установить какие-то специфические
параметры для них, то следует в тело программы на языке Basic вставить подпрограмму или фрагмент,
написанный на ассемблере, используя команды ASM...ENDASM, или символ @. Эти настройки
параметров могут быть изменены во время программирования.

Ниже приведены примеры установки битов регистра конфигурации для микроконтроллера 18F452.

@Config_REQ
@__Config Config1H, OSCS_OFF_1 & HS_OSC_1
@__Config Config2L, BOR_ON_2 & BORV_20_2 & PWRT_ON_2
@__Config Config2H, WDT_OFF_2 & WDTPS_128_2
@__Config Config3H, CCP2MX_ON_3
@__Config Config4L, STVR_ON_4 & LVP_OFF_4 & DEBUG_OFF_4

Названия разрядов регистра конфигурации конкретного процессора могут быть найдены в конце *.LPB файлов
(см. рис. 1) расположенных в папке С:\Program Files\Proton\PDS\Inc каталога компилятора.

Страница 127
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/config/config.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Config

Рис. 1. Пример описания регистров конфигурации файла P18f4550.LPB

Если директива Config не используется в пределах Бейсик-программы, то тогда применяются значения по


умолчанию. Они могут быть найдены в файлах *.LPB папки INC.

Примечания

При включении директивы Config в ваши программы, всегда используйте все параметры настройки
защиты для каждого используемого PIC микроконтроллера. Любые имена защиты, которые опущены в
списке Config, будут обычно принимать отключенные значения. Это может привести к непредсказуемым
результатам, или микроконтроллер может вообще отказаться запускаться.

Перед программированием PIC-микроконтроллера, всегда проверяйте параметры настройки защиты,


чтобы гарантировать, что эти параметры настроены, верно.

Всегда читайте справочные данные на используемый микроконтроллер перед применением этой


директивы.

Страница 128
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/config/config.html
Aнатолий Медведев. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда COUNTER

Команды и директивы компилятора PROTON

Counter

Синтаксис:

Var = Counter Pin , Period

Команда Counter считает количество импульсов, которые поступают на вывод - Pin за время - Period, а результат
сохраняет в переменной - Var.

Var - определенная пользователем переменная.


Pin - выбранный пользователем вывод микроконтроллера, например PORTA.0.
Period - константа, переменная, или выражение заданные в мсек.

Пример 1:

Листинг программы counter.bas

' Сосчитать количество импульсов, которые приходят на вывод PORTA.0 за интервал времени в 100 мсек,
' и отобразить результат на экране ЖКИ.

Device = 16F873A ' Использовать микроконтроллер 16F873A


XTAL = 4 ' Установить частоту генератора МК равной 4 МГц
'----------------------------------------------Настройки подключения ЖКИ-----------------------------------------------
Declare LCD_TYPE ALPHA ' Тип ЖКИ - буквенно-цифровой
Declare LCD_DTPIN PORTB.4 ' Порт данных ЖКИ
Declare LCD_ENPIN PORTB.3 ' Цепь управления E
Declare LCD_RSPIN PORTB.2 ' Цепь управления RS
Declare LCD_INTERFACE 4 ' Разрядность шины данных
Declare LCD_COMMANDUS 2000 ' Задержка перед посылкой команды
Declare LCD_DATAUS 50 ' Задержка перед посылкой данных
Declare LCD_LINES 4 ' Количество строк ЖКИ
'--------------------------------------------------- Настройки портов ----------------------------------------------------
ADCON1 = %00000110 ' Сделать PORTA обычным цифровым портом ввода/вывода
TRISA = %00000001 ' Сделать PORTA.0 входом
'-------------------------------------------------Объявления переменных-------------------------------------------------
DIM VAR1 As Word ' Создать переменную для хранения результатов измерений
Symbol Pin = PORTA.0 ' Присвоить выводу PORTA.0 символ Pin
'----------------------------------------------------Главная программа---------------------------------------------------
Loop: ' Метка начала цикла измерений
VAR1 = Counter Pin, 100 ' Считать импульсы на выводе PORTA.0 за время = 100 мсек
Print At 1, 1, "PrimerComand Counter" ' Отобразить на ЖКИ надпись "PrimerComand Counter"
Print At 2, 1, "VAR1 = ", Dec VAR1, "     " ' Отобразить десятичное значение измеряемой величины
' Отобразить 14 разрядов двоичного значения измеряемой
Print At 3, 1, "VAR1 = ", BIN14 VAR1
' величины
Print At 4, 1, "VAR1 = ", Dec6 VAR1 ' Отобразить 6 знаков десятичного значения измеряемой величины
GoTo Loop ' Повторить процесс измерения

На рисунке 1 приведена действующая модель counter1.DSN которая иллюстрирует работу команды Counter.
Модель работает под управлением программы counter.bas. Частота входных импульсов поступающих на PORTA.0
от внешнего генератора равна 2500 Гц. Время измерения 100 мсек.

Страница 129
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/counter/counter.html
Aнатолий Медведев. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда COUNTER

GIF

DSN

Рис. 1. Действующая модель counter1.DSN. Иллюстирация работы команды Counter


. Модель работает под управлением программы counter.bas.
По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

Примечания

Команда Counter проверяет состояние вывода в коротком цикле, и считает импульсы при переходе входного
сигнала из 0 в 1.

Если задающий генератор микроконтроллера работает на частоте 4 МГц, то вывод Pin проверяется каждые
20 мкс, или каждый 4 мкс при частоте генератора в 20 МГц.

Самая высокая частота импульсов, которые могут быть подсчитаны при использовании тактового генератора
на 4 МГц составляет 25 кГц и 125 кГц при частоте тактового генератора 20 МГц.

См. также Pulsin, Rcin

Страница 130
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/counter/counter.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда CRead

Команды и директивы компилятора PROTON

CRead

Синтаксис:

Var = CRead Address

Команда CRead предназначена для работы с микроконтроллерами, имеющими 14- и 16-разрядные ядра и flash
память программ. Это микроконтроллеры типа - 16F87x, и более новые. По этой команде читаются данные в
любой части памяти.

Var - определяемая пользователем переменная которая может быть типа Byte, Word, или DWord.

Address - любой действительный адрес в пределах памяти PIC микроконтроллера, который может быть
описан константой, переменной, или выражением.

Пример

' Прочитать значения в памяти PIC-микроконтроллера


Device 16F877 ' Использовать микроконтроллер 16F877
Dim VAR1 As Byte ' Cоздать переменную VAR1 мтипа Byte
Dim WRD As Word ' Cоздать переменную WRD мтипа Word
Dim Address As Word ' Cоздать переменную Address мтипа Word
Address = 1000 ' Aдрес равен 1000
' Читать данные по адресу 1000, результат сохранить в байтовую
VAR1 = CRead 1000
переменную VAR1
' Читать данные по адресу 1000+10, результат сохранить в переменную
WRD = CRead Address+10
WRD

Примечания

Если переменная, в которую будут сохраняться считанные данные, определена размером в Word, то
будут считаны 14 разрядов из памяти микроконтроллера. Если же переменная определена размером в
Byte, то будут считаны только 8 разрядов.

Поскольку микроконтроллеры c 14-разрядными ядрами могут сохранять только 14 разрядные значения,


значения больше чем 16383 ($3FFF) не могут быть считаны. Однако, микроконтроллеры с 16-битными
ядрами уже могут сохранять значения до 65535 ($FFFF).

См. CData для альтернативного метода определения местонахождение адреса CData таблицы.

Если в программе допускается использовать перепрограммируемую область памяти микроконтроллера, то


должна использоваться директива Config WRTE_ON, например

Config WDT_ON , XT_OSC , WRTE_ON

См. также: Data, CData, Config, CWrite, LData, LRead, Read, Restore.

Страница 131
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/cread/cread.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Cursor

Команды и директивы компилятора PROTON

Cursor

Синтаксис:

Cursor Line , Position

По этой команде, курсор на ЖК мониторе, помещается в указанную позицию.

Параметр - Line - константа, переменная, или выражение, которые указывают на номер строки, в которую
необходимо установить курсор.

Параметр - Position может быть константой, переменной, или выражением, указывающие на номер знакоместа в
строке, в которое нужно поместить курсор.

Пример 1

Листинг программы cursor1.bas

' При помощи команды Cursor отобразить на ЖКИ эффект бегущей строки
 
'--------------------------------------------------Общие настройки-------------------------------------------------
Device = 16F873A ' Использовать микроконтроллер 16F873A
XTAL = 4 ' Установить частоту генаратора равной 4МГц
'-------------------------------------------Настройки подключения ЖКИ-------------------------------------------
Declare LCD_TYPE ALPHA ' Тип ЖКИ - буквенно-цифровой
Declare LCD_DTPIN PORTB.4 ' Порт данных ЖКИ
Declare LCD_ENPIN PORTB.3 ' Цепь управления E
Declare LCD_RSPIN PORTB.2 ' Цепь управления RS
Declare LCD_INTERFACE 4 ' Разрядность шины данных
Declare LCD_COMMANDUS 2000 ' Задержка перед посылкой команды
Declare LCD_DATAUS 50 ' Задержка перед посылкой данных
Declare LCD_LINES 2 ' Количество строк ЖКИ
'----------------------------------------------Объявление переменных----------------------------------------------
Dim Lines As Byte ' Определить размер параметра Lines как Вyte
Dim Xpos As Byte ' Определить параметр Xpos как Вyte
'--------------------------------------Присвоение первоначальных значений--------------------------------------
Lines = 2 ' Присвоить переменной значение Lines равное 2
Xpos = 1 ' Присвоить переменной значение Xpos равное 1
Cls ' Очистить дисплей
Print "HELLO" ' Вывести в первой строке ЖКИ фразу "HELLO"
'------------------------------------------------Основная программа------------------------------------------------
main: ' Метка и начало цикла основной программы
For Xpos = 1 To 11 Step 1 ' Создать внутренний восходящий цикл на 11 проходов
Cursor Lines , Xpos ' Переместить курсор на строку 2 в позицию Xpos
Print " WORLD " ' Вывести на экран слово "WORLD"
DelayMS 200 ' Пауза определяющая скорость бегущей строки
Next ' Завершить внутренний восходящий цикл
For Xpos = 11 To 1 Step -1 ' Создать внутренний нисходящий цикл на 11 проходов
Cursor Lines , Xpos ' Переместить курсор на строку 2 в позицию Xpos
Print " WORLD " ' Вывести на экран фразу "WORLD"
DelayMS 200 ' Пауза определяющая скорость бегущей строки
Next ' Завершить внутренний нисходящий цикл
GoTo main ' Переход в начало основной программы

На рисунке 1 приведена действующая модель, cursor1.DSN демонстрирующая работу команды Cursor. Модель
работает под управлением программы cursor1.bas.

Страница 132
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/cursor/cursor.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Cursor

GIF

DSN

Рис. 1. Действующая модель cursor1.DSN. Демонстрирация работы команды Cursor.


По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

В следующем примере на экран ЖК монитора выводится символ звездочки, который перемещается по кругу с
периметром в 2 строки по 16 символов.

Пример 2:

Листинг программы cursor2.bas

'--------------------------------------------------Общие настройки-------------------------------------------------
Device = 16F873A ' Использовать микроконтроллер 16F873A
XTAL = 4 ' Установить частоту генераторо равную 4 МГц
'-------------------------------------------Настройки подключения ЖКИ-------------------------------------------
Declare LCD_TYPE ALPHA ' Тип ЖКИ - буквенно-цифровой
Declare LCD_DTPIN PORTB.4 ' Порт данных ЖКИ
Declare LCD_ENPIN PORTB.3 ' Цепь управления E
Declare LCD_RSPIN PORTB.2 ' Цепь управления RS
Declare LCD_INTERFACE 4 ' Разрядность шины данных
Declare LCD_COMMANDUS 2000 ' Задержка перед посылкой команды
Declare LCD_DATAUS 50 ' Задержка перед посылкой данных
Declare LCD_LINES 2 ' Количество строк ЖКИ
'----------------------------------------------Объявление переменных----------------------------------------------
Dim Xpos As Byte ' Определить параметр Xpos как Вyte
Dim Ypos As Byte ' Определить параметр Ypos как Вyte
'------------------------------------------------Основная программа------------------------------------------------
Again: ' Начало основной программы
Ypos = 1 ' Строка 1
For Xpos = 1 To 16 ' Генерировать цикл от 1 до 16
Cls ' Очистить экран ЖК монитора
Cursor Ypos , Xpos ' Переместить курсор в позицию Ypos, Xpos
Print "*" ' Вывести на дисплей символ "*"
DelayMS 100 ' Задержка 100 мсек
Next ' Если Хpos = 16, то завершить цикл, если нет, то продолжить цикл
Ypos = 2 ' Переход курсора на строку 2
For Xpos = 16 To 1 Step -1 ' Генерировать цикл от 16 до 1 с шагом -1
Cls ' Очистить экран ЖК монитора
Cursor Ypos , Xpos ' Переместить курсор в позицию Ypos, Xpos
Print "*" ' Вывести на дисплей символ "*"
DelayMS 100 ' Задержка 100 мсек
Next ' Если Хpos = 1, то завершить цикл, если нет, то продолжить цикл
GoTo Again ' Повторить основную программу
Страница 133
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/cursor/cursor.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Cursor

На рисунке 2 приведена действующая модель cursor2.DSN, демонстрирующая работу команды Cursor. Модель
работает под управлением программы cursor2.bas.

GIF

DSN

Рис. 2. Действующая модель cursor2.DSN. Модель работает по управлением программы cursor2.bas.


По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

Смотрите также: Cls, Print

Страница 134
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/cursor/cursor.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда CWrite

Команды и директивы компилятора PROTON

CWrite

Синтаксис:

CWrite Address, [ Variable { , Variable…} ]

Команда CWrite предназначена для использования с микроконтроллерами имеющими 14- и 16-разрядными


ядрами и перепрограммируемую память команд или Flash-память. По этой команде происходит запись данных в
память микроконтроллера в любом её месте.

Параметр Variable может быть константой, переменной или выражением, содержащие данные, которые
подлежат записи в память микроконтроллера.

Параметр Address может быть константой, переменной, или выражением, которые представляют любой из
действительных адресов в пределах всей памяти PIC-микроконтроллера.

Пример

' Начиная с адреса 2000 запиcать данные в память микроконтроллера


Device 16F877 ' Использовать микроконтроллера 16F877
Dim VAR1 as Byte  
Dim WRD as Word  
Dim Address as WORD  
Address = 2000 ' Базовый адрес с ячейки 2000
VAR1 = 234  
WRD = 1043  
CWrite Address, [10, VAR1, WRD ] ' Записать данные по адресу 2000
Org 2000 ' Следующие данные записывать с адреса 2000

Примечание

Если объявить размеры переменной как Word, то в память будет записано 14-разрядное слово. Если
размеры переменной объявлены как Byte, то будут записаны только 8 разрядов.

Поскольку 14-разрядные микроконтроллеры способны работать только с 14 битовыми словами, значения


больше чем 16383 ($3FFF) не могут быть записаны.

Однако 16-разрядные микроконтроллеры работают с переменными, значения которых может достигать до


65535 ($FFFF). См. CData для альтернативного метода определения местонахождение адреса таблицы
CData.

Необходимо помнить, что если Вы собираетесь работать с командой СWrite, то в слове конфигурации не
устанавливайте бит защиты от записи - CP_ON во включенное состояние. Для программы использующей
команды СWrite директива Config может выглядеть следующим образом:

Config WDT_ON, XT_OSC, WRTE_ON

или

Config HS_OSC , WDT_OFF , PWRTE_ON , BODEN_OFF , LVP_OFF , WRTE_ON , CP_OFF , DEBUG_OFF

См. также: CData, Config, CRead, Org.

Страница 135
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/cwrite/cwrite.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Data

Команды и директивы компилятора PROTON

Data

Синтаксис:

Data { alphanumeric data }

По команде Data происходит запись информации в память программ микроконтроллера. Для этого используется
команда ассемблера retlw.

Параметр alphanumeric data - это данные, которые должны быть сохранены. Они могут быть 8-, 16- или
32-разрядными данными и данными с плавающей запятой, или любыми алфавитно-цифровыми
символами заключенными в кавычки, или строкой таких символов.

При использовании микроконтроллеров 18-ой серии с перепрограммируемой flash-памятью программ, эти


данные сохраняются в основной flash-памяти.

Для доступа к этим данным предназначена команда Read.

Пример 1

Dim VAR1 As Byte ' Создать переменную VAR1 типа Byte


' Загрузить в область данных EEPROM указанные цифровые и строковые
Data 5, 8, "fred", 12
данные
Restore 0 ' Поместить указатель в позицию адреса = 0 таблицы данных
' Считать из таблицы данных по адресу 0 значение 5 и поместить это
Read VAR1
значение в переменную VAR1
' Считать из таблицы данных по следующему адресу значение 8 и поместить
Read VAR1
это значение в переменную VAR1
' Поместить указатель в позицию 4 таблицы данных, то есть в место записи
Restore 3
символа "r"
' Считать из таблицы данных по 4 адресу значение "r" и поместить это
Read VAR1 значение в десятичном виде в переменную VAR1. В результате в VAR1 будет
записано значение 114, так как десятичное значение знака "r" = 114.

В этом примере таблица сохраняемых данных определена значениями 5, 8, 102, 114, 101, 100, 12,
поскольку набор символов заключенных в кавычки "fred" представляет собой в кодах ASCII следующие
десятичные значения: f - 102, r - 114, e - 101, d - 100.

В начале программы оператором "Restore 0" указатель таблицы устанавливается в начало таблицы. Это не
обязательно, и не всегда требуется, но это хороший прием, чтобы при чтении данных из таблицы не допустить
выход за её пределы.

Первая команда "Read VAR1" считывает первый элемент данных таблицы и увеличивает указатель таблицы на
1. Следующая команда "Read VAR1" считывает уже второй элемент таблицы данных. Затем команда "Restore
3", перемещает на 3 шага указатель таблицы, то есть на четвертое местоположение в таблице. В этом месте
располагается символ "r" = 114 и теперь следующая команда "Read VAR1" считает десятичное значение 114,
которое является эквивалентом буквы "r" .

Примечание

1. Таблица данных, которую необходимо сохранить с помощью команды Data, должна быть помещена
вначале программы.

2. Чтение данных за пределами таблицы может привести к ошибкам и непредсказуемым результатам.

В программе допускается использовать команду Data только один раз, однако обьем этих данных может быть
любой, их предел зависит только от емкости ОЗУ используемого микроконтроллера. Если алфавитно-цифровое
содержание команды Data не может уместиться в одной строке листинга BAS-файла, то возможна следующая
запись:

Data           "HELLO"

Data           "WORLD"

Это то же самое что и

Data           "HELLO WORLD"

Операторы Data, Read, Restore являются устаревшими. Они перешли в POTON+IDE от предыдущих версий
компиляторов с целью обеспечения совместимости программ. Эти операторы не рекомендуется использовать
при разработках новых программ.

Не рекомендуется применять для 18 серии и операторы LData, LRead, LRead8, LRead16, LRead32, которые
также считаются устаревшими.

Страница 136
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/data/data.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Data

Для микроконтроллеров с 16-разрядными ядрами вместо операторов Data, Read, LData LRead, LRead8,
LRead16, LRead32 следует применять операторы CData и CRead.

См. также: CData, CRead, CWrite, Data, LookUp, Read.

Страница 137
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/data/data.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Dec

Команды и директивы компилятора PROTON

Dec

Синтаксис:

Dec Variable

Оператор Decосуществляет декремент переменной, то есть уменьшает значение переменной на 1.

Запись Dec VAR1 аналогична записи VAR1 = VAR1 - 1

Параметр Variable - это определенная пользователем переменная типа BYTE, WORD, DWORD, или FLOAT.

Пример

На рисунке 1 приведена действующая модель dec.DSN которая иллюстрирует работу команды Dec.
Модель работает под управлением следующей программы:

Device = 16F84A  
XTAL = 4  
'--------------------Настройки подключения ЖКИ-----------------------
Declare LCD_TYPE ALPHA ' Тип ЖКИ - буквенно-цифровой
Declare LCD_DTPIN PORTB.4 ' Порт данных ЖКИ
Declare LCD_ENPIN PORTB.3 ' Цепь управления E
Declare LCD_RSPIN PORTB.2 ' Цепь управления RS
Declare LCD_INTERFACE 4 ' Разрядность шины данных
Declare LCD_COMMANDUS 2000 ' Задержка перед посылкой команды
Declare LCD_DATAUS 50 ' Задержка перед посылкой данных
Declare LCD_LINES 4 ' Количество строк ЖКИ
'--------------------------Объявления переменных---------------------
Dim VAR1 As Byte ' Объявить переменную VAR1 размером Byte
'--------------------------Главная программа--------------------------
START: ' Метка начала главной программы
VAR1 = 16 ' Запись в VAR1 начального значения
' Выполнить блок команд, пока не будет выполнено условие VAR1
Repeat
'= 0
      Print At 1, 1, "Primer Command Inc"  
      Print At 2, 1, "VAR1 = ", Dec VAR1, " " ' Вывести во 2-ой строке ЖКИ десятичное значение VAR1

      Print At 3, 1, "VAR1 = ", BIN5 VAR1, " " ' Вывести в 3-ей строке ЖКИ пять разрядов двоичного значения VAR1

      Print At 4, 1, "VAR1 = ", HEX VAR1, " " ' Вывести в 4-ой строке ЖКИ 16-ричное значение VAR1

DelayMS 500 ' Пауза 500 мс чтобы видеть изменения


Dec VAR1 ' Декрементировать (уменьшить на единицу) значение VAR1
Until VAR1 = 0 ' Выход из цикла Repeat...Until если VAR1 приняло значение 0
GoTo START ' Переход в начало программы

В этом примере используется цикл типа Repeat...Until

Страница 138
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/dec/dec.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Dec

GIF

DSN

Рис. 1. Действующая модель dec.DSN иллюстрирующая работу команды Dec.


По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

Страница 139
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/dec/dec.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

Команды и директивы компилятора PROTON

Declare

Синтаксис:

{Declare} CODE MODIFYING DIRECTIVE = MODIFYING VALUE

Команда Declare (определение, объявление, переопределение) позволяет изменить некоторые


параметры создаваемой программы, которые обычно устанавливаются по умолчанию. Например
частоту используемого кварца, порт и выводы для подключения ЖК монитора, скорость в бодах
для последовательной шины и многие другие параметры.

CODE MODIFYING DIRECTIVE - эта фраза является набором предопределенных слов


указывающих на изменяемый параметр.

MODIFYING VALUE - новое значение, которое отличается от значения по умолчанию.


Директива Declare - необходимая часть компилятора. Она является основанием обращения
к библиотечным подпрограммам. Однако само слово Declare как часть объявляющей
директивы является дополнительным и поэтому его можно опустить.

Например, вместо записи

Declare XTAL 4

можно использовать запись

XTAL 4

В рамках этой книги авторы будут преимущественно применять такую синтаксическую форму, в
которой слово Declare будет использоваться.

Примечание:

Используя директиву Declare, Вы изменяете соответствующую библиотечную подпрограмму


во время компилирования.

См. также:

MISC Declares,
ADIN Declares,
BusIn-BusOut Declares,
CRYSTAL FREQUENCY Declares,
COMPACT FLASH INTERFACE Declares,
HBusIn - HBusOut Declare ,
HPWM Declares,
HSerIn, HSerOut, HRSin and HRSOut,
Declare KEYPAD_PORT PORTN,
ALPHANUMERIC LCD PRINT Declare (Hitachi),
GRAPHIC LCD Declare,
SAMSUNG KS0108 Graphic LCD specific Declares,
TOSHIBA T6963 Graphic LCD specific Declares,
RSIN - RSOUT Declare,
Second USART Declares for use with HRSIN2, HSERIN2, HRSOUT2 and HSEROUT2 ,
SERIN - SEROUT Declare,
SHIN - SHOUT Declare,
TRIGONOMETRY Declares,

Страница 140
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/declare.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

Команды и директивы компилятора PROTON

MISC Declares

Разнообразие переопределений

Declare Watchdog = ON или OFF, или TRUE или FALSE, или 1, 0

Это объявление включает либо отключает сторожевой таймер. По этой директиве также
можно установить защиту в слове конфигурации (Config) микроконтроллера для
сторожевого таймера. Кроме того, компилятор удаляет любую мнемонику CLRWDT из
сгенерированного кода, и таким образом, создает немного меньшую по размерам
программу.

Если в начале программы отсутствует директива Watchdog, то по умолчанию для


компилятора задается режим Watchdog OFF, то есть сторожевой таймер будет отключен.
Поэтому, если Вы хотите использовать в программе сторожевой таймер, то необходимо
включить в программу это переопределение.

Объявление Watchdog можно многократно вызывать в пределах одной Basic-программы, и


таким образом включать или отключать сторожевой таймер в тех случаях, когда это
необходимо.

Declare Bootloader = ON или OFF, или TRUE или FALSE, или 1, 0

Это объявление включает или отключает специальные параметры настройки, которые


требуются при использовании Bootloader - системного загрузчика.

Эту директиву необходимо поместить в начале программы. Отключение Bootloader


уменьшает на несколько байтов сгенерированный код. Это конечно немного, однако, в
некоторых случаях эти несколько байтов могут иметь решающее значение между рабочей
или нерабочей программой. По умолчанию для компилятора Bootloader включен, то есть
Bootloader = ON, .

Bootloader это прогрессивная технология программирования через boot-загрузчик.


Суть технологии простая. Bootloader представляет собой небольшую программку
которая первой загружается в специальную области памяти микроконтроллера и
контролирует какой-либо интерфейс. Обычно МК подключается к компьютеру двумя
проводами через стандартный интерфейс RS-232, но могут использоваться и SPI, USB
и даже SoftUSB бутлоадеры.

Первыми получили Bootloader микросхемы PIC16F87x путем добавления в них


специальной области памяти. Данные, передаваемые от компьютера, активизируют
специальную управляющую программу (boot-загрузчик), которая самостоятельно
программирует FLASH-память.

В итоге пользователь получает возможность смены прошивки МК не только от


близлежащего компьютера, но и через Интернет из любой точки мира! Разумеется,
boot-загрузчик предварительно должен быть зашит в МК через HV-или LV-
программаторы.

При загрузке контроллера управление первым делом передается Bootloader-у и он


проверяет есть ли условие для запуска. Условие может быть любым, но обычно это либо
наличие спец байта по интерфейсу, либо наличие нужного логического уровня на
выбранной ножке контроллера, сигнализирующее о том, что требуется обратиться к буту
прошивки.

Если условие есть — то Bootloader может, например, принять прошивку по UART и сам
прошить ее во FLASH-память. Или, наоборот, считать прошивку из флеша и выдать через
UART, считать или записать EEPROM, вывести 0 или 1 на любой вывод выбранного порта и
т.д. Но обычно все же с помощью Bootloader осуществляют прошивку микроконтроллера
без применения спец программатора.

Если разрешающего условия при старте нет, то Bootloader завершает свою работу и
передает управление основной программе.

Declare SHOW_SYSTEM_VARIABLES = On или OFF, или TRUE или FALSE, или 1, 0

Страница 141
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/misc_declare.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

При использовании программы моделирования - PROTEUS VSM, предназначенной для


виртуальной симуляции Basic-программ, иногда необходимо наблюдать поведение
системных переменных компилятора, которые используются в его библиотечных
подпрограммах.

Declare FSR_CONTEXT_SAVE = On или OFF, или TRUE или FALSE, или 1, 0

При использовании аппаратных прерываний, не всегда необходимо сохранять данные в


регистре FSR. Поэтому, для того чтобы уменьшить размер кода программы и время, которое
тратится на обработку прерываний, можно включить или отключить это объявление.

Для микроконтроллеров с 16-разрядными ядрами, это определение позволяет включить


либо отключить контекстную обработку FSR0. Если в программе Basic используются
строковые переменные, то оба регистра - FSR1L и FSR1H будут также сохранены/
восстановлены. Также это произойдет если будет осуществлена операция извлечения
данных из стека.

Declare PLL_Req = On или OFF, или TRUE или FALSE, или 1, 0

Большинство микроконтроллеров c 16-разрядными ядрами имеет встроенный предделитель


PLL, который позволяет умножить частоту задающего генератора на 4. Использование этого
определения включает либо отключает использование предделителя PLL.

Это определение может использоваться с кварцами от 4 до 10 МГц. По умолчанию,


компилятор автоматически установит предделитель так, что частота задающего кварца
будет умножаться на 4. Например, если установлет кварц на 4 МГц, компилятор
автоматически настроит себя на работу с кварцем в 16 МГц, то есть 4 х 4. Таким образом,
все временные параметры компилятор будет рассчитывать от частоты 16 МГц.

Declare Warnings = On или OFF, или TRUE или FALSE, или 1, 0

Директива Warnings (предупреждение) включает или отключает появление


предупреждающих сообщений при компиляции программы. Отключение этой функции может
привести к непредсказуемым результатам, если предупреждение пропущено или
игнорируется, поэтому использование этой директивы в первую очередь служит интересам
безопасности вашей программы.

Директива Warnings может быть использована много раз в пределах программы, включая
или отключая предупреждающие сообщения в ключевых точках программы, только тогда
когда это необходимо.

Declare Reminders = On или OFF, или TRUE или FALSE, или 1, 0

Директива Reminders

Эту директиву так же можно использовать несколько раз в пределах программы, включая
или отключая появление предупреждающих сообщений в ключевых точках программы.

Declare LABEL_BANK_RESETS = On или OFF, или TRUE или FALSE, или 1, 0

При обращении к банкам оперативной памяти компилятор работает очень интуитивно.


Поэтому, если есть подозрения, что что компиляция идет ненормально, либо компилятор
установил неверные параметры настройки банков оперативной памяти, можно использовать
это определение, и оно сначала сбросит автоматические настройки распределения
оперативной памяти, а затем заставит компилятор перевычислить эти параметры настройки
банков памяти в соответстуии с использованием каждой метки Basic-программы.

Использование этого объявления увеличит размер полученного кода программы, поскольку


будет дополнительно размещена мнемоника BCF для микроконтроллеров 12- и 14-битными
ядрами, или MOVLB в случае применения контроллеров с 16-разрядными ядрами.

Объявление LABEL_BANK_RESETS можно многократно использовать в пределах одной


программы, включая и отключая сбросы банка в ключевых точках программы, когда это
требуется. См. LABEL LABELS для получения дополнительной информации.

Declare Float_Display_Type = LARGE или STANDARD

По умолчанию, компилятор использует относительно маленькую подпрограмму для того,

Страница 142
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/misc_declare.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

чтобы преобразовывать значения с плавающей запятой в десятичные числа при работе с


командами RSOut, Print, Str$ и т.д. Однако получается относительно невысокая точность
преобразования, приблизительно 6 знаков. Для повышения точности преобразования,
компилятор должен использовать другую подпрограмму, повышенной точности, которая
имеет больший размер чем первая и которая подключается автоматически при
использовании Declare Float_Display_Type = LARGE.

Необходимо отметить, что даже при том, что подпрограмма повышенной точности является
большей по размеру, чем стандартный конвертер активизирующийся по умолчанию или при
использовании директивы Declare Float_Display_Type = STANDARD, она фактически
работает намного быстрее.

Declare Icd_Req = On или OFF, или TRUE или FALSE, или 1, 0

При использовании этого объявления и установки его в состояние On, компилятор


самостоятельно конфигурирует программу так, чтобы можно было использовать
внутрисхемный (встроенный) отладчик Microchip ICD2.

Этот отладчик довольно агрессивно относится к отлаживаемой программе, он требует


некоторую область оперативной памяти микроконтроллера для себя. Для некоторых PIC-
микроконтроллеров до 26 байтов. Он также требует 2-х уровневого списка
последовательных вызовов. Поэтому следует быть внимательными при использовании
микроконтроллеров с 14-битным ядрами, иначе можно переполнить список
последовательных вызовов, что приведет к нежелательным последствиям.

В микроконтроллерах с 14-битными ядрами , верхняя часть BANK0 оперативной памяти


зарезервирована за ICD2. При использовании микроконтроллеров с 16-разрядными ядрами,
использование оперативной памяти не столь критично благодаря её линейной архитектуре,
но все же требуется резервирования до 12 байтов в конце оперативной памяти.

Приведенный ниже список отображает требуемые ячейки ОЗУ для ICD2 в различных PIC-
микроконтроллерах.

Контроллер Используемая RAM


P12F675 $54 - $5F
P12F629 $54 - $5F
P16F627A $70 - $7F
P16F628A $70 - $7F
P16F648A $70 - $7F
P16F630 $54 - $5F
P16F676 $54 - $5F
P16F87 $70 - $7F
P16F88 $70 - $7F
P16F818 $65 - $7F
P16F819 $65 - $7F
P16F870 $70 - $7F, $B5 - $BF
P16F871 $70 - $7F, $B5 - $BF
P16F872 $70 - $7F, $B5 - $BF
P16F873/873A $74 - $7F
P16F874/874A $74 - $7F
P16F876/876A $70 - $7F
P16F877/877A $70 - $7F
P18F242/442 $02F4 - $02FF
P18F252/452 $05F4 - $05FF

Страница 143
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/misc_declare.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

P18F248/448 $02F4 - $02FF


P18F258/458 $05F4 - $05FF
P18F1220 $F4 - $FF
P18F1320 $F4 - $FF
P18F2220/4220 $01F4 - $01FF
P18F2320/4320 $01F4 - $01FF
P18F2331/4331 $02F4 - $02FF
P18F2431/4431 $02F4 - $02FF
P18F2680/4680 $0CF4 - $0CFF
P18F6520/8520 $0EF4 - $0EFF
P18F6620/8620 $0EF4 - $0EFF
P18F6720/8720 $0EF4 - $0EFF

Всякий раз, когда Вы разрешаете использовать совместимость с ICD2, компилятор


автоматически вычтет зарезервированную оперативную память из всей доступной
оперативной памяти микроконтроллера. Поэтому при объявлении переменных необходимо
принимать это во внимание. Необходимо помнить, что использование ICD2 может привести
к нехватке оперативной памяти для Ваших переменных.

Если наряду с использованием ICD2 используются и аппаратные прерывания, компилятор и


для это также резервирует оперативную память, необходимую для сохранения и
восстановления контекста. А это значит, что также будет уменьшена доступная оперативная
память.

Примечание

Внутрисхемный отладчик Microchip MPLAB ICD2

Внутрисхемный отладчик ICD-2 (In-Circuit Debugger) - самый популярный отладчик для


микроконтроллеров Microchip. Это связано, в первую очередь, с возможностью осуществлять
внутрисхемную отладку и программирование большинства FLASH контроллеров Microchip.

Во-вторых, все новые контроллеры выпускаются со встроенным механизмом ICD, а с


выходом очередного обновления среды разработки MPLAB IDE программное обеспечение
отладчика ICD-2 обновляется для поддержки новых контроллеров. Таким образом,
приобретя отладчик, вы получаете гарантированную поддержку своих будущих разработок.

С помощью ICD2 отладка программы осуществляется в микроконтроллере установленном


непосредственно в разрабатываемое изделие и программа выполняется с реальной
периферией и сигналами, что обеспечивает учет всех особенностей устройства. Для того
чтобы функционировал режим внутрисхемной отладки, в выпускаемые микроконтроллеры
встраивают специальный механизм поддержки ICD.

Принцип работы механизма следующий:

во время работы микроконтроллера при достижении установленной точки останова


или при пошаговой отладке отрабатывается немаскируемое прерывание и управление
передается подпрограмме отладчика (она незаметно для пользователя дописывается в
последние ячейки программной памяти). Эта подпрограмма выполняет функцию
передачи через дебаггер в компьютер состояние ячеек памяти микроконтроллера, а
так же изменяет их состояние и переключает режимы работы по команде с
компьютера. В результате, пользователь может выполнять программу в реальном
времени (программа выполняется в соответствии с тактовой частотой контроллера),
осуществлять пошаговую отладку (когда шаг за шагом, по команде с компьютера,
выполняется код) и видеть состояние нужных регистров в среде разработки MPLAB
IDE как при программировании на языке ассемблер, так и на языке высокого уровня
Си. Поддерживается установка точек останова, просмотр и изменение памяти данных
ОЗУ и EEPROM.

В режиме отладки становятся недоступными:

Страница 144
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/misc_declare.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

1 или 2 уровня стека (в зависимости от семейства отлаживаемого контроллера


PIC12/16F, PIC18F или dsPIC),

порты ввода-вывода RB6 и RB7 (для программирования микроконтроллера и


управлением режимами отладки); вывод MCLR/Vpp (используется для
программирования).

Помимо этого, при отладке так же становятся недоступным для пользователя часть
ячеек программы и регистров ОЗУ, которые резервируется для работы подпрограммы
отладчика.

Следует заметить, что ограничения вносятся лишь при включенном режиме отладки.

Так как отладчик MPLAB ICD2 программирует FLASH-память программ контроллеров, то с


помощью него можно не только отладить программу в разрабатываемом устройстве, но и
использовать в качестве серийного внутрисхемного программатора (в ICD2 встроена защита
от перегрузок по току и напряжению, есть диагностические светодиоды контроля
состояния). Невысокая стоимость дебаггера делает его весьма привлекательным
многофункциональным отладочным средством.

Страница 145
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/misc_declare.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

Команды и директивы компилятора PROTON

TRIGONOMETRY Declares

Объявления при работе с тригонометрическими функциями.

При использовании микроконтроллеров с 16-разрядными ядрами, для работы с математическими и


тригонометрическими функциями, такими как Sqr, Sin, Cos, компилятор по умолчанию использует значения с
плавающей запятой. Однако, для лучшей совместимости с BASIC Stamp, в котором используются целочисленные
функции, можно использовать три следующих объявления.

Declare STAMP_COMPATIBLE_SQR = ON или OFF


или
' Включить/отключить обработку значений с
Declare STAMP_COMPATIBLE_SQR = TRUE или FALSE
плавающей запятой для функции SQR (квадратный
или
корень).
Declare STAMP_COMPATIBLE_SQR = 1 или 0

Declare STAMP_COMPATIBLE_COS = ON или OFF


или
Declare STAMP_COMPATIBLE_COS = TRUE или FALSE
' Включить/отключить обработку значений с
плавающей запятой для функции COS.
или
Declare STAMP_COMPATIBLE_COS = 1 или 0

Declare STAMP_COMPATIBLE_SIN = ON или OFF


или
Declare STAMP_COMPATIBLE_SIN = TRUE или FALSE ' Включить/отключить обработку значений с
или плавающей запятой для функции SIN.
Declare STAMP_COMPATIBLE_SIN = 1 или 0

Примечание

Необходимо отметить, что, допуская использование целочисленной функции, функции с плавающей запятой
будут заблокированы постоянно в пределах всей Basic программы.

Страница 146
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/trigonm_declare.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

Команды и директивы компилятора PROTON

ADIN Declares

Объявления при осуществлении аналого-цифровых преобразований.

Declare ADIN_RES 8, 10, или 12.

Директива предназначена для установки разрешающей способности встроенных АЦП. Если


это объявление не используется, то по умолчанию устанавливается максимальная
разрешающая способность аналогово-цифрового преобразователя используемого PIC-
микроконтроллера. Например, микроконтроллеры 16F87X позволяют получить максимальный
10 разрядный результат преобразования или по желанию 8 разрядный, в то время как
обычные микроконтроллеры в результате преобразования обеспечивают только 8 разрядый
результат. Поэтому использование этого объявления позволяет получать результат в 10 или
8 разрядов от PIC-микроконтроллеров со встроенными 10 разрядными АЦП , но никак не 10
разрядов от PIC-микроконтроллеров с 8 битными АЦП.

Declare ADIN_TAD 2_FOSC, 8_FOSC, 32_FOSC, или FRC.

Эта директива определяет источник синхронизации для аналого-цифрового преобразования.


Все PIC-микроконтроллеры со встроенными АЦП могут синхронизироваться от внешнего
источника синхронизации или от внутреннего, встроенного в микроконтроллер RC
генератора.

При синхронизации от внешнего источника может быть выбран одни из 3 режимов:


2_FOSC, 8_FOSC, 32_FOSC. Названия этих режимов отражают отношения тактовой частоты
работы встроенного в микроконтроллер аналого-цифрового преобразователя к частоте
внешнего генератора.

FRC это название режима синхронизации от внутреннего ёмкостно-резистивного генератора.


Для выбора внутреннего источника синхронизации в директиве должно быть указано
значение FRC.

Вместо полного предопределенного названия этих режимов в директиве можно просто


записать значения от 0 до 3. Эти значения отражают параметры настройки битов 6 и 7 в
регистре ADCON0.

Примечание

Следует отметить, что выбор неправильного источника синхронизации или его режима
может привести к недостаточной разрешающей способности, или вообще к отсутствию
преобразовании. Поэтому будьте внимательны при выборе источника синхронизации. Если у
Вас есть сомнения в правильности Вашего выбора источника синхронизации или его
режима, то используйте в качестве источника синхронизации внутренний RC генератор
(FRC). Использование режима FRC приведет к небольшому уменьшению разрешающей
способности и меньшей скорости преобразования, но будет гарантированно работать.
Вообще FRC это настройка по умолчанию, если в программе отсутствует специальное
объявление.

Declare ADIN_STIME от 0 до 65535.

Это объявление создает задержку перед началом измерения, для того чтобы дать
возможность измерительному конденсатору полностью зарядится. Этот параметр может
принимать значения от 0 до 65535 микросекунд.

Выборе слишком малого значения этого параметра может привести к уменьшению


разрешающей способности. В тоже время выбор слишком большого значения приведет к
замедлению скорости преобразования без увеличения разрешающей способности.

Типовое рекомендуемое значение для ADIN_STIME лежит в пределах 50 ... 100 мксек.
Такие значения позволяют выбрать достаточное время для зарядки измерительного
конденсатора, и не слишком ограничить или увеличить скорость преобразования.

Проведение реальных экспериментов позволит найти боле правильное значение для этого
параметра. Значение по умолчанию равно 50 мксек.

Страница 147
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/adin_declare.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

Команды и директивы компилятора PROTON

BusIn-BusOut Declares

Объявления для BusIn-BusOut

Declare SDA_PIN PORTN.PIN

Это объявление служит для объявления порта и его вывода, для использования в цепи
обмена данными (SDA) шины I 2C, в качестве которых может быть назначен любой
действительный порт и его вывод PIC-микроконтроллера.

Eсли это объявление отсутствует в программе то по умолчанию используется PORTA.0

Declare SCL_PIN PORTN.PIN

Объявляет порт и вывод, используемый в цепи синхронизации (SCL) шины I 2C, в качестве
которых может быть назначен любой действительный порт и его вывод PIC-
микроконтроллера.

Eсли это объявление отсутствует в программе то по умолчанию используется PORTA.1

Declare SLOW_BUS On или OFF, или 1 - 0

Это объявление замедляет скорость передачи данных по шины шины I 2C при


использовании частоты задающего генератора микроконтроллера более чем 4 МГц.

Стандартная скорость обмена данными для шины I 2C равна 100 кГц, но некоторые
устройства могут использовать более высокую скорость обмена данными - до 400 кГц. Если
Вы используете кварцевый генератор на 8 МГц или выше, то скорость шины может
превысить предельное значение по спецификации на выбранное устройство, а это может
привести к сбоям в передаче и приеме информации. Поэтому, используйте это объявление,
если Вы не уверены в возможностях выбранного устройства.

Declare BUS_SCL On или OFF, или 1 - 0 , или TRUE - FALSE

Это переопределение устраняет потребность в подтягивающем резисторе в цепи SCL.

Спецификация протокола I 2C говорит о том, что в цепях SCL и SDA необходимо


устанавливать подтягивающие резисторы, однако, это не всегда возможно из-за
ограничений схемы и т.п. Поэтому, создав это объявление BUS_SCL ON вначале программы,
Вы можете не устанавливать подтягивающий резистор в цепи SCL.

Если это определение отсутствует в программе, то по умолчанию требуется подтягивающий


резистор в цепи SCL, то есть подтягивающий резистор необходимо установить.

Страница 148
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/busin_busout.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

Команды и директивы компилятора PROTON

HBusIn - HBusOut Declare

Объявления для HBusIn - HBusOut.

Declare HBUS_BITRATE Const 100, 400, 1000 etc.

Это объявление, позволяет изменять скорость передачи данных по шине I 2C.

Стандартная скорость передачи данных для шины I 2C - 100 кГц, но некоторые устройства
используют более высокую скорость обмена данными - до 400 кГц. Поэтому это объявление,
предназначено для изменения скорости шины I 2C.

Использовать это объявление нужно с осторожностью, так как слишком высокая скорость может
превысить возможности используемого устройства, а это может привести к сбоям в приеме-
передаче данных либо к их полному отсутствию.

Если такое объявление отсутствует в программе, то по умолчанию скорость передачи данных


устанавливается равной 100 кГц.

Страница 149
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/hbusin_hbusout.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

Команды и директивы компилятора PROTON

HSerIn, HSerOut, HRSin and HRSOut Declares

Объявления для HSerIn, HSerOut, HRSin и HRSOut.

Declare HSERIAL_BAUD Constant Value (константа)

Эта директива устанавливает скорость в бодах для связи по последовательному каналу при
использовании микроконтроллеров которые имеют аппаратный модуль USART. Эта
установка позволяет компилятору правильно рассчитать необходимые внутренние
временные интервалы для правильной работы модуля, в зависимости от выбранной частоты
тактового генератора.

Если директива не используется, то по умолчанию устанавливается скорость равная 2400


бод.

Declare HSERIAL_RCSTA константа от 0 дo 255

Это объявление записывает в регистр RCSTA микроконтроллера указанную константу. За


дополнительной информацией обращайтесь к справочной информации на выбранный
микроконтроллер.

Declare HSERIAL_TXSTA константа от 0 до 255

Это объявление записывает в регистр TXSTA микроконтроллера указанную константу.

Бит BRGH (бит 2) регистра TXSTA, управляет скоростью передачи. В некоторых случаях при
больших скоростях передачи и при некоторых частотах тактового генератора требуется,
чтобы этот бит был установлен в 1. Для того чтобы это сделать, установите в
HSERIAL_TXSTA значение $24 вместо $20. За дополнительной информацией обращайтесь к
справочным листам данных Microchip для используемых устройств.

Declare HSERIAL_PARITY ODD или EVEN

Этим объявлением включают либо отключают бит проверки данных на четность при
передачи и приеме их по последовательному каналу связи командами HRSIN, HRSOUT,
HSERIN и HSEROUT.

В отсутствии такого объявления по умолчанию задается формат обмена данными 8N1, т.е. 8
информационных разрядов, без бита проверки на четность и 1 стоповый бит.

В других форматах проверку на четность можно включить либо отключить, например:

7E1 (7 информационных разрядов, проверка на четность, 1 стоповый бит),


или
7O1 (7 информационных разрядов, проверка на нечетность, 1 стоповый бит). В
данном случае этим объявлением может быть разрешена и проверка на нечетность.

Declare HSERIAL_CLEAR On или OFF

Этим объявлением сбрасывается флаг ошибки переполнения перед началом чтения.

Поскольку последовательный порт микроконтроллера имеет только 2-байтовый входной


буфер, он может быстро переполниться. Когда это проиходит USART прекращает принимать
любые новые символы, и требует сброса. Ошибку переполнения можно сбросить, установив
бит CREN регистра RCSTA, например:

RCSTA.4 = 0
RCSTA.4 = 1

Или

Clear RCSTA.4
Set RCSTA.4

Альтернативой этому и является объявление Declare HSERIAL_CLEAR On, которое


автоматически будет очищать ошибку, даже если ошибок не было. Однако при этом
программа не будет знать, произошла ли ошибка при чтении или нет, поэтому некоторые
символы в такой ситуации могут быть потеряны.

Страница 150
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/hserin_declare.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

Команды и директивы компилятора PROTON

Second USART Declares for use with HRSIN2, HSERIN2, HRSOUT2 and HSEROUT2

Объявления для настройки второго модуля USART при работе с командами HRSIN2, HSERIN2,
HRSOUT2, HSEROUT2.

Declare HSERIAL2_BAUD константа

Это объявление устанавливает скорость передачи и приема в бодах для осуществления


связи по последовательному каналу при использовании второго модуля USART. Скорость
рассчитывается в зависимости от частоты тактового генератора объявленной в программе.

По умолчанию заданная скорость равна 2400 бод.

Declare HSERIAL2_RCSTA константа (от 0 до 255)

Это объявление записывает в регистр RCSTA2 указанное значение.

Для получения дополнительной информации относительно этого регистра смотрите


справочные листы данных Microchip для используемого устройства.

Declare HSERIAL2_TXSTA константа (от 0 до 255)

Это объявление записывает в регистре TXSTA2 указанное значение.

Бит BRGH (бит 2) регистра TXSTA, управляет скоростью передачи. В некоторых случаях при
больших скоростях передачи и некоторых частотах тактового генератора требуется, чтобы
этот бит был установлен в 1. Для того чтобы это сделать, установите в объявлении
значение $24 вместо $20.

Для получения дополнительной информации относительно этого регистра смотрите


справочные листы данных Microchip для используемого устройства.

Declare HSERIAL2_PARITY ODD или EVEN

Этим объявлением включают либо отключают бит проверки данных на четность при
передачи и приеме их по последовательному каналу связи командами HRSIN2, HRSOUT2,
HSERIN2 и HSEROUT2.

Если это объявление не используется, то по умолчанию задается формат обмена данными


8N1, т.е. 8 информационных разрядов, без бита проверки на четность и 1 стоповый бит.

В других форматах проверку на четность можно включить либо отключить, например:

7E1 (7 информационных разрядов, проверка на четность, 1 стоповый бит),


или
7O1 (7 информационных разрядов, проверка на нечетность, 1 стоповый бит). В
данном случае этим объявлением может быть разрешена и проверка на нечетность.

Declare HSERIAL_CLEAR On или OFF

Этим объявлением сбрасывается флаг ошибки переполнения перед началом чтения.

Поскольку последовательный порт микроконтроллера имеет только 2-байтовый входной


буфер, он может быстро переполниться. Когда это проиходит USART прекращает принимать
любые новые символы, и требует сброса. Ошибку переполнения можно сбросить, установив
бит CREN регистра RCSTA, например:

RCSTA2.4 = 0
RCSTA2.4 = 1
Или
Clear RCSTA2.4
Set RCSTA2.4

Альтернативой этому и является объявление Declare HSERIAL2_CLEAR On, которое


автоматически будет очищать ошибку, даже если ошибок не было. Однако при этом
программа не будет знать, произошла ли ошибка при чтении или нет, поэтому некоторые
символы в такой ситуации могут быть потеряны.

Страница 151
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/second_usart.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

Команды и директивы компилятора PROTON

HPWM Declares

Объявление для работы в режиме широтно-импульсной модуляции (HPWM).

Некоторые микроконтроллеры такие как PIC16F62x, и PIC18F4xx, имеют специальные выводы,


которые могут использоваться в режиме HPWM. Но с помощью следующих объявлений Вы
можете использовать для этой цели другие выводы, например:

Declare CCP1_PIN PORTN.PIN         ' Выбрать порт N и вывод PIN для канала 1 модуля CCP1

Declare CCP2_PIN PORTN.PIN         ' Выбрать порт N и вывод PIN для канала 2 модуля CCP2

По умолчанию - CCP1_PIN это PORTB.2, а CCP2_PIN - PORTC.1.

Страница 152
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/hpwm_declare.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

Команды и директивы компилятора PROTON

ALPHANUMERIC LCD PRINT Declare (Hitachi)

Объявления для работы с алфавитно-цифровыми ЖКИ имеющими встроенные контроллеры типа


Hitachi 44780.

PIC-микроконтроллеры могут отбмениваться данными с алфавитно-цифровыми ЖКИ работающими


под управлением встроенных контроллеров Hitachi 44780 или их аналогов. Для использования
таких ЖКИ предназначены следующие объявления:

Declare LCD_TYPE ALPHA

или

Declare LCD_TYPE 0

Это объявление указывает PIC-микроконтроллеру, что используется алфавитно-цифровой


ЖКИ работающий под управлением встроенного контроллера типа Hitachi 44780 или его
аналога.

Declare LCD_DTPIN PORT.PIN

Это объявление определяет порт и выводы, к которым должны быть подключены цепи
данных ЖКИ.

ЖКИ может быть связан с микроконтроллером посредством 4-разрядной либо полной 8-


разрядной шины данных. Если используется 8-разрядный интерфейс, то цепь данных ЖКИ,
со всеми её 8-ми разрядами (D0 ... D7), должна быть подключена к одному порту. Если же
применяется 4-разрядный интерфейс, то тогда цепь данных ЖКИ, состоящая из четырёх
старших разрядов (D4 ... D7), подключается к 4 старшим разрядам одного порта, например:

Declare LCD_DTPIN PORTB.4            ' 4-х разрядный интерфейс.

Declare LCD_DTPIN PORTB.0            ' 8-ми разрядный интерфейс. .

Цепи передачи данных ЖКИ могут быть подключены к любому действительному порту
микроконтроллера. В вышеприведенных примерах использование порта PORTB основано
только на личном предпочтени автора.

Если это объявление не используется в программе, то по умолчанию подразумевается 4-х


проводной интерфейс, старшие разряды (D3 ... D7) цепи данных которого, подключаются
соответственно к старшим разрядам порта PORTB.

Declare LCD_ENPIN PORT.PIN

Это объявление назначает порт и вывод микроконтроллера, к которому подключается цепь


EN ЖКИ

Если это объявление не используется в программе, то по умолчанию цепь EN должна быть


подключена к PORTB.2

Declare LCD_RSPIN PORT.PIN

Это объявление назначает порт и вывод микроконтроллера, к которому подключается цепь


RS ЖКИ

Если это объявление не используется в программе, то по умолчанию цепь RS должна быть


подключена к PORTB.3

Declare LCD_INTERFACE 4 или 8

ЭЭто объявление сообщает компилятору информацию о том, какой интерфейс будет


использоваться, т.е. 8 разрядный или 4 разрядный.

Если это объявление не используется в программе, то по умолчанию используется 4


разрядный интерфейс.

Declare LCD_LINES1, 2 или 4

В этом объявлении сообщается компилятору сколько строк имеет ЖКИ.

Страница 153
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/lcd_alfa.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

Самый популярный формат ЖКИ это 2 строки по 16 символов. Однако, существуют и


другие ЖКИ с 1-ой строкой или даже 4-мя строками и количеством символов в строке от 8
до 40. Поэтому при использовании ЖКИ с другим количеством строк, в этом объявлении
нужно указать какое количество имеет выбранный ЖКИ. Количество знакомест в строке не
имеет значения.

Если это объявление не используется в программе, то по умолчанию подразумевается 2


строки.

Страница 154
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/lcd_alfa.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

Команды и директивы компилятора PROTON

GRAPHIC LCD Declare

Объявления для работы с графическими ЖКИ.

Синтаксис:

Declare LCD_TYPE 0 или 1 или 2

или

Declare LCD_TYPE ALPHA или GRAPHIC

или

Declare LCD_TYPE SAMSUNG или TOSHIBA

Это директива сообщает компилятору тип ЖКИ, для того чтобы команда Print правильно
выводила информацию на определенный тип ЖКИ.

Если в директиве указаны ALPHA или 0, либо если директива отсутствует, это означает, что
команда Print будет настроена на работу со стандартными алфавитно-цифровыми ЖКИ,
которые управляются встроенными контроллерами типа Hitachi 44780.

При значение 1, или указанных ключевых словах GRAPHIC или SAMSUNG, команда Print
настраивается на вывод графических символов и работу с графическими ЖКИ работающими
под управлением встроенных контроллеров типа Samsung KS0108.

Если в директиве указана цифра 2 или ключевое слово TOSHIBA, то это значит, что
команда Print будет настроена на вывод графической информации на ЖКИ управляемые
встроенными контроллерами типа TOSHIBA T6963

Ориентация разработчика на графические ЖКИ позволит, кроме Print, использовать такие


команды, как Plot, UnPlot, LCDRead, LCDWrite, Pixel, Box, Circle и Line.

См. также: SAMSUNG KS0108 Graphic LCD specific Declares, TOSHIBA T6963 Graphic LCD
specific Declares .

Страница 155
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/lcd_graf.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

Команды и директивы компилятора PROTON

SAMSUNG KS0108 Graphic LCD specific Declares

Специфические объявления для работы с графическим ЖКИ типа SAMSUNG KS0108.

Declare LCD_DTPORT PORT

Это объявление назначает порт, к которому будет подключена 8-разрядная шина данных
графического ЖКИ.

По умолчанию используется порт PORTB.

Declare LCD_RWPIN PORT.PIN

Это объявление назначаете порт и вывод микроконтроллера, к которому подключается цепь


RW графического ЖКИ.

По умолчанию используется PORTB.0

Declare LCD_RSPIN PORT.PIN

Назначает порт и вывод микроконтроллера, к которому подключается цепь RS графического


ЖКИ.

Declare LCD_ENPIN = PORT.PIN

Назначает порт и вывод микроконтроллера, к которому подключается цепь E графического


ЖКИ.

Declare LCD_CS1PIN PORT.PIN

Назначает порт и вывод микроконтроллера, к которому подключается цепь CS1


графического ЖКИ.

По умолчанию используется PORTС.0

Declare LCD_CS2PIN PORT.PIN

Назначает порт и вывод микроконтроллера, к которому подключается цепь CS2


графического ЖКИ.

По умолчанию используется PORTС.2

Declare INTERNAL_FONT On - OFF, 1 или 0

Для отображении текста на графическим ЖКИ, требуется отдельный набор шрифтов. Этот
набор шрифтов может храниться в одном из двух мест, либо во внешней EEPROM, либо во
внутренней памяти микроконтроллера, куда набор шрифтов записывается командой CData.

Если для хранения шрифтов выбрана внешняя память, которая должна быть подключена к
микроконтроллеру по протоколу I 2C, то в соответствующих объявлениях (Declare SDA и
Declare SCL) должны быть указаны выводы подключения цепей SDA и SCL.

Если же выбран внутренний шрифт, то микроконтроллер, для его хранения, должен иметь
флэш-память программ, быть типа 16F87X , или быть из серии 18XXXX.

Таблица CData, которая содержит шрифт, должна иметь метку c названием FONT: ,
например:

FONT:-

CData $7E , $11 , $11 , $11 , $7E , $0          ' Буква "A"


CData $7F , $49 , $49 , $49 , $36 , $0          ' Буква "B"
{ остальная часть таблицы шрифтов }

Необходимо обратить внимание на тире после метки FONT:, тире отключает любой код
коммутации блоков памяти, который может нарушить целостность данных в ячейках памяти
таблицы CData.

Таблица шрифтов может находиться в любом месте памяти, однако её лучше разместить
сразу после основного кода программы.
Страница 156
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/lcd_samsung.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

Если это объявление отсутствует, то по умолчанию используется внешний шрифт.

Deсlare FONT_ADDR от 0 до 7

Это определение устанавливает адрес микросхемы EEPROM, который содержит внешний


шрифт.

Когда выбран внешний источник шрифта, то им может быть любая из 8 возможных


микросхем памяти EEPROM, подключенных по шине I 2C.

Если это объявление отсутствует, то по умолчанию используется адрес 0.

Deсlare GLCD_CS_INVERT ON - OFF, 1 или 0

Некоторые типы графические ЖКИ имеют инверторы на CS входах. Это означает, что на
экране ЖКИ левые данные отображаются с правой стороны, и наоборот. Этим объявлением
компилятор корректирует такие несовпадения, обращаясь к своим библиотечным
подпрограммам.

Declare GLCD_STROBE_DELAY от 0 до 65535

Это объявление создаёт задержку от 0 до 65535 микросекунд между стробом в цепи EN и


данными. Это помогает избавится от случайных бит (пикселей) появляющихся на экране
ЖКИ в случаях когда присутствуют шумы, или при неудачной разводке печатной платы.

Если это объявление отсутствует, то по умолчанию задержка равна 0.

Страница 157
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/lcd_samsung.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

Команды и директивы компилятора PROTON

TOSHIBA T6963 Graphic LCD specific Declares

Объявления для работы с графическими ЖКИ работающими под управлениим контроллеров типа
TOSHIBA T6963.

Declare LCD_DTPORT PORT

Это объявление определяет порт к которому должны быть подключены все 8 разрядов
цепей данных ЖКИ.

Настройки по умолчанию не предусмотрены.

Declare LCD_WRPIN PORT.PIN

Это объявление определяет вывод и порт, к которому подключается цепь WR графического


ЖКИ.

Настройки по умолчанию не предусмотрены.

Declare LCD_RDPIN PORT.PIN

Это объявление определяет вывод и порт, к которому подключается цепь RD графического


ЖКИ.

Настройки по умолчанию не предусмотрены.

Declare LCD_CEPIN PORT.PIN

Это объявление определяет вывод и порт, к которому подключается цепь CE графического


ЖКИ.

Настройки по умолчанию не предусмотрены.

Declare LCD_CDPIN PORT.PIN

Это объявление определяет вывод и порт, к которому подключается цепь CD графического


ЖКИ.

Настройки по умолчанию не предусмотрены.

Declare LCD_RSTPIN PORT.PIN

Это объявление определяет вывод и порт, к которому подключается цепь RST (Reset)
графического ЖКИ.

Если это объявление отсутствует в программе то компилятор не будет управлять этой цепью
и поэтому вывод RST (Reset) ЖКИ необходимо подключить к общей цепи питания чтобы
избавится от возможных помех.

Declare LCD_X_RES от 0 до 255

Это объявление сообщает компилятору о размере в пикселах экрана используемого


графического ЖК, так как мониторы на базе набора микросхем T6963 могут иметь
различные размеры экранов.

Настройки по умолчанию не предусмотрены.

Declare LCD_Y_RES от 0 до 255

По тем же причинам, что и в предыдущем примере в этом объявлении указывается


вертикальный размер экрана используемого ЖКИ.

Настройки по умолчанию не предусмотрены.

Declare LCD_FONT_WIDTH 6 или 8

ЖК мониторы типа Toshiba T6963 имеют два внутренних размера шрифта. Первый шрифт
имеет размер 6 пикселей в ширину и 8 пикселей в высоту, второй 8 пикселей в ширину и 8
пикселей в высоту. Выбор шрифта производится установкой соответствующего логического
уровня на входе цепи FS ЖКИ. Установка высокого логического уровня в цепи FS приводит

Страница 158
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/lcd_toshiba.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

к выбору шрифта в 6х8 пикселей, а низкого логического уровеня в выбору шрифта 8х8
пикселей.

Компилятор должен знать Ваши требования к размеру шрифта, для того чтобы можно было
вычислить границы оперативной памяти и экрана. Необходимо отметить, что компилятор не
управляет выводом FS и не устанавливает его в состояние высокого или низкого
логического уровня.

Настройки по умолчанию не предусмотрены.

Declare LCD_RAM_SIZE от 1024 до 65535

Это объявление указываете компилятору на объем ОЗУ используемого дисплея.

ЖК мониторы типа Toshiba T6963 имеют внутреннюю оперативную память, которая


используется для хранения текстовой информации, или информации необходимой для
создания графики или графических символов. Количество оперативной памяти, обычно
определяется разрешающей способностью монитора. Чем больше дисплей, тем больше
оперативной памяти он имеет. Стандартные дисплеи с размером экрана 128x64 пикселов
обычно содержат 4096 байт оперативной памяти, а большие дисплеи с разрешением 240x64
или 190x128 пикселов обычно имеют 8192 байта оперативной памяти. Внимательно
изучайте спецификацию на используемый дисплей для уточнения размеров ОЗУ
используемого монитора.

По умолчанию компилятор производит все вычисления для ОЗУ объемом 8192 байта.

Declare LCD_TEXT_PAGES от 1 до n

Как уже упоминалось, графические мониторы типа Toshiba T6963 имеют оперативную
память, в которой хранится текстовая, графическая или информация о символах. При
обычном использовании, требуется только одна страница для текста, однако, компилятор
может перестроить свои подпрограммы библиотек так, чтобы занять несколько страниц для
текстовой информации.

Это объявление является дополнительным и обычно не требуется, так как по умолчанию


для хранения текстовой информации используется 3 текстовых страницы.

Declare LCD_GRAPHIC_PAGES от 1 до n

Так же, как для хранения текстовой информацией, в графических мониторах Toshiba часть
оперативной памяти отводится для храниния графических символов. При обычном
использовании, требуется только одна страница для всех графических символов, однако,
компилятор может перестроить свои подпрограммы библиотек, так чтобы позволить иметь
несколько страниц для графических символов.

Это объявление является дополнительным и обычно не требуется, так как по умолчанию


создается 1 страница графических символов.

Declare LCD_TEXT_HOME_ADDRESS от 0 до n

ОЗУ ЖКИ Toshiba делится на 3 области, порядок распределения которых следующий:


область текстовой информации, графической и символьной. Обычно текстовая область
начинается с адреса 0, однако, могут быть случаи, когда начальный адрес следует
установить другим.

Каждая область оперативной памяти не должна накладываться друг на друга и на дисплее


не должны появляться искажения, поэтому каждый тип информации использует
назначенное ему место в памяти. Библиотеки подпрограмм компилятора вычисляют каждую
область оперативной памяти, в зависимости от того, где начинается текстовая область
оперативной памяти.

Это объявление является дополнительным, и обычно не требуется, по умолчанию


начальный адрес для хранения текстовой информации равен 0.

Страница 159
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/lcd_toshiba.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

Команды и директивы компилятора PROTON

Declare KEYPAD_PORT PORTN

Объявлениe для вспомогательной клавиатуры.

Объявлениe Declare KEYPAD_PORT PORTN назначает порт, к которому подключается


вспомогательная клавиатура.

Подключить клавиатуру можно к любому порту. Однако цепи клавиатуры требуют подключения
подтягивающих резисторов. Поэтому, лучшим портом микроконтроллера для этих целей является
PORTB, который имеет в своем составе внутренние подтягивающие резисторы. Чтобы включить
внутренние подтягивающие резистора порта PORTB необходимо в список определений включить
следующую запись:

Declare PORTBPULLUPS = On

При подключении клавиатуры к другому порту необходимо использовать директиву:

Declare KEYPAD_PORT PORTN

где N может быть портами А, С или D.

Если директива Declare KEYPAD_PORT PORTN не была использована в программе, то по


умолчанию используется PORTB.

Страница 160
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/keypad_declare.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

Команды и директивы компилятора PROTON

RSIN - RSOUT Declare

Объявления для команд RSIN - RSOUT

Declare Rsout_PIN PORT.PIN

Этим определением назначаются порт и вывод, которые будут использоваться командой


RSOut для вывода данных по последовательному каналу. Таким портом может быть любой
действительный порт PIC-микроконтроллера.

Если это определение не используется, то по умолчанию используется PORTB.0.

Declare Rsin_PIN PORT.PIN

Это определение назначает порт и вывод, которые будут использоваться командой RSin
для ввода данных по последовательному каналу. Этим портом может быть любой
действительный порт PIC-микроконтроллера.

Если определение не используется, то по умолчанию для Rsin назначается PORTB.1.

Declare Rsout_MODE INVERTED, TRUE или 1 , 0

Это объявление устанавливает для команды RSOut режим вывода данных. Если в
объявлении указан параметр INVERTED (или 1) то выводятся инвертированные данные,
Если указан параметр 0, то данные выводятся в прямом режиме.

Если это объявление отсутствует в программе, то по умолчанию используется режим вывода


инвертированных данных.

Declare Rsin_MODE INVERTED, TRUE или 1 , 0

Это объявление устанавливает режим ввода данных по последовательному каналу командой


RSin. Если в определении указан параметр INVERTED (или 1) то вводятся инвертированные
данные, Если указан параметр 0, то вводятся неинвертированные данные.

Если это объявление отсутствует в программе, то по умолчанию используется режим приема


инвертированных данных.

Declare Serial_BAUD от 0 до 65535 бит в секунду (бод)

Это объявление сообщает компилятору, на какой скорости в бодах, будет происходить


обмен данными по последовательному каналу между командами RSOut и RSIn.

Обмен данными по последовательному каналу между командами RSOut и RSin может


происходить на любой скорости, но существуют стандартные предопределенные скорости
измеряемые в бодах, которых следует придерживаться в разрабатываемых программах:

300, 600, 1200, 2400, 4800, 9600, и 19200 бод.

При использовании кварца с частотой 4 МГц, самая высокая скорость, которая надежно
может обеспечивать безошибочные прием и передачу данных командами RSOut и RSin,
равна 9600 бод. Однако, увеличение частоты задающего генератора позволяет достичь
более высоких скоростей, включая 38400 бод.

Если в программе отсутствует это объявление, то по умолчанию утанавливается скорость


равная 9600 бод.

Declare Rsout_Pace от 0 до 65535 микросекунд

Это объявление устанавливает временную задержку между символами, при передаче их


командой RSOut.

При передачи данных, с большой для приемника скоростью, отдельные символы могут
пропускаться, то есть могут быть не приняты приемной стороной. Для устанения этих
ошибок полезно бывает ввести некоторую задержку между каждым символом в
передаваемых командой RSOUT данных, так как по умолчанию задержка между символами
отсутствует.

Страница 161
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/rsin_rsout.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

Declare Rsin_Timeout от 0 до 65535 миллисекунд

Это объявление устанавливает время, в течении которого команда RSin будет ждать
прихода данных.

По умолчанию команда RSin ждет прихода данных в течении 10 секунд. Если в течении
этого времени не было получено ни одного бита, то команда RSin прекращает ожидание
данных и выходит из цикла ожидания, а затем завершает свою работу.

Этим объявлением можно изменить, или вообще отменить время ожидания прихода данных.
Это время может быть выбрано из интервала от 0 до 65535 миллисекунд.

Страница 162
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/rsin_rsout.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

Команды и директивы компилятора PROTON

SERIN - SEROUT Declare

Объявления для команд SERIN - SEROUT

Объявления необходимые для осуществлении связи по асинхронному последовательному каналу.

Если микроконтроллер связан асинхронным последовательным каналом с некоторым устройством, которое имеет свое
программное обеспечение, то его скорость, и режимы работы становятся определяющими для работы
микроконтроллера.

Обмен информацией между PIC-микроконтроллером и переферийными устройствами осуществляется командами


SerIn и SerOut с форматами данныx получившими названия 7Е и 8N. Формат 7Е (7-bit/even-parity) используется для
передачи текстовых данных, а формат 8N (8-bit/no-parity) для байт-ориентированных данных.

В формате данных 7E 7 разрядов отводятся для данных и один разряд для бита проверки на четность передаваемой
текстовой информации.

В формате данных 8N все 8 разрядов отводятся для данных без осуществления проверки на четность передаваемой
байтовой информации.

Следует отметить, обычно используется формат 8N, даже когда передаваемые данные только текст. Тем не менее
многие устройства используют формат 7E, так как при проверке на четность могут быть обнаружены некоторые
ошибки связи. Но при использования этого формата, количество информационных разрядов уменьшается на
единицу, а это означает, что принимаемые байты данных, в формате 7E, могут представлять собой только значения
от 0 до 127, но не от 0 до 255 как при использовании формата 8N.

Иное количество разрядов используемых для передачи данных может определяться соответствующими
объявлениями:

Примеры объявлений форматов данных без проверки на четность (настройка по умолчанию):

' Установить формат команд SerIn и SerOut как 4 информационных


Declare SERIAL_DATA 4
разряда
Declare SERIAL_DATA 5 ' Установить формат - 5 информационных разрядов
Declare SERIAL_DATA 6 ' Установить формат - 6 информационных разрядов
Declare SERIAL_DATA 7 ' Установить формат - 7 информационных разрядов
Declare SERIAL_DATA 8 ' Установить формат - 8 информационных разрядов (по умолчанию)

Примеры объявлений в случае ипользования формата данных с проверкой на четность:

' Установить формат команд SerIn и SerOut как 4 информационных


Declare SERIAL_DATA 5
разряда
Declare SERIAL_DATA 6 ' Установить формат - 5 информационных разрядов
Declare SERIAL_DATA 7 ' Установить формат - 6 информационных разрядов
Declare SERIAL_DATA 8 ' Установить формат - 7 информационных разрядов (по умолчанию)
Declare SERIAL_DATA 9 ' Установить формат - 8 информационных разрядов

Проверка на четность использует простую процедуру обнаружения ошибок, но достаточно эффективную. Когда в
передатчике установлен формат с проверкой на четность, он каждый раз в отправляемом байте считает количество
битов находящихся в состоянии 1. Затем в последнем разряде, называемом дополнением до четности, передатчик
устанавливает этот бит так, чтобы сумма всех битов находящихся в состоянии 1 была четной. Например, если некий
передатчик посылает значение из 7 битов: %0011010, то он устанавливает бит четности в состояние 1, для того
чтобы сделать общее количество разрядов равных 1 четным числом (четыре).

Приемник, в свою очередь, также считает информационные разряды, для того чтобы вычислить, каким должен быть
бит четности. Если вычисленное значение соответствует полученному значению бита четности, то это значит, что
данные были получены правильно.

Конечно, такая проверка может быть не однозначной, так как два неправильно полученных бита могли бы привести
к тому, что бит четности, оказался бы правильным, хотя данные были бы неверны. Или наоборот, бит четности мог
быть принят неправильно, хотя остальная часть данных была верной. Однако на практике такая процедура проверки
принятых данных дает хорошие результаты, и во многих случаях может быть рекомендована.

Declare SERIAL_PARITY ODD или EVEN

Это объявление предназначено для включения или отмены проверки на четность, например:

Declare SERIAL_PARITY = EVEN           ' Использовать проверку на четность

Declare SERIAL_PARITY = ODD            ' Не использовать проверку на четность

Если это объявление отсутствует в программе, то по умолчанию производится проверка на четность.

Страница 163
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/serin_serout.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

Команды и директивы компилятора PROTON

SHIN - SHOUT Declare

Объявления для команд SHIN - SHOUT

Declare SHIFT_DELAYUS от 0 до 65535 микросекунд

Это объявление увеличивает время активного состояния синхроимпульсов.

Сигнал синхронизации, используемый в синхронной последовательной связи, имеет частоту


около 45 кГц. Отсюда можно определить, что сигнал синхронизации в активном состоянии
находится около 2 микросекунд. Используя это объявление в программе, можно увеличить
активное состояние синхросигнала на дополнительное время:

Tси = 2 мксек + 65535 мксек.

Таким образом, можно уменьшить тактовую частоту синхронизации.

Если это определение не используется, то по умолчанию дополнительная длительность


синхроимпульсов равна 0, то есть частота импульсов синхронизации примерно будет
составлять 45 кГц, а их длительность 2 мксек.

Страница 164
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/shin_shout.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

Команды и директивы компилятора PROTON

COMPACT FLASH INTERFACE Declares

Объявления для работы с карточками Compact Flash.

Для работы с карточками Compact Flash (CF) существует несколько объявлений. Одни объявления
определяют выводы PIC-микроконтроллера, другие устанавливают скорость обращения к
карточке.

Declare CF_DTPORT PORT

Это объявление, определяет порт, к которому подключаются цепи данных карточки Compact
Flash. Всего таких цепей 8, поэтому должен быть выбран один из 8-разрядных портов,
например PORTB, PORTC, PORTD и т.д. По умолчанию цепи данных для работы с карточкой
не определены, следовательно при использовании карточки это объявление должно
обязательно присутствовать в программе.

Declare LCD_ADPORT PORT

Это объявление, определяет порт, к которому подключены цепи адреса карточки Compact
Flash. Цепи адреса состоят из 3 разрядов, но цепь A0 карточки CF должна быть
подключена к биту 0 любого указанного порта. Например, если цепи адреса карточки
Compact Flash должны быть присоединены к PORTA микроконтроллера, то цепь A0 карточки
CF должна быть подключена к PORTA.0, цепь A1 карточки CF должна быть подключена к
PORTA.1, а цепь A2 карточки CF должна быть подключена к PORTA.2.

В связи с тем, что команды доступа к карточке CF будут маскировать данные перед
передачей их на указанный порт, то все оставшиеся незадействованными разряды этого
порта будут находится в нерабочем состоянии. Наилучший выбор порта для
микроконтроллера в корпусе с 40 выводами это использование PORTE, поскольку PORTE
имеет в своем составе только 3 вывода.

По умолчанию цепи данных для работы с карточкой не определены, следовательно это


объявление должно обязательно присутствовать в программе.

Declare CF_ADPORT_MASK = On или OFF, или TRUE или FALSE, или 1, 0

Обе команды CF_WRITE и CF_SECTOR указывают адрес карточки Compact Flash. Так как
адрес содержит только 3 бита, то команды должны обеспечить чтобы другие разряды этого
порта не использовались. Это достигается путем маскирования (маскировкой)
нежелательных данных перед их передачей в адрес строки.

Маскирование данных занимает небольшую дополнительную часть памяти программ, и


некоторое дополнительное время. Однако, есть случаи когда состояние других разрядов
порта не важно, или когда используется 3-разрядный порт, например PORTE в 40-выводных
микроконтроллерах. В этих случаяях в объявлении Declare CF_ADPORT_MASK
целесообразно указать параметр FALSE, который выключит маскирование, и таким образом
уменьшит объем созданного кода и сократит время для обслуживания маскирования
данных.

При отсутствии этого объявления в программе никаких настроек по умолчанию не


предусмотрено, поэтому это объявление обязательно должно присутствовать в программе.

Declare CF_RDYPIN PORT . PIN

Это объявление определяет вывод микроконтроллера к которому подключается цепь


RDY/BSY карточки CF.

При отсутствии этого объявления в программе никаких настроек по умолчанию не


предусмотрено, поэтому такое объявление обязательно должно присутствовать в программе.

Declare CF_OEPIN PORT . PIN

Это объявление определяет вывод микроконтроллера, к которому подключается цепь OE


карточки CF.

При отсутствии этого объявления в программе никаких настроек по умолчанию не


предусмотрено, поэтому такое объявление обязательно должно присутствовать в программе.

Страница 165
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/flash_declare.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

Declare CF_WEPIN PORT . PIN

Это объявление определяет вывод микроконтроллера, к которому подключается цепь WE


карточки CF.

При отсутствии этого объявления в программе никаких настроек по умолчанию не


предусмотрено, поэтому такое объявление обязательно должно присутствовать в программе.

Declare CF_CD1PIN PORT. PIN

Это объявление определяет вывод микроконтроллера, к которому подключается цепь CD1


карточки CF.

Цепь CD1 не используется командами обмена информацией с карточкой памяти, она служит
для того, чтобы сообщить микроконтроллеру о том, что карточка вставлена в разъем.

Declare CF_RSTPIN PORT . PIN

Это объявление определяет вывод микроконтроллера, к которому подключется цепь RST


(RESET) карточки CF.

Цепь RESET не является необходимой для связи микроконтроллера с карточкой Compact


Flash, но бывает полезной, когда требуется очистка карточки. Если цепь RESET не
используется для подключения к микроконтроллеру, то необходимо соединить вывод RESET
карточки CF с общим проводом схемы.

Если это объявление Declare CF_RSTPIN не используется в программе, то вся информация


о цепи RESET должна быть удалена из команды CF_Init.

Declare CF_CE1PIN PORT . PIN

Это объявление определяет вывод микроконтроллера, к которому подключается цепь CE1


карточки CF.

Как и цепь RESET, цепь CE1 не является необходимой для работы с карточкой Compact
Flash, но может быть полезной. Если установить эту цепь в высокое логическое состояние,
то карточка будет игнорировать все команды. Поэтому, если цепь CE1 не подключена к
микроконтроллеру, то необходимо соединить вывод CE1 карточки с общим проводом схемы.
Если это объявление не используется в программе, то вся информация о цепи CE1 должна
быть удалена из команды CF_Init.

Declare CF_READ_WRITE_INLINE = On или OFF, TRUE или FALSE, или 1 или 0

Это объявление предназначено для задания скорости обмена данными между карточкой CF
и микроконтроллером.

Иногда скорость имеет существенное значение при обращении к картам Compact Flash,
особенно при взаимодействии с новыми модификациями карт СF, скорость обмена данных у
которых в 40 раз быстрее, чем у базовых моделей. Для таких карт, компилятор имеет
возможность создавать код, необходимый для CF_Write и CF_Read используя встроенные
команды inline, что означает, что не требуется библиотеки подпрограмм и компилятор
может адаптировать код для чтения или записи переменных Word, DWord и Float. Однако
на это тратится дополнительная память и возрастает размер скомпилированного файла,
увеличивается время выполнения каждой команды и команды не поддаются оптимизации.
Это также означает, что встроенный тип команд действительно подходит только для
высокоскоростных карт Compact Flash.

По умолчанию для такого объявления никаких настроек не предусмотрено, поэтому при


отсутствии необходимости работать с картами СF, его не нужно включать в тело программы.

Страница 166
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/flash_declare.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Declare

Команды и директивы компилятора PROTON

CRYSTAL FREQUENCY Declares

Объявления для частот кварцевого резонатора.

Синтаксис

Declare XTAL 4

или

XTAL = 4

или

XTAL 4

Эти объявления сообщают компилятору с каким кварцем и на какой частоте должен работать
задающий генератор микроконтроллера.

При использовании микроконтроллеров c 12 разрядными ядрами могут использоваться


следующие варианты объявлений для частот от 4 МГц до 20 МГц :

Declare XTAL 4 , 8 , 10 , 12 , 16 , 20 .

При использовании микроконтроллеров c 14 разрядными ядрами могут использоваться


следующие варианты объявлений для частот от 3 МГц до 24 МГц :

Declare XTAL 3 , 4 , 8 , 10 , 12 , 14 , 16 , 20 , 24 .

При использовании микроконтроллеров c 16 разрядными ядрами могут использоваться


следующие варианты объявлений для частот от 3 МГц до 48 МГц :

Declare XTAL 3 , 4 , 8 , 10 , 12 , 14 , 16 , 20 , 24 , 25 , 32 , 33 , 40 , 48.

Примечания

Работа некоторых команд очень сильно зависит от частоты генератора, например, RSIn,
RSOut, DelayMS, DelayUS. Поэтому важно указать компилятору правильную частоту
генератора, чтобы он смог скорректировать правильныe установки времени для этих
команд.

Если выбрана частота 3 или 14, то выходной код будет создан для частот 3.58 МГц и 14.32
МГц соответственно.

Если директива Declare XTAL отсутствует в программе, то по умолчанию будет заданна


частота 4 МГц.

Страница 167
http://terrarus.ucoz.ru/proton_plus_ide/proton/declares/crystal_declare.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда DelayMS

Команды и директивы компилятора PROTON

DelayMS

Синтаксис:

DelayMS Length

По этой команде производится программная пауза. Встретив в программе эту команду, микроконтроллер
отрабатывает заданную величину паузы. Длительность паузы может быть до 65535 мсeк (65,535 секунды).

Параметр Length определяет длительность паузы в мсек. Этот параметр может быть константой,
переменной, или выражением.

Пример

XTAL = 4 ' Установить частоту генератора равной 4 МГц


Dim VAR1 As Byte ' Создать переменную VAR1 типа Byte
Dim WRD1 As Word ' Создать переменную VRD1 типа Word
VAR1 = 50 ' Присвоить переменной VAR1 значение равное 50
WRD1 = 1000 ' Присвоить переменной WRD1 значение равное 1000
DelayMS 100 ' Пауза равна 100 мc
DelayMS VAR1 ' Пауза равна 50 мc
DelayMS WRD1 ' Пауза равна 1000 мc
DelayMS WRD1 + 10 ' Пауза равна 1010 мc
DelayMS WRD1 + VAD1 ' Пауза равна 1050 мc

Примечание

По умолчанию в команде DelayMS пауза рассчитывается для работы со встроенным генератором на 4


МГц. Если же Вы не указали компилятору в директиве Declare другую частоту, с которой реально будет
работать ваш контроллер, компилятор будет вести расчет от частоты по умолчанию, и тогда указываемые
вами значения задержки не будут соответствовать реальным значениям. То есть, например, применив
кварц на 5 МГц, заданная пауза по команде "DelayMS 1000" не будет равна 1000 мс.

Смотрите также : DelayUS, Sleep, Snooze

Страница 168
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/delayms/delayms.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда DelayUS

Команды и директивы компилятора PROTON

DelayUS

Синтаксис:

DelayUS Length

Команда DelayUS применяется для создания программных пауз в несколько микросекунд. Длительность такой
паузы может быть от 1 до 65535 мксек (65,535 миллисекунд).

Параметр Length определяет длительность задержки в мксек. Этот параметр может быть константой,
переменной, или выражением.

Пример

XTAL = 4 ' Установить частоту генератора равной 4 МГц


Dim VAR1 As Byte ' Создать переменную VAR1 типа Byte
Dim WRD1 As Word ' Создать переменную WRD1 типа Word
VAR1 = 50 ' Присвоить переменно VAR1 значение равное 50
WRD1 = 1000 ' Присвоить переменно WRD1 значение равное 1000
DelayUS 1 ' пауза в 1 мкcек
DelayUS VAR1 ' пауза в 50 мкcек
DelayUS WRD1 ' пауза в 1000 мкcек
DelayUS WRD1 + 10 ' пауза в 1010 мкcек

Примечание

По умолчанию пауза в команде DelayUS рассчитывается для работы со встроенным генератором на 4


МГц. Если же Вы не указали компилятору в директиве Declare другую частоту, с которой реально будет
работать Ваш микроконтроллер, компилятор будет вести расчет от частоты по умолчанию, и тогда
указываемые вами значения задержки не будут соответствовать реальным значениям. То есть, например,
применив кварц на 18 МГц, заданная пауза по команде "DelayUS 1000" не будет равна 1000 мксек.

Если в качестве параметра длительности используется константа, то может быть достигнута минимальная
длительность равная 1 мксек. Если же в качестве параметра длительности используется переменная, то
минимальное время задержки будет зависеть от частоты используемого кварцевого резонатора:

МИНИМАЛЬНАЯ
ЧАСТОТА КВАРЦА
ДЛИТЕЛЬНОСТЬ
4 МГц 24 мксек
8 МГц 12 мксек
10 МГц 8 мксек
16 МГц 5 мксек
20 МГц 2 мксек
24 МГц 2 мксек
25 МГц 2 мксек
32 МГц 2 мксек
33 МГц 2 мксек
40 МГц 2 мксек

Смотрите также : Declare, DelayMS, Sleep, Snooze

Страница 169
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/delayus/delayus.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Device

Команды и директивы компилятора PROTON

Device

Синтаксис:

Device Number

Эта команда сообщает компилятору, какой PIC-микроконтроллер должен использоваться в


программе.

Number - номер PIC-микроконтроллера, который может быть с 12-разрядным, 14-


разрядным или 16-разрядным ядром.

Примеры

Device 16F877          ' Произвести программный код для 16F877

или

Device 16F84            ' Произвести программный код для 16F84

или

Device 12С508          ' Произвести программный код для 12C508

или

Device 18F452          ' Произвести программный код для 18F452

Поддерживаемые устройства:

Команда может работать со следующими PIC-микроконтроллерами:

c 12-разрядным ядром:

12C508, 12C509, 12C508A, 12C509A, 12CE518, 12CE519, 16C54, 16C54A,


16C54B,

16C55, 16C55A, 16C56, 16C56A, 16CR56, 16C57, 16C57C, 16CR57A,


16CR57B, 16C58,16C58A, 16CR58A, 16CR58B, 16CR58C, RF509AF, RF509AG.

с 14-разрядным ядром:

12C671, 12C672, 12CE673, 12CE674, 16C61, 16C62, 16C62A, 16C62B,


16C63, 16C63A, 16C64, 16C64A, 16C65, 16C65A, 16C65B, 16C66, 16C67,
16C71, 16C71A, 16C72, 16C72A, 16C73, 16C73A, 16C73B, 16C73C, 16C74,
16C74A, 16C76, 16C77, 16C554, 16C554A, 16C558, 16C558A, 16C641,
16C642, 16C661, 16C662, 16C710, 16C711, 16C712, 16C715, 16C716,
16C745, 16C765, 16C770, 16C771.

с 14-разрядным ядром и FLASH памятью программ:

12F675, 12F629, 16F630, 16C84, 16CR84, 16F72, 16F73, 16F74, 16F76,


16F77,16F83, 16F84, 16F84A, 16F627, 16F628, 16F627A, 16F628A,
16F648A, 16F676, 16F684, 16F688, 16F737, 16F747, 16F767, 16F777,
16F818, 16F819, 16F870, 16F871, 16F872, 16F873, 16F873A, 16F874,
16F874A, 16F876, 16F876A, 16F877, 16F877A.

c 16-разрядным ядром:

18C242, 18C252, 18C442, 18C452, 18C658, 18C858.

с 16-разрядным ядром и FLASH памятью программ:

18F1220, 18F1320, 18F2220, 18F2320, 18F2439, 18F2539, 18F242, 18F248,


18F252, 18F258, 18F442, 18F448, 18F452, 18F458, 18F4220, 18F4320,
18F4439, 18F4539, 18F4525, 18F6620, 18F6720, 18F8620, 18F8720.

Команда Device должна быть первой командой в тексте программы.

Если Вы не уверены, поддерживается ли выбранный Вами микроконтроллер компилятором

Страница 170
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/device/device.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Device

PROTON+IDE, то обратите внимание на подсветку текста в редакторе. Если текст подсвечен


полужирным синим цветом, то это значит, что компилятор поддерживает данный
микроконтроллер.

Если в программе BASIC команда Device не использовалась, то компилятор по умолчанию будет


генерировать код для некогда популярного микроконтроллера PIC16F84.

Страница 171
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/device/device.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Dig

Команды и директивы компилятора PROTON

Команда Dig

Синтаксис:

Variable = Dig Value , Digit number

Команда Dig возвращает десятичное значение указанного числа.

Value - число, из которого должно быть извлечено десятичное значение. Это число может быть константой,
переменной, или выражением.

Digit number - порядковое значение извлекаемой цифры. Оно может быть константой, переменной, или
выражением. Значение этого параметра должно лежать в диапазоне от 0 до 9. Значение 0 является самым
младшим разрядом.

Пример

На рисунке 1 приведена действующая модель dig.DSN демонстрирующая работу оператора Dig. Модель
работает под управлением следующей программы:

Device = 16F84A  
XTAL = 4  
'--------------------Настройки подключения ЖКИ-----------------------
Declare LCD_TYPE ALPHA ' Тип ЖКИ - буквенно-цифровой
Declare LCD_DTPIN PORTB.4 ' Порт данных ЖКИ
Declare LCD_ENPIN PORTB.3 ' Цепь управления E
Declare LCD_RSPIN PORTB.2 ' Цепь управления RS
Declare LCD_INTERFACE 4 ' Разрядность шины данных
Declare LCD_COMMANDUS 2000 ' Задержка перед посылкой команды
Declare LCD_DATAUS 50 ' Задержка перед посылкой данных
Declare LCD_LINES 4 ' Количество строк ЖКИ
'--------------------------Объявления переменных---------------------
Dim VAR1 As Byte ' Объявить переменную VAR1 размером Byte
Dim VAR2 As Byte ' Объявить переменную VAR2 размером Byte
Dim VAR3 As Byte ' Объявить переменную VAR3 размером Byte
'--------------------------Главная программа--------------------------
VAR1 = 124  
VAR2 = VAR1 Dig 1 ' Извлечь десятичное значение второй цифры
VAR3 = VAR1 Dig 0 ' Извлечь десятичное значение первой цифры
Print At 1, 1, "Samples command DIG"  
Print At 2, 1, "VAR1= ", Dec VAR1 ' Отобразить на ЖКИ значение переменной VAR1
Print At 3, 1, "VAR2=(VAR1 DIG 1)=", Dec VAR2 ' Отобразить на ЖКИ значение переменной VAR2
Print At 4, 1, "VAR3=(VAR1 DIG 0)=", Dec VAR3 ' Отобразить на ЖКИ значение переменной VAR3
Stop  

GIF

DSN

Страница 172
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/dig/dig.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Dig

Рис. 1. Действующая модель dig.DSN демонстрирующая работу команды Dig.


По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

Страница 173
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/dig/dig.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Dim

Команды и директивы компилятора PROTON

Dim

Синтаксис:

Dim Variable { As } { Size }

С помощью оператора Dim должны быть определены все пользовательские переменные, которые будут
использоваться в программе.

Variable - это имя объявляемой переменной. Имя переменной может состоять из любых алфавитно-цифровых
символов.

Параметр As можно опустить, он требуется лишь тогда, когда указывается размер переменной. Если
параметр As опущен, то переменная по умолчанию будет использоваться как Byte. Любая переменная,
которая объявлена без параметра As будет иметь размер 8 бит.

Параметр Size - определяет тип переменной, он может быть Bit, Byte, Word, DWord, Float, или STRING.

Пример 1

Dim A , B , My_VAR1 , fred , cat , zz            ' Объявить все переменные размером в Byte

Пример 2

' Пример объявления различных по размеру переменных

Dim VAR1 As Byte ' Oбъявление переменной в 8-бит - тип Byte


Dim WRD1 As Word ' Oбъявление переменной в 16-бит - тип Word
Dim DWRD1 As DWord ' Oбъявление переменной в 32-бита - тип DWord
Dim BITVAR As Bit ' Oбъявление переменной в 1-бит - тип Bit
Dim FLT As Float ' Oбъявление переменной в 32-бита с плавающей запятой

Примечания

Операторы Dim должны размещаться в первых строках программы, cсылки на не объявленные переменные
приведут к ошибкам в процессе компиляции.

В именах переменных, как в случае с именами меток, можно свободно смешивать числовые и символьные
значения, а также знаки подчеркивания.

Имена переменных могут начинаться с символа подчеркивания, но не должны начинаться с цифр. Длина
имен переменных не может быть больше чем 32 символа. Все символы в именах переменных после 32
символа будут игнорироваться.

Имена переменных нечувствительны к регистру, это означает что переменная

Dim MYVAR

то же самое что и

Dim MyVaR

Оператор Dim может использоваться и для создания констант:

Dim Num As 100 ' Переменной Num присвоить значение равное 100
Dim BigNum As 1000 ' Переменной BigNum присвоить значение равное 1000
Dim VeryBigNum As 1000000 ' Переменной VeryBigNum присвоить значение равное 1000000

Использование констант отличается от использования переменных тем, что они не занимают места в оперативной
памяти. Они просто являются псевдонимами чисел.

Числовые константы могут быть определены в виде сложных уравнений:

Dim Complex As ((( 2000 / 54 ) << 2) & 255)

Оператор DIM можно использовать для создания констант c плавающей запятой. Для этого необходимо просто
добавить десятичную точку в её числовое значение.

Dim PI As 3.14 ' Создать константу с плавающей запятой c именем PI


Dim FL_NUM As 5.0 ' Создать константу с плавающей запятьй и значением 5.0

Константа с плавающей запятой может быть создана, используя выражения cледующего вида:

Dim QUANTA As 5.0/1024          ' Создать константу с плавающей запятой, как результат выражения.

Оператор DIM может использоваться при создании псевдонимов уже существующих переменных или констант:

Страница 174
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/dim/dim.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Dim

Dim VAR1 As BYTE ' Oпределить переменную размером в Byte


Dim VAR_Bit As VAR1.1 ' VAR_BIT представляет собой 1 бит переменной VAR1

Псевдонимы, как в и константы, не занимают объема в оперативной памяти микроконтроллера, потому что они
указывают на переменную, или часть переменной, которая ранее была уже объявлена.

Объем оперативной памяти необходимый при создании переменных.

Каждому типу переменной, для её размещения, требуется различный объем оперативной памяти. Ниже приведен
список, в котором указаны требуемые объемы оперативной памяти для размещения различных типов переменных.

Тип Требуемый объем памяти


переменной RAMбайт
Float 4 байта
DWord 4 байта
Word 2 байта
Byte 1 байт
Bit 1 бит

Каждый тип переменной может иметь различные максимальные и минимальные значения.

Переменные типа Float могут теоретически принимать значения в пределах от -1e 37 до +1e38, что делает их
наиболее точными из всех типов переменных. Однако использование этого типа переменных приводит к затратам
времени на производство вычислений и использованию очень большого места в пространстве памяти
микроконтроллера. Поэтому следует использовать такой тип переменной тогда, когда это действительно
необходимо.

Переменные типа DWord могут изменяться в пределах от -2147483647 до +2147483647. Но и за использование


этого типа переменной придется заплатить дополнительным временем на производство вычислений. Кроме этого
им тоже требуется довольно значительное место в памяти микроконтроллера. Поэтому используйте этот тип
переменной экономно и только тогда, когда это необходимо.

Переменные типа Word могут принимать значения в пределах от 0 до 65535. Этого диапазона обычно достаточно
для большинства приложений. Такие переменные тоже используют большой объем памяти, но все-таки не
столько, сколько переменные типа DWord или Float.

Переменные типа Byte могут изменяться в пределах от 0 до 255, поэтому они являются рабочими лошадками для
большинства программ. Место, занимаемое в ОЗУ переменными типа Byte имеет совсем небольшие размеры по
сравнению с переменными типа Word, или DWord. Поэтому этот тип переменных предпочтителен, особенно, если
требуется высокая скорость выполнения программы, или более эффективное выполнение операций.

Переменные типа Bit могут принимать только два значения 0 или 1. Когда объявляются битовые переменные, то
их создается одновременно 8 штук, независимо от того, объявили ли Вы одну битовую переменную, две или сразу
8. Поэтому, объявляя единственную битовую переменную в пространстве памяти, помните, что все равно она
будет занимать 1 байт (8 бит).

Для переменных используются следующие модификаторы:

HighByte, LowByte, BYTE0, BYTE1, BYTE2 и BYTE3.

Модификаторы BYTE2 и BYTE3 могут использоваться только вместе с 32-разрядными переменными типа DWord.

Модификаторы HighByte и BYTE1 выполняют одинаковую роль. Когда такие модификаторы используются с
переменными типа Word, они обращаются к старшему байту этой переменной:

Dim WRD As Word ' Определить переменную размером в WORD


Dim WRD_HI As WRD.HighByte ' Переменная WRD_HI является старшим байтом переменной WRD

Теперь основная программа обращаясь к переменной WRD_HI работает с ней как с переменной типа Byte. Но
фактически программа работает со старшим байтом переменной WRD.

То же самое можно сказать и о модификаторах LowByte и BYTE0. Эти модификаторы обращаются к младшему
байту переменной WORD:

Dim WRD As Word ' Oпределить переменную размером в Word


Dim WRD_LO As WRD.LowByte ' WRD_LO это младший байт переменной WRD

Теперь к переменной WRD_LO основная программа обращаются как к переменной типа Byte, любая ссылка на эту
переменную фактически работает с младшим байтом переменной WRD.

Модификатор BYTE2 извлекает 3-й байт из 32-разрядной переменной типа DWord. Аналогично BYTE3 извлекает
старший байт 32-разрядной переменной.

В пространстве оперативной памяти микроконтроллера переменные размещаются в том порядке, в котором они
расположены в программе. Например:

Страница 175
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/dim/dim.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Dim

Dim VAR1 As Byte

Dim VAR2 As Byte

В оперативной памяти вначале будет размещаться VAR1, а затем VAR2:

VAR1 EQU n

VAR2 EQU n

Это означает, что в PIC-микроконтроллерах с количеством банков памяти больше чем один, первые n переменных
всегда будут находиться в BANK0 (значение n зависит от используемого PIC-микроконтроллера).

Место нахождения переменной в пределах одного банка обычно не имеет значения, если используется программа
на Basic, однако, если в ней осуществляется переход к подпрограмме ассемблера, необходимо всегда следить за
тем чтобы переменные располагались в одном банке.

Если используются переменные типа Word или DWord и они пересекают границу банка, то предупреждающее
сообщение будет отображено в окне ошибки. Обычно такая ситуация возникает редко, однако, когда происходит
такая ошибка, необходимо сделать так, чтобы переменные типа Word, или переменные типа DWord полностью
находились в одном из банков. Эту ошибку достаточно легко устранить, если поместить так называемую "куклу"
(переменную размером в Byte) перед переменными Word или DWord из-за которых возникли сообщения об
ошибке.

Переменные типа DWord имеют младший байт и старший байт. К старшим байтам этих переменных можно
обратиться, просто добавляя символ H в конце имени переменной. Например:

Dim WRD As Word

Произведет код ассемблера

WRD n

WRDH n+1

Для того чтобы обратиться к старшему байту переменной WRD, используйте следующую конструкцию

WRDH = 1

Это особенно полезно, когда используются подпрограммы на ассемблере, типа:

movlw 1                ' Записать в аккумулятор 1

movwf WRDH           ' Загрузить 1 из аккумулятора в старший байт переменной WRD

Переменные типа DWord имеют младший, средний 1-й (mid1), средний 2-ой (mid2) и старший байты. К старшему
байту можно обратиться, добавив три символа "Н" к имени переменной. Например:

Dim DWD As DWord

Произведет код ассемблера:

DWD n

DWDH (n+1)

DWDHH (n+2)

DWDHHH (n+3)

Для того чтобы обратиться к старшему байту переменной WRD, используйте конструкцию:

DWDHHH = 1

или

DWD.HighByte = 1

Для того чтобы обратится к младшему или средним байтам, добавляйте или удаляйте соответствующее количество
символов "H" после имени переменной.

См. также: ALIASES, DECLARING ARRAYS, ARRAYS, CONSTANTS, Floating Point Math Symbols, SYMBOLS, Создание и
использование STRINGS.

Страница 176
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/dim/dim.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Disable

Команды и директивы компилятора PROTON

Disable

Синтаксис:

Disable

По команде Disable временно отключается обработка прерываний, которая ранее была разрешена командой Enable
либо командой On Interrupt.

Пример

Листинг программы disable.bas

Device 16F877 '  Использовать микроконтроллер 16F877


Xtal = 4 ' Установить частоту генератора равной 4 МГц
OPTION_REG = %00000111 ' Установить в регистре OPTION_REG биты в следующие режимы:
' Бит7 = 0 - Влючить встроенные подтягивающие резисторы к выводам
' PORTB;
' Бит6 = 0 (INTEDG) - Установить прерывание по фронту сигнала на выводе
' PORTB RB0/INT;
' Бит5 = 0 (TOCS) - Инкрементировать содержимое таймера TMR0 от импульсов с
'внутренней тактовой частотой равной частоте тактового генератора деленной на 4;
' Бит4 = 0 (TOSE) Инкрементировать содержимое таймера TMR0 по фронту сигнала;

' Бит3 = 0 (PSА) - Включить предварительный делитель на входе таймера TMR0;


' Биты 2,1,0 = 111 (PS2, PS1, PS0) - Установить коэффициент деления 1:256 для
' предделителя;
' Запретить глобальные прерывания и разрешить прерывания по переполнению
INTCON = %00100000
' таймера TMR0
Symbol LED = PORTD.0 ' Присвоить порту RD0 псевдоним LED
' Разрешить программные прерывания, а в случае возникновения прерывания идти
On Interrupt GoTo My_Int
' на метку My_Int
Fin: ' Метка начала цикла основной программы
DelayMS 1 ' Задержка 1 мсек
GoTo Fin ' Переход к началу основной программы
Disable ' Отключить обработку прерываний
My_Int: ' Метка начала подпрограммы обработки прерываний
' Переключить светодиод, когда произойдет прерывание по переполнению таймера
Toggle LED
' TMR0
Resume ' Возвратиться в основную программу
Enable ' Разрешить производить обработку прерываний

На рисунке 1 приведена действующая модель disable.DSN, демонстрирующая работу команды Disable. Модель
работает под управлением программы disable.bas.

GIF

DSN

Рис. 1. Действующая модель disable.DSN. Демонстрация работы команды Disable.


По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

Команды Disable, Enable, и Resume фактически не являются командами языка Basic в прямом смысле этого слова,
они изменяют только соответствующие биты (флаги) регистра INTCON, поэтому эти команды при компиляции не
производят никакого кода.

См. также: SOFTWARE INTERRUPTS in BASIC, Enable, Resume.

Страница 177
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/disable/disable.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда DTMFOut

Команды и директивы компилятора PROTON

DTMFOut

Синтаксис:

DTMFOut Pin , { OnTime } , { OffTime, } [ Tone {, Tone…} ]

Команда DTMFOut генерирует на выводе - Pin стандартную двухчастотную комбинацию, которая используется в
телефонии при тональном наборе номера.

Параметр Pin - является константой, которая определяет порт и номер вывода. Этот вывод заданного порта
будет автоматически установлен в состояние выхода, на время пока будет происходить генерация частот, а
затем снова вернется в состояние входа, после того, как команда будет закончена

Параметр OnTime - может быть дополнительной переменной, константой, или выражением принимающим
значение от 0 до 65535. Параметр OnTime определяет продолжительность генерации частот в мсек. Если
параметр OnTime не используется (не указан), то будет использовано заданное по умолчанию время равное
200 мсек.

Параметр OffTime - может быть дополнительной переменной, константой, или выражением принимающим
значение от 0 до 65535. Параметр OffTime определяет длительность паузы в мсек, между посылками частот.
Если параметр OffTime не используется (не указан),то будет использовано заданное по умолчанию время
равное 50 мсек.

Параметр Tone - может быть переменной, константой, или выражением принимающим значение от 0 до 15,
которые определяют генерируемые частоты DTMF сигнала. Частоты от 0 до 11 соответствуют стандартному
размещению на телефонной вспомогательной клавиатуре. При нажатии кнопки <*> генерируется число 10,
а при нажатии кнопки <#> - число 11. Числа 12 - 15 зарезервированы для дополнительных кнопок A, B, C,
D.

Дополнительные кнопки есть в телефонах с расширенной клавиатурой, а также используются в телефонном


испытательном оборудовании и в некоторых радио-приложениях.

Пример 1

DTMFOut PORTB.0 , [8,9,0,6,6,7,9,5,4,9]                        ' Номер телефона автора этой книги.

Если бы PIC-микроконтроллер был бы подключен к телефонной линии, то вышеупомянутая команда звонила бы 8-


906-67-95-49. Если же Вы хотите замедлить передачу вызываемого номера, чтобы дозвонится по зашумленной
телефонной линии или радио-связи, то следует использовать дополнительные параметры OnTime и OffTime.

Пример 2

' Установить OnTime равным 500 мсек, а OffTime равным 100 мсек

DTMFOut PORTB.0 , 500 , 100 , [8,9,0,6,6,7,9,5,4,9]       ' Медленно звонить по телефону 8-906-67-95-49

Примечание

Комбинации частот DTMF используются, для набора телефонных номеров, или дистанционного управления
различными частями оборудования по радио каналам. PIC-микроконтроллер может генерировать эти частоты,
используя команду DTMFOut. Однако для того, чтобы получить хорошее качество генерируемых частот,
необходимо использовать кварцевый резонатор на более высокие частоты чем 4 МГц. И хотя микроконтроллер с
кварцем на 4 МГц будет нормально работать, но качество генерируемого сигнала может оказаться недостаточным.

Чистый DTMF сигнал должен быть аналоговым сигналом, который состоит из смеси двух синусоидальных волн в
различных сочетаниях. Однако PIC-микроконтроллер это цифровое устройство, поэтому сгенерированный им DTMF
сигнал не является чистым аналоговым сигналом.

PIC-микроконтроллер создает смесь из двух частот прямоугольной формы. Для получения выходного DTMF
сигнала близкого к аналоговому необходимо использовать на выходе PIC-микроконтроллера специальный фильтр,
который отфильтрует высокочастотные составляющие, находящиеся в сгенерированном выходном сигнале. Эти
высокочастотные составляющие являются шумами, ухудшающими качество DTMF сигнала.

Простой выходной фильтр для сигналов, генерируемых командой DTMFOut, который дает хорошие результаты
показан на рисунке 1. Если одного такого фильтра окажется недостаточно, то можно включить последовательно
два таких фильтра, как показано на рисунке 2.

Страница 178
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/dtmfout/dtmfout.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда DTMFOut

Рис. 1. Выходной фильтр для сигналов тонального набора номера генерируемых командой DTMFOut

На рисунке 2 приведена действующая модель dtmfout.DSN в которой используется подобный фильтр,


улучшающий форму DTMF сигнала. Модель работает под управлением программы dtmfout.bas и демонстрирует
работу команды DTMFOut.

Листинг программы dtmfout.bas

Device = 16F873A ' Использовать микроконтроллер 16F873A


XTAL = 4 ' Установить частоту генератора равной 4 МГц
main: ' Метка начала основной программы
DTMFOut PORTB.0, 200, 300, [8,9,0,6,6,7,9,5,4,9] ' Сгенерировать сигналы телефонного номера
DelayMS 3000 ' Пауза 3 сек
GoTo main: ' Повторить основную программу

GIF

DSN

Рис. 2. Действующая модель dtmfout.DSN. Иллюстрация работы команды DTMFOut.


По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

На рисунке 3 приведены осцилограммы сигнала DTMF сгенерированные PIC-микроконтроллером 16F873A c


кварцевым генератором 4 МГц.

Рис. 3. Осцилограммы сигнала DTMF сгенерированные PIC-микроконтроллером 16F873A c кварцевым генератором


4 МГц

Если требуется усилить выходной DTMF сигнал, то можно воспользоваться схемой приведенной на рисунке 4. В
этой схеме совмещены высокочастотный фильтр и усилитель-компенсатор на одном транзисторе. Такой усилитель
можно построить практически на любом маломощном n-p-n транзисторе с коэффициэнтом усиления по току от 25
до 250.

Страница 179
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/dtmfout/dtmfout.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда DTMFOut

GIF

DSN

Рис. 4. Действующая модель usilit_trans-r.DSN усилителя сигналов DTMF на одном транзисторе.


По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

Рис. 5. Осцилограммы DTMF сигнала в схеме усилителя на одном транзисторе.

Страница 180
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/dtmfout/dtmfout.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда EData

Команды и директивы компилятора PROTON

EData

Синтаксис:

EData Constant1 { ,...ConstantN etc }

EData Константа1 { ,... КонстантаN и т.д. }

Команда EData предназначена для записи констант и строковых переменных непосредственно во внутреннюю
энергонезависимую память микроконтроллера (EEPROM) .

Constant1, Constantn... - значения, которые будут сохранены во внутренней EEPROM.

При использовании команды EData, все указанные значения будут записаны в EEPROM, начиная с нулевого
адреса (адреса равного 0). Команда EData не позволит выбрать другой адрес в памяти EEPROM, для записи в нее
данных, кроме как нулевой. Для того чтобы записать данные в EEPROM, или считать данные из EEPROM, по
другим адресам отличным от 0, можно воспользоваться командами ERead и EWrite.

Пример 1

' Сохранить в памяти начиная с адреса 0 числовые значения 1000, 20, 255, 15, и значения ' H','e','l','l','o' в
ASCII кодировке .

EData 1000 , 20 , $FF , %00001111 , "Hello"

Примечание 1

Во внутренней памяти EEPROM можно сохранять 16-разрядные, 32-разрядные и значения с плавающей


точкой. Размещаются они в памяти следующим образом: сначала сохраняется младший байт значения,
причем младший бит находится вначале, а уж затем старшие байты. Например, если значение 1000 будет
сохраняться с помощью команды EData (EData 1000), то порядок расположения в EEPROM этого числа (см.
рис. 1) будет следующим:

в младшем байте будет записано значение Е8, а в старшем байте значение 03 ,  так как Dec 1000 = Hex
3E8, где E8 это младший байт, а 03 - старший байт этого значения в шестнадцатиричном виде.

Рис. 1. Схема побайтного расположения десятичного значения 1000 (Hex 3E8) в EEPROM.

Синтаксис команды EData позволяет использовать псевдонимы констант, например:

Symbol ALIAS = 200


EData ALIAS , 120 , 254 , "Hello World"

Директивы EData должны помещаться в начале программы, как это делается, например, с символами, чтобы эти
идентификационные имена были признаны всей программой. Нет также никакой необходимости перешагивать
через директивы EData, потому что они не занимают основную память, но постоянно находятся в верхней части
памяти данных.

Адресация в таблицах EData.

Данные в памяти EEPROM хранятся начиная с адреса 0 и располагаются непрерывно далее так, насколько это
позволяет используемый микроконтроллер. Однако редко бывает, что информация, сохраненная в EEPROM,
представляет собой непрерывную часть данных. Чаще всего данные в EEPROM располагаются отдельными
фрагментами. Память EEPROM обычно используется для хранения нескольких значений или строк текста, так что,
метод обращения к каждой отдельной части данных очень важен. Рассмотрим это на примере следующей
программы:

EData "HELLO"
EData "WORLD"

Известно, что данные в EEPROM будут сохранены начиная с адреса 0. Так текст "HELLO" будет расположен
начиная с адреса 0. Текст "HELLO" состоит из 5 символов, каждый из которых занимает байт памяти (см. рис. 2).

В свою очередь текст "WORLD" должен начаться с адреса 5 и также содержит 5 символов, поэтому следующая
доступная часть памяти EEPROM начинается с адреса 10.

Страница 181
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/edata/edata.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда EData

Рис. 2. Схема побайтного расположения двух строк текста "HELLO" и "WORLD" в EEPROM.

Чтобы обратиться к двум отдельным текстовым строкам, необходимо вести учет начального и конечного адресов
каждого символа, помещенного в таблицу EData. Подсчет объема памяти EEPROM, используемой каждой частью
данных, особенно если в программе используются несколько таблиц EData очень утомителен. Такой подсчет тем
более сложен, если нужно хранить множество цифровых и строковых значений. Если подсчет начальных и
конечных адресов EEPROM для хранения блоков данных будет произведен неверно, то это может привести к
сбоям программы.

Если использовать идентификационное имя перед командой EData, то будет создана таблица, которая позволит
компилятору создать байт, в котором сохранится стартовое значение адреса хранения текстовой строки в памяти
EEPROM. Компилятор сохранит адрес EEPROM, связанный с таблицей под её идентификационным именем, как
постоянное значение, например:

HELLO_TEXT EDdata "HELLO"


WORLD_TEXT EDdata "WORLD"

Индификационное имя HELLO_TEXT теперь будет признано компилятором как константа со значением 0. Это и
будет начальный адрес хранения текстовой строки "HELLO" (см. рис. 3). WORLD_TEXT - константа, содержащая
значение 5, поэтому адрес, с которого начинается текстовая строка "WORLD", будет равен 5.

Рис. 3. Схема расположения в EEPROM начальных адресов текстовых строк


"HELLO" и "WORLD", опеределяемых значением констант HELLO_TEXT и WORLD_TEXT.

Обратите внимание, что идентификационное имя, должно быть расположено на той же самой строке, где и
команда EData, иначе компилятор выдаст сообщение о синтаксической ошибке. Идентификационное имя не
должно содержать постфиксное двоеточие, как это принято для обозначения меток строк, иначе
идентификационное имя будет обрабатываться как метка строки.

Следующий пример иллюстрирует использование адресации EEPROM.

Пример 2

Листинг программы edata2.bas

' Вывести на экран две текстовых строки, сохраненные во flash-памяти данных (EEPROM)

'------------------------------------------Настройки микроконтроллера и ЖКИ------------------------------------------


' Подключить внешний файл содержащий типовые настройки
Include "PROTON_4.INC"
' микроконтроллера 16F877 и алфавитно-цифрвого ЖКИ
'------------------------------------------------Объявление переменных-------------------------------------------------
' Создать переменную CHAR для считывания символов из памяти данных
Dim CHAR As Byte
' (EERROM)
' Создать переменную CHARPOS для считывания адресов из памяти данных
Dim CHARPOS As Byte
' (EERROM)
'------------------------------------------------ Создание таблиц EData ------------------------------------------------
' Записать в память данных (EERROM) строку текста заканчивающуюся
HELLO EData "HELLO", 0
' пустым указателем
' Cоздать другую строку текста в памяти EERROM заканчивающуюся
WORLD EData "WORLD",0
' пустым указателем
'--------------------------------------------------- Главная программа ---------------------------------------------------
main: ' Метка начала главной программы
Cls ' Очистить экран ЖКИ

Страница 182
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/edata/edata.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда EData

DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс


' Загрузить в переменную CHARPOS единственный байт определяющий адрес
CHARPOS = HELLO ' таблицы EData "HELLO", который указывает на адрес начало текста '"HELLO"
' в EEPROM.
GoSub DISPLAY_TEXT ' Выполнить подпрограмму DISPLAY_TEXT
' Загрузить в переменную CHARPOS единственный байт определяющий адрес
' таблицы EData "WORLD", который указывает на адрес начало текста
CHARPOS = WORLD
'"HELLO"
' в EEPROM.
GoSub DISPLAY_TEXT ' Выполнить подпрограмму DISPLAY_TEXT
GoTo main ' Повторить главную программу
' Остановить программу если она несанкционированно вышла за пределы
Stop
' главной программы
'---------------------------------------------- Подпрограмма DISPLAY_TEXT ----------------------------------------------
' Метка начала подпрограммы чтения и отображения текста на экране ЖКИ
DISPLAY_TEXT:
' содержащегося по адресу полученному в CHARPOS
While 1 = 1 ' Cоздать бесконечный цикл
CHAR = ERead CHARPOS ' Читать данные из памяти EEPROM
If CHAR = 0 Then Break ' Выйти из цикла когда прочитан нулевой указатель
Print CHAR ' Отобразить символ на дисплее
Inc CHARPOS ' Перейти к следующему адресу
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
Wend ' Закрыть цикл
DelayMS 2000 ' Пауза 2 сек чтобы замедлить процесс
Return ' Выход из подпрограммы

На рисунке 4 приведена модель edata2.DSN, демонстрирующая работу оператора EData. Модель работает под
управлением программы edata2.bas.

GIF

DSN

Рис. 4. Схема действующeй модели edata2.DSN


Демонстрация работы команды EData.
По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

Форматирование таблиц EData.

Иногда бывает необходимо создать таблицу известного формата для её данных. Например, для каждого значения
всей базы значений необходимо отвести по 4 байта пространства памяти, хотя некоторые значения этой базы
будут занимать только по 1 или 2 байта. Такая cтрока кода

EData 100000, 10000, 1000, 100, 10, 1


Страница 183
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/edata/edata.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда EData

будет неравномерно использовать пространство flash-памяти, так как каждый элемент этих данных требует
различных размеров места памяти для своего хранения. Для значения 100000 потребуется 4 байта пространства
памяти, для 10000 и 1000 требуется по 2 байта, а 100, 10 и 1 лишь по 1 байту.

Чтение этих значений оператором ERead создаст ошибки, потому что нет способа заранее узнать, какое
количество байт нужно для каждого прочитанного элемента, чтобы при чтении не разделить или не соединить в
один элемент рядом прочитанные значения.

Решение этой проблемы заключается в использовании указателей форматирования, чтобы любые значения,
записанные командой EData в flash-память данных микроконтроллера, занимали заранее отведенное количество
байт. К таким указателям относятся ключевые слова:

Byte,
Word,
DWord,
Float.

Размещение одного из этих указателей форматирования перед каждым значением, определит его сохранение во
flash-памяти данных, командой EData, определенной длины, например:

EData DWord 100000 , DWord 10000 , DWord 1000 , DWord 100 , DWord 10 , DWord 1

Каждое из этих значений будет занимать во flash-памяти данных по 4 байта, независимо от их величины.

Указатель Byte заставит значения занимать лишь по одному байту пространства памяти данных, независимо от
величины этих значений. Значения выше 255 будут усечены до младшего байта.

Указатель Word заставит значения занимать по два байта пространства памяти данных, независимо от их
величины. Любые значения выше 65535 будут усечены до 2 младших байтов, а любое значение меньше 255 будут
дополнено до 2 байта.

Указатель DWord отведёт для каждого из значений, независимо от их величины, по четыре байта пространства
памяти данных Любое значение меньше 65535 будет дополнено до 4 байтов.

Указатель Float переопределит тип значений и сделает их типом с плавающей запятой, которые всегда занимают
по 4 байта пространства памяти данных.

Если все значения в таблице EData должны занимать по одинаковому количеству байт, то можно использовать
следующую форму записи оператора EData:

EData As DWord 100000, 10000, 1000, 100, 10, 1

Приведенная строка имеет тот же самый смысл что и строка с множеством указателей в предыдущем примере. Все
четыре указателя форматирования могут использоваться с ключевым словом As.

В следующем примере 3 показано форматирование таблицы EData при помощи указателя форматирования
DWord.

Пример 3

Листинг программы edata3.bas

' Преобразовать значение типа DWord в строковый массив


' Использовать только основные BASIC команды
' Подобный принцип реализован в команде St$

'---------------------------------Настройки микроконтроллера и ЖКИ---------------------------------


' Подключить внешний файл с настройками по умолчанию
Include "PROTON_4.INC"
' для 16F877 с 14-разрядным ядром и настройками ЖКИ
'---------------------------------------Объявление переменных----------------------------------------
Dim P10 As Dword ' Создать переменную P10 типа DWord
Dim CNT As Byte ' Создать переменную CNT типа Byte
Dim J As Byte ' Создать переменную J типа Byte
' Cоздать переменную VALUE для хранения значения
Dim VALUE As Dword
' подлежащего преобразованию
' Создать строковую переменную для хранения
Dim STRING1[11] As Byte ' преобразованного значения и способную хранить
' 11 элементов типа Byte
' Создать переменную PTR для указателя в пределах
Dim PTR As Byte
' байтового массива
main: ' Метка начала главной программы
DelayMS 500 ' Пауза 0,5 сек для стабилизации микроконтроллера
Cls ' Очистить экран ЖКИ
Clear ' Очистить всю оперативную память

Страница 184
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/edata/edata.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда EData

VALUE = 1234576 ' Загрузить в переменную VALUE значение для преобразования


Print At 1, 1, "VALUE = ", Dec VALUE ' Отобразить на дисплее десятичное значение VALUE
' Отобразить на дисплее первоначальное содержимое
Print At 2, 1, "STRING1=", Str STRING1
' строковой переменной
DelayMS 2000 ' Пауза 2 сек чтобы замедлить процесс
GoSub DWORD_TO_STR ' Перейти к подпрограмме конвертации
Print At 2, 1, "STRING1=", Str STRING1 ' Отобразить на дисплее результат преобразования
DelayMS 2000 ' Пауза 2 сек чтобы замедлить процесс
GoTo main ' Повторить главную программу
' Остановить программу если она несанкционированно
Stop
' вышла за пределы главной преграммы
'--------------------------------------Подпрограмма конвертации--------------------------------------
' Преобразовать значения DWORD в строковый массив
' Преобразовать значение и разместиь его в переменной VALUE1
' Байтовый массив 'STRING1' создан с эквивалентом ASCII
DWORD_TO_STR: ' Метка начала программы конвертации
PTR = 0 ' Присвоить переменной PTR значение равное 0
J= 0 ' Присвоить переменной J значение равное 0
   
Repeat ' Начало цикла Repeat...Until
' Прочитать значение из памяти данных по адресу определяемым
P10 = ERead J * 4
выражением J * 4 и присвоить его переменной Р10
CNT = 0 ' Присвоить переменной CNT значение равное 0
' Если условие VALUE >= P10 истинно, то выполнить следующие
' операторы (VALUE = VALUE - P10: Inc CNT), если ложно, то
While VALUE >= P10 ' перейти к оператору расположенному после команды Wend
VALUE = VALUE - P10 ' Выполнить операцию вычитания
Inc CNT ' Инкрементировать (увеличить на единицу) значение CNT
Wend ' Завершить оператор While...Wend
   
If CNT <> 0 Then ' Если CNT не равно 0, то
' Загрузить в строковую переменную текущее значение CNT и
STRING1[PTR] = CNT + "0"
' объединить его с нулем
Inc PTR ' Инкрементировать (увеличить на единицу) значение PTR
EndIf ' Конец оператора If
   
Inc J ' Инкрементировать (увеличить на единицу) значение J
Until J > 8 ' Выйти из цикла Repeat...Until при достижении условия J > 8
   
' Загрузить в строковую переменную значение VALUE и
STRING1[PTR] = VALUE + "0"
' объединить его с нулем
Inc PTR ' Инкрементировать (увеличить на единицу) значение PTR
STRING1[PTR] = 0 ' Добавить ПУСТОЙ УКАЗАТЕЛЬ в конце строки
Return ' Вернуться из подпрограммы в главную программу
   
DWORD_TBL: ' Метка начала таблицы EData
EData As Dword 1000000000, 100000000, 10000000, 1000000, 100000, 10000, 1000, 100, 10
' Таблица EData отформатирована для сохранения всех её элементов как 32-битных значений.
' Это означает, что для каждого значения требуется по 4 байта пространства flash-памяти

На рисунке 5 приведена модель edata3.DSN, демонстрирующая работу оператора EData с указателями


форматирования данных. Модель работает под управлением программы edata3.bas.

Страница 185
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/edata/edata.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда EData

GIF

DSN

Рис. 5. Схема действующeй модели edata3.DSN


Демонстрация работы команды EData с с указателями форматирования данных.
По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

Использование имен меток как указателей на другие таблицы данных

Имена меток нескольких таблиц данных можно использовать в качестве списка значений и хранить их в
отдельной таблице EData. Это позволит обращаться к другим таблицам данных созданных операторами СData ,
используя их адреса как данные, которые полученны из отдельной таблицы EData (см. пример 4).

Пример 4

Листинг программы edata4.bas

' Получить из отдельной таблицы адреса двух других таблиц STRING1: и STRING2:,
'а затем отобразить на ЖКИ текст, хранящийся в них.
'---------------------------------Настройки микроконтроллера и ЖКИ---------------------------------
' Включить внешний файл с настройками по умолчанию
Include "PROTON_4.INC"
' для 16F877 с 14-разрядным ядром и настройками ЖКИ
'---------------------------------------Объявление переменных----------------------------------------
Dim ADDRESS As Word ' Создать переменную ADDRESS типа Word
Dim DATA_BYTE As Byte ' Создать переменную DATA_BYTE типа Byte
'--------------------------------------- Главная программа ----------------------------------------
main: ' Метка начала главной программы
Cls ' Очистить экран ЖКИ
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
ADDRESS = ERead 0 ' Получить из памяти данных адрес первой таблицы STRING1
While 1 = 1 ' Создать первый внутренний цикл
DATA_BYTE = CRead ADDRESS ' Читать в цикле каждый символ из первой таблицы STRING1:
' Если прочитанные данные равны 0, то перейти к метке
If DATA_BYTE = 0 Then EXIT_LOOP1
' EXIT_LOOP1:
Print DATA_BYTE ' Отобразить на ЖКИ содержимое переменной DATA_BYTE
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
' Инкрементировать (увеличить на единицу) значение
Inc ADDRESS
' переменной ADDRESS
' Закрыть вервый цикл образованный операторами
Wend
While...Wend
DelayMS 2000 ' Пауза2 сек чтобы замедлить процесс
EXIT_LOOP1: ' Метка EXIT_LOOP1

Страница 186
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/edata/edata.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда EData

Cursor 2, 1 ' Установить курсор ЖКИ в начало второй строки


ADDRESS = CRead 2 ' Получить из памяти данных адрес второй строки STRING2
While 1 = 1 ' Создать второй внутренний цикл
Data_BYTE = CRead ADDRESS ' Читать в цикле каждый символ из второй таблицы STRING2:
' Если прочитанные данные равны 0, то перейти к
If DATA_BYTE = 0 Then EXIT_LOOP2
' метке EXIT_LOOP2:
Print DATA_BYTE ' Отобразить на ЖКИ содержимое переменной DATA_BYTE
DelayMS 500 ' Пауза 0,5 сек чтобы замедлить процесс
' Инкрементировать (увеличить на единицу) значение
Inc ADDRESS
' переменной ADDRESS
Wend ' Закрыть второй цикл образованный операторами While...Wend
EXIT_LOOP2: ' Метка EXIT_LOOP2
DelayMS 2000 ' Пауза 2 сек чтобы замедлить процесс
GoTo main ' Повторить главную программу
' Остановить программу если она несанкционированно
Stop
' вышла за пределы главной преграммы
'---------------------------------------Таблица данных EData----------------------------------------
EData As Word STRING1, STRING2 ' Таблица с адресами двух других таблиц
STRING1: ' Метка начала первой таблицы с данными
СData "HELLO", 0 ' В таблице STRING1: хранится текст "HELLO"
STRING2: ' Метка начала второй таблицы с данными
СData "WORLD", 0 ' В таблице STRING2: хранится текст "WORLD"

На рисунке 6 приведена модель edata4.DSN, демонстрирующая работу оператора EData с несколькими


таблицами данных СData. Модель работает под управлением программы edata4.bas.

GIF

DSN

Рис. 6. Схема действующeй модели edata4.DSN


Демонстрация работы команды EData с несколькими таблицами данных CData.
По этой ссылке можно скачать архив действующей схемы и необходимые для ее работы ASM и HEX файлы.

См. также: ERead, EWrite

Страница 187
http://terrarus.ucoz.ru/proton_plus_ide/proton/comands/edata/edata.html
Aнатолий Медведев, Владимир Хилинский. Программирование PIC-микроконтроллеров в PROTON+IDE на PicBasic. Команда Enable

Команды и директивы компилятора PROTON

Enable

Синтаксис:

Enable

По команде Enable вновь разрешается обработка прерываний, которые были предварительно запрещены командой
Disable.

Пример

Листинг программы enable.bas

Device 16F877 '  Использовать микроконтроллер 16F877


Xtal = 4 ' Установить частоту генератора равной 4 МГц
OPTION_REG = %00000111 ' Установить в регистре OPTION_REG биты в следующие режимы:
' Бит7 = 0 - Влючить встроенные подтягивающие резисторы к выводам
' PORTB;
' Бит6 = 0 (INTEDG) - Установить прерывание по фронту сигнала на выводе
' PORTB RB0/INT;
' Бит5 = 0 (TOCS) - Инкрементировать содержимое таймера TMR0 от импульсов с
'внутренней тактовой частотой равной частоте тактового генератора деленной на 4;
' Бит4 = 0 (TOSE) Инкрементировать содержимое таймера TMR0 по фронту сигнала;

' Бит3 = 0 (PSА) - Включить предварительный делитель на входе таймера TMR0;


' Биты 2,1,0 = 111 (PS2, PS1, PS0) - Установить коэффициент деления 1:256 для
' предделителя;
' Запретить глобальные прерывания и разрешить прерывания по переполнению
INTCON = %00100000
' таймера TMR0
Symbol LED = PORTD.0 ' Присвоить порту RD0 псевдоним LED
' Разрешить программные прерывания, а в случае возникновения прерывания идти
On Interrupt GoTo My_Int
' на метку My_Int
Fin: ' Метка начала цикла основной программы
DelayMS 1 ' Задержка 1 мсек
GoTo Fin ' Переход к началу основной программы
Disable ' Отключить обработку прерываний
My_Int: ' Метка начала подпрограммы обработки прерываний
' Переключить светодиод, когда произойдет прерывание по переполнению таймера
Toggle LED
' TMR0
Resume ' Возвратиться в основную программу
Enable ' Разрешить производить обработку прерываний

На рисунке 1 приведена действующая модель enable.DSN, демонстрирующая работу команды Enable. Модель
работает под управлением приведенной выше программы enable.bas.

GIF

DSN

Рис. 1