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

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

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

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

Добавлен: 17.06.2025

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

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

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

он не будет работать с микроконтроллерами, у которых нет своей внутренней

EEPROM.

Пример 1:

DATA @5,10,20,30

' Сохранить 10, 20 и 30 с адреса 5

Пример 2:

dlabel DATA word $1234 ' Записываются двухбайтовые значения: $34, $12

Пример 3:

DATA (4), 0(10)

В этом случае вначале будут пропущены 4 ячейки памяти, а затем подряд в 10 ячейках будет записано значение 0.

Пример 4:

DATA “ab”

Вданном случае вначале, т.е. в 0 ячейке памяти будет сохранен код буквы a –

97.В следующей ячейке будет сохранен код буквы b – 98.

Команда DEBUG.

Синтаксис:

DEBUG Item {,Item...}

По этой команде микроконтроллер передает значения в стандартном асинхронном формате. При этом используется следующий формат передачи: 8 информационных разрядов, отсутствует проверка на четность и 1 стоповый бит (формат - 8N1). Скорость передачи измеряется в бодах (бит/сек).

Передача информации происходит через вывод, определенный в команде Define, который автоматически устанавливается в состояние выхода. Если посылаемому значению предшествует признак (#), то это значит, что посылается ASCII код. Команда DEBUG поддерживает те же самые модификаторы данных, что и команда SEROUT2.

Таблица модификаторов команды DEBUG

Таблица 11.

Модификатор

Операция

{I}{S}BIN{1..16}

Посылает двоичные значения

{I}{S}DEC{1..5}

Посылает десятичные значения

99


{I}{S}HEX{1..4}

Посылает шестнадцатеричные значения

REP c\n

Посылает знак c, повторив его n раз

STR ArrayVar{\n}

Посылает строковую переменную n знаков

DEBUG это одна из нескольких встроенных асинхронных последовательных функций. Она является наименьшей из сгенерированных последовательных подпрограмм программного обеспечения. Эта команда, в основном, предназначена для отладки программ. С ее помощью можно посылать информацию об изменении переменных, регистров маркеры позиции программы, и т.д. в окно MicroCode Studio (ICD) в режиме отладки. И использование этой команды вне этого режима вряд ли целесообразно. Тем более разработчик компилятора нигде не приводит описания и примеров применения данной команды. Поэтому Вам для связи по асинхронному каналу лучше пользоваться командой SEROUT.

Команда DEBUGIN.

Синтаксис:

DEBUGIN {Timeout,Label,}[Item{,Item...}]

По этой команде осуществляется прием значений по определенному выводу в предопределенной скорости в бодах в стандартном асинхронном формате, с использованием 8 бит данных. При этом отсутствует проверка на четность и 1 стоповый бит (8N1). Вывод автоматически становится входом.

Дополнительно могут быть включены параметры: блокировка времени - Timeout и метка - Label, чтобы позволить программе продолжаться, если знак не был получен в течение определенного времени, которое измеряется в единицах миллисекунд. Если сигнал не был получен за это время, то программа выйдет из команды DEBUGIN и перейдет на указанную метку.

Команда DEBUGIN так же как и команда DEBUG были введены разработчиком для режима отладки (MicroCode Studio (ICD)). Поэтому использование этих команд вне этого режима, скорее всего, нецелесообразно. Тем более что разработчик нигде не предлагает примеров их использования. Для организации обмена информацией по асинхронному каналу связи лучше воспользуйтесь командами: SERIN, SERIN2, SEROUT, SEROUT2.

Команда DISABLE.

По команде DISABLE прекращается работа программы в режиме отладки а также прекращается обработка всех прерываний. И хотя прерывания всё ещё могут происходить, но программа обработки прерываний не будет на них реагировать, пока не столкнется с командой ENABLE. Команды DISABLE и ENABLE больше походят на псевдокоманды, в которых они только дают

100


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

Пример:

DISABLE ‘ Отключить обработку прерываний

myint: led = 1 ' Включить светодиод когда происходит прерывание RESUME ' Вернутся в основную программу

ENABLE ' Включить обработку прерывания

Команда DISABLE DEBUG.

По этой команде отключается программа обработки команд отладки. Отладчик не будет вызываться, пока не столкнется с командами ENABLE или ENABLE DEBUG.

Команда DISABLE INTERRUPT.

Команда DISABLE INTERRUPT отключает программу обработки прерываний. И, несмотря на то, что процессы вызывающие прерывания могут происходить, микроконтроллер не будет на них реагировать, пока не встретится с командами ENABLE или ENABLE INTERRUPT.

Команда DTMFOUT.

Синтаксис:

DTMFOUT Pin,{Onms,Offms,}[Tone{,Tone...}]

По этой команде происходит генерация стандартного двухтонального телефонного номера.

Параметр Pin указывает на вывод микроконтроллера, который по этой команде переходит в состояние выхода. Значения этого параметра могут быть константой, значения которой лежат в пределах от 0 и до 15, или переменной, значения которой могут меняться от 0 и до 15 (например, B0), или названием вывода

(например, PORTA.0).

Параметр Onms – время генерации одним частотным набором в миллисекундах. По умолчанию Onms – 200 мс

Параметр Offms – пауза в миллисекундах между генерациями. По умолчанию

Offms – 50 мс

Параметр Tone представляет собой номер двухчастотной комбинации стандартного набора номера. Наборы частот пронумерованы от 0 и до 15. Частоты с номерами 0 - 9 – соответствуют цифрам на телефонной клавиатуре. Набор 10 соответствует клавише – «*» на телефонной клавиатуре, а набор 11 соответствует

101

клавише – «#». Номера 12-15, соответствуют клавишам A-D расширенной телефонной клавиатуры.

Команда DTMFOUT при своей работе использует команду FREQOUT. С той лишь разницей, что на выходе микроконтроллера - Pin генерируется комбинация стандартного телефонного двухчастотного набора номера. Если к выводу Pin подключить фильтр, примерная схема которого представлена на рисунке 19, то на выходе этого фильтра получим комбинации гармоник стандартного телефонного набора номера.

Рис. 33. Одна из схем фильтров по выделению гармонического сигнала.

Команда DTMFOUT как и команда FREQOUT по умолчанию рассчитана и лучше всего работает с задающим генератором на 20 МГц. Но она может также работать и с генератором на 10 МГц, и с генератором на 4 МГц. Информацию по поводу значения частот формируемых этой командой смотри раздел FREQOUT.

Пример:

' Сгенерируем двухтональный многочастотный набор 212 на выводе Pin1

DTMFOUT PORTB.1,[2,1,2]

Команда EEPROM.

Синтаксис:

EEPROM {Location,}[Constant{,Constant...}]

Это команда записи во внутреннюю память EEPROM. По этой команде происходит запись значений - Constant{,Constant...} во внутреннюю энергонезависимою память микроконтроллера EEPROM на чинная с адреса - Location и далее последовательно. Если дополнительное значение Location в команде опущено, то первый байт массива - [Constant{,Constant...}] в команде EEPROM, сохраняется с адреса 0. Сохраняемые значения могут быть, как числовыми, так и строковыми. Сохраняется только самый младший байт числового значения. Строковые переменные сохраняются как последовательные байты кода ASCII. Никакой информации о длине или признака конца автоматически не добавляется.

102


Команда EEPROM работает только с микроконтроллерами, у которых память EEPROM находится внутри самого микроконтроллера. Это микроконтроллеры типа PIC16F84 и PIC16C84. Эта команда не будет работать с микросхемами памяти EEPROM, подключенными к микроконтроллеру по стандарту I2C, как например 12CE67x и 16CE62x.

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

Эта команда аналогична команде DATA. В программе для чтения значений записанных в EEPROM может использоваться команда READ.

Пример:

' Запишем в память EEPROM значения 10, 20 и 30 начиная с адреса 5

EEPROM 5,[10,20,30]

Команда ENABLE.

Команда ENABLE разрешает программе производить обработку прерываний и выполнять команды отладки, которые до этого были отключены командой DISABLE. Команды DISABLE и ENABLE больше походят на псевдокоманды, так как они только дают указания компилятору, вместо того, чтобы фактически создавать код программы.

Пример:

DISABLE ' Отключить обработку прерываний

myint: led = 1 ' Включить светодиод когда происходит прерывание RESUME ' Вернутся в основную программу

ENABLE ' Включить обработку прерываний

Команда ENABLE DEBUG.

Команда ENABLE DEBUG запускает процесс обработки команд отладки, которые до этого были предварительно заблокированы командой DISABLE либо командой DISABLE DEBUG.

Команда ENABLE INTERRUPT.

Команда ENABLE INTERRUPT разрешает программе производить процесс обработки прерываний, которые до этого были заблокированы командой

DISABLE INTERRUPT или DISABLE.

103

Команда END.

Команда END останавливает выполнение программы и вводит микроконтроллер в режим малого энергопотребления (Sleep). При этом все выводы микроконтроллера (вход либо выход) остаются в их текущем состоянии. Команда END работает, выполняя команду SLEEP непрерывно в цикле.

Совет: в конце каждой программы должны быть помещены команды END, или STOP, или GOTO для того чтобы препятствовать засорению свободной памяти микроконтроллера.

Команда ERASECODE.

Синтаксис:

ERASECODE Block

Некоторые PIC-микроконтроллеры, обладающие флэш-памятью, такие, например, как ряд PIC18Fxxx требуют, чтобы часть пространства памяти программ была очищена прежде, чем туда будет записан новый массив по команде WRITECODE. В этих микроконтроллерах, стирание памяти выполняется блоками. Блок стирания может быть в 32 слова (64 байта) или иметь другой размер, в зависимости от микроконтроллера. Для уточнения этих данных смотрите справочные листы от фирмы Microchip.

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

Пример:

ERASECODE $100 ' Очистить блок памяти, начинающийся с адреса $100

Команда FOR...NEXT.

Синтаксис:

FOR Count = Start TO End {STEP {-} Inc} {Body}

NEXT {Count}

Это так называемый оператор цикла, который позволяет выполнять определенную группу операторов заданное число раз. Работает этот оператор так: сначала переменная-счетчик получает значение, равное значению выражения - Start. Затем производится сравнение этого счетчика со значением End и если значение Start меньше значения выражения -End, то выполняется блок операторов до ключевого слова NEXT, а затем значение переменной меняется на

104


величину приращения, равного значению выражения - Inc (шаг цикла), вновь производится проверка счетчика и т. д.

Шаг приращения может быть как положительным, так и отрицательным числом - тогда значение начального выражения - Start должно быть меньше значения конечного выражения - End (то есть, значение счетчика не увеличивается, а уменьшается). Если ключевое слово STEP опущено, то величина приращения по умолчанию равно 1. Если конечное значение переменной цикла больше чем 255, то должна использоваться переменная цикла размером в WORD.

Пример 1:

FOR i = 1 TO 10

' Счет ведется от 1 до 10

SEROUT 0,N2400,[#i,” “] ' Посылаем на вывод Pin0 последовательный ряд

‘ чисел

NEXT i

'Вернутся к началу и так далее

SEROUT 0,N2400,[10]

'Посылаем команду перевода строки

Пример 2:

FOR B2

= 20 TO 10 STEP -2

' Счет ведется от 20 до 10 с шагом - 2

SEROUT

0,N2400,[#B2,” “]

' Посылаем на вывод Pin0

‘ последовательный ряд чисел

NEXT B2

' Вернутся к началу и так далее

SEROUT

0,N2400,[10] 'Посылаем команду перевод строки

Команда FREQOUT.

Синтаксис:

FREQOUT Pin,Onms,Frequency1{,Frequency2}

По этой команде на выводе Pin в течении периода - Onms формируется ШИМ сигнал подобный представленному на рисунке 20.

Рис. 34. Примерный вид сигнала ШИМ формируемого на выходе микроконтроллера по команде FREQOUT.

Если к этому выводу микроконтроллера подключить RC-фильтр, то на выходе фильтра будет получен синусоидальный сигнал частоты - Frequency1, либо сигнал, состоящий из двух синусоид с частотами Frequency1 и Frequency2. Генерируемые частоты могут быть выбраны из диапазона 0 – 32767 герц.

Параметр – Onms определяет время генерации в миллисекундах. Вывод Pin автоматически становится выходом. Он может быть константой, значения которой лежат в пределах от 0 и до 15, или переменной, значения которой могут

105