Файл: Учимся программировать микроконтроллеры Pic на языке PicBasicPro (В.В. Хилинский, 2007).pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 17.06.2025
Просмотров: 1771
Скачиваний: 8
заканчивающихся символом c
1)Строковая константа посылается буквально как знак.
2)Числовое значение (переменная или константа) посылает соответствующий ASCII код. Чаще всего это, 13 - перевод каретки, и 10 - перевод строки.
3)Значения, которым предшествует модификатор BIN, будут посланы как ASCII представление этого двоичного значения. Например, если B0 = 8, то BIN
B0 (или BIN 8) пошлет "1000".
4)Значения, которым предшествует модификатор DEC, будут посланы как ASCII представление этого десятичного значения. Например, если B0 = 123, то
DEC B0 (или DEC 123) пошлет "123".
5)Значения, которым предшествует модификатор HEX, будут посланы как ASCII представление этого шестнадцатеричного значения. Например, если B0 = 254, то HEX B0 (или HEX 254) пошлет "знак спецификации формата".
6)Модификатор REP, сопровождаемый знаком и числом повторит этот знак указанное количество раз. Например, REP A0" \4 пошлет "0000".
7)Модификатор STR, сопровождаемый переменной типа байтового массива и дополнительного числа пошлет строковую переменную. Длина строковой переменной определяется указанным числом.
Модификаторам BIN, DEC и HEX могут предшествовать или сопровождать их несколько дополнительных параметров. Если любому из них будет предшествовать параметр I (для обозначенного), то выходным значениям должны будут предшествовать знаки - "%", "#" или "$", чтобы указать, что следующие затем значения являются двоичными, десятичными или шестнадцатеричными. Если же будет предшествовать параметр S (знак «-» ), то это значит, что принимаемое значение нужно воспринимать как отрицательное значение. Это ухищрение позволяет осуществлять передачу отрицательных чисел. Имейте в виду, что вся математика в PicBasicPro беззнаковая. Однако, такая математика без знака может привести к неверным результатам. Например, возьмите случай B0 = 9 - 10. Результат DEC B0 был бы "255". Посылка SDEC B0 дала бы "-1".
Модификаторы BIN, DEC и HEX могут также сопровождаться некоторым числом. Обычно, оно сообщает модификатору, какое точно количество цифр необходим послать. Обычно впереди стоящие и ничего не значащие нули не посылаются. Однако, если за модификатором будет стоять число, то команда SEROUT2 будет посылать это количество цифр, добавляя начальные нули по мере необходимости. Например, BIN6 8 послал бы "001000", а BIN2 8 пошлет "00". Любые комбинации из модификаторов могут использоваться все вместе. Например, ISDEC4 B0. Команда SEROUT2 по умолчанию предполагает генератор на 4 МГц. Чтобы использовать необходимую скорость в бодах с другими значениями частоты генератора не забудьте своевременно записать соответствующий DEFINE, устанавливающий новое значение частоты генератора.
154
Пример:
'Пошлите со скоростью в 2400 бод через вывод Pin0 ASCII значение переменной B0, сопровождая кодом перевода строки
SEROUT2 0,16780,[dec B0,10]
'Пошлите со скоростью 9600 бод через вывод PORTA.1 “B0 =” двоичное значение переменной B0
SEROUT2 PORTA.1,84,["B0=", ihex4 B0]
Команда SHIFTIN.
Синтаксис:
SHIFTIN DataPin,ClockPin,Mode,[Var{\Bits}...]
Эта команда используется для связи микроконтроллера с внешними устройствами по интерфейсу SPI или протокола синхронной последовательной передачи данных.
По этой команде данные, получаемые на выводе -DataPin, синхронизируются импульсами на выводе – ClockPin и сохраняются в переменную Var. Выводы ClockPin и DataPin могут быть константой, значения которой лежат в пределах от 0 и до 15, или переменной, значения которой могут меняться от 0 и до 15 (например, B0), или названием вывода (например, PORTA.0). Параметр - \Bits определяет количество разрядов, которые будут приняты. Если параметр специально не определен в соответствующем DEFINE, по умолчанию принимается 8 разрядов в независимости от типа переменной. Названия режимов (например, MSBPRE), определяются в файле MODEDEFS.BAS. Чтобы использовать их, добавьте в программе строку:
INCLUDE "modedefs.bas"
Номер режима можно использовать и без включения этого файла. Некоторые режимы не имеют названия. Для режимов 0-3 синхроимпульсы не выдаются, пока не появятся данные. Логическое состояние на этом выводе низкое. Перед появлением данных состояние на выводе ClocPin меняется на высокое и затем опять возвращается в низкое. Для режимов 4-7, логический уровень на выводе постоянно высокий, а перед появлением данных он падает до 0 и возвращается в высокое логическое состояние.
Таблица 25
Режим |
№ режима. |
Операция |
|||
Данные передаются, начиная с самого |
|||||
MSBPRE |
0 |
старшего разряда. Данные |
|||
считываются перед посылкой |
|||||
синхроимпульса. Основное логическое |
|||||
состояние цепи ClocPin - низкое. |
|||||
LSBPRE |
1 |
Данные передаются, начиная с самого |
|||
155
MSBPOST 2
LSBPOST 3
4
5
6
7
младшего разряда.
Данные считываются перед посылкой синхроимпульса. Основное логическое состояние цепи ClocPin - низкое.
Данные передаются, начиная с самого старшего разряда. Данные считываются после появления синхроимпульсов. Основное логическое состояние цепи ClocPin – низкое.
Данные передаются, начиная с самого младшего разряда.
Данные считываются после появления синхроимпульсов. Основное логическое состояние цепи ClocPin - низкое.
Данные передаются, начиная с самого старшего разряда.
Данные считываются перед приходом синхроимпульса. Основное логическое состояние цепи ClocPin - высокое.
Данные передаются, начиная с самого младшего разряда.
Данные считываются перед приходом синхроимпульса. Основное логическое состояние цепи ClocPin - высокое.
Данные передаются, начиная с самого старшего разряда.
Данные считываются после прихода синхроимпульса. Основное логическое состояние цепи ClocPin - высокое.
Данные передаются, начиная с самого младшего разряда.
Данные считываются после прихода синхроимпульса. Основное логическое состояние цепи ClocPin - высокое.
Частота синхроимпульсов приблизительно 50 кГц и зависит от генератора. Минимальная длительность синхроимпульса 2 микросекунды. Определение DEFINE позволяет увеличить длительность синхроимпульса до 65.535 миллисекунд, чтобы замедлить тактовую частоту. Минимальная дополнительная
156
задержка определяется выбором времени PAUSEUS. Например, чтобы установить длительность синхроимпульса равной 100 микросекунд:
DEFINE SHIFT_PAUSEUS 100
Рис. 40. Временные диаграммы передачи данных по интерфейсу SPI.
Пример:
SHIFTIN 0,1,MSBPRE,[B0,B1\4]
Команда SHIFTOUT.
Синтаксис:
SHIFTOUT DataPin,ClockPin,Mode,[Var{\Bits}...]
Эта команда также как и команда SHIFTIN используется для связи микроконтроллера с внешними устройствами по интерфейсу SPI или протокола синхронной последовательной передачи данных.
По этой команде данные, определяемые значением Var, выдаются с вывода DataPin и синхронизируются импульсами на выводе ClockPin. Выводы ClockPin и DataPin могут быть константой, значения которой лежат в пределах от 0 и до 15, или переменной, значения которой могут меняться от 0 и до 15 (например, B0), или названием вывода (например, PORTA.0). Параметр - \Bits определяет количество разрядов, которые будут переданы. Если это специально не определено в соответствующем DEFINE, по умолчанию принимается 8 разрядов в независимости от типа переменной. Названия режимов (например. MSBPRE), определяются в файле MODEDEFS.BAS. Чтобы использовать их, добавьте в начале Вашей программы PicBasic Pro строку:
INCLUDE "modedefs.bas".
Номера режимов могут использоваться без включения этого файла. Некоторые режимы не имеют названия. Для Режимов 0-1 пассивное логическое состояние цепи ClocPin низкое. При появлении синхроимпульса логическое состояние меняется на высокое и затем вновь возвращается в низкое состояние. Для Режимов 4-5, наоборот, пассивное логическое состояние высокое, появление
157
синхроимпульса переводит его в низкое и затем возвращается к высокому уровню.
Таблица 26 |
|||||
Режим |
Номер режима |
Операция |
|||
LSBFIRST |
0 |
Данные выдаются, начиная с самого |
|||
младшего разряда. Неактивное состояние |
|||||
цепи Clc - низкое. |
|||||
MSBFIRST |
1 |
Данные выдаются, начиная с самого |
|||
старшего разряда. Неактивное состояние |
|||||
цепи Clc - низкое. |
|||||
4 |
Данные выдаются, начиная с самого |
||||
младшего разряда. Неактивное состояние |
|||||
цепи Clc - высокое. |
|||||
5 |
Данные выдаются, начиная с самого |
||||
старшего разряда. Неактивное состояние |
|||||
цепи Clc - высокое. |
|||||
Частота синхронизации приблизительно 50 КГц и зависит от частоты задающего генератора. Минимальная длительность импульса синхронизации 2 микросекунды. Команда DEFINE позволяет изменить длительность синхроимпульса до 65 535 микросекунд или 65.535 миллисекунд. Например, чтобы сделать длительность синхроимпульса 100 микросекунд введите следующую строку:
DEFINE SHIFT_PAUSEUS 100
Пример:
SHIFTOUT 0,1,MSBFIRST,[B0,B1]
SHIFTOUT PORTA.1, PORTA.2, 1,[wordvar\4]
Команда SLEEP.
Синтаксис:
SLEEP Period
По этой команде микроконтроллер переходит в режим малого энергопотребления на время - Period (в секундах). Период - 16 разрядное число. Таким образом, задержки могут быть до 65 535 секунд (т.е. более, чем 18 часов). Команда SLEEP использует сторожевой таймер, поэтому время задержки этой команды не зависит от фактической частоты генератора. Минимальная дискретность составляет приблизительно 2.3 секунды и может изменяться в зависимости от типа микроконтроллера и температуры.
158
Пример:
SLEEP 60 ' Перейти в режим малого энергопотребления на 1 час
Команда SOUND. |
|
Синтаксис: |
}] |
SOUND Pin,[Note,Duration{,Note,Duration... |
По этой команде генерируется частота или белый шум на выводе - Pin. Указанный контакт автоматически становится выходом. Контакт может быть константой, значения которой лежат в пределах от 0 и до 15, или переменной, значения которой могут меняться от 0 и до 15 (например, B0) или названием вывода (например, PORTA.0). Параметр Note задает частоту генерируемого сигнала. При Note = 0 – отсутствует генерация. При Note от 1 до 127 – определенные частоты, а от 128 до 255 - белый шум. Частоты и белые шумы следуют в порядке возрастания (то есть 1, и 128 - самые низкие частоты, 127 и 255 являются самыми высокими). Если Note = 1 генерируется частота в 78.74 Гц, а если Note = 127 - частота 10,000 Гц. Продолжительность генерации - Duration может меняться от 0 до 255 и измеряется приблизительно в 12 миллисекундах. Note и Duration не должны быть константами.
Команда SOUND выводит на указанном контакте периодический сигнал прямоугольной формы с ТТЛ-уровнями. Благодаря превосходным характеристикам ввода - вывода PIC микроконтроллера, можно непосредственно подключать динамик к контакту через проходной конденсатор (см. рис. 55). Значение емкости конденсатора должно быть определено на основании тех частот, на которых будет работать динамик. Если Вы имеете Piezo-излучатель, то его можно подключать и непосредственно.
Рис.41. Схема подключения громкоговорителя к микроконтроллеру.
Пример:
SOUND PORTB.7,[100,10,50,10] ' Сгенерировать на выводе Pin7
последовательно 2 частоты
159
Команда STOP.
Эта команда останавливает выполнение программы. Однако эта команда не переводит микроконтроллер в режим малого энергопотребления.
Пример:
STOP ' Остановить выполнение программы
Команда SWAP.
Синтаксис:
SWAP Variable,Variable
Обменивает значения между двумя переменными. Обычно, это - утомительный процесс - поменять значения двух переменных. Команда SWAP, делает процесс обмена переменными одном заявлением, при этом, не используя никаких промежуточных звеньев. Команда SWAP рабртает с переменными типа bit, byte и word. Переменные типа массива с переменным индексом не могут использоваться в команде SWAP, хотя переменные типа массива с постоянными индексами допустимы.
Пример: |
' Старый способ |
||
temp |
= B0 |
||
B0 |
= |
B1 |
|
B1 |
= |
temp |
|
SWAP |
B0, B1 |
' Новый способ |
|
Команда TOGGLE.
Синтаксис:
TOGGLE Pin
Эта команда инвертирует состояние указанного контакта. Контакт автоматически становится выходом. Контакт может быть константой, значения которой лежат в пределах от 0 и до 15, или переменной, значения которой могут меняться от 0 и до 15 (например, B0), или названием вывода (например, PORTA.0).
Пример:
LOW 0 ' Установить Pin0 в низкое состояние TOGGLE 0 ' Изменить состояние Pin0 на высокое
160