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

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

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

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

Добавлен: 17.06.2025

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

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

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

меняться от 0 и до 15 (например, B0) или названием вывода (например, PORTA.0). Так как команда FREQOUT генерирует сигнал с использованием широтно-импульсной модуляцией, то от качества используемого фильтра зависит качество формы получаемой синусоиды. На рисунке 19 показана схема такого фильтра.

Команда FREQOUT рассчитана и лучше всего работает с задающим генератором 20 МГц. Но она может также работать и с генератором 10 МГц, и с генератором 4 МГц.

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

Значение частот получаемых на выходе фильтра будет равно отношению частоты 20 МГц к частоте фактически используемого генератора. Т.е.:

(Tone)N = (Tone)20 * 20/N

Где

N – частота фактически используемого генератора (в МГц),

(Tone)20 – частота, которую вы бы получили, используя генератор 20 МГц, (Tone)N – частота, которую получим, используя генератор с частотой N.

Пример:

'Выдать на вывод PORTB.1 частоту 1KHz в течении 2 секунд

FREQOUT PORTB.1,2000,1000

Команда GOSUB.

Синтаксис:

GOSUB Label

Эта команда указывает программе на то, что необходимо перейдите к подпрограмме, находящейся после метки Label, сохраняя при этом адрес возврата в стеке. По команде GOSUB в отличие от команды GOTO, при достижении ключевого слова RETURN программа должна вернуться на следующую строку после команды GOSUB. В программе может использоваться неограниченное число подпрограмм. В свою очередь, подпрограммы могут также быть вложенными. Другими словами, Вы можете из одной подпрограммы вызвать другую подпрограмму. Такое вложение подпрограмм ограничено. Глубина вложения не должна превышать четырех уровней.

Пример:

GOSUB beep

' Выполните подпрограмму, по метке beep

...

beep: HIGH 0

'Включите светодиод подключенный к Pin0

106


SOUND 1,[80,10]

' Выдать гудок на динамик подключенный к Pin1

LOW 0

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

RETURN

'Возвратится в основную подпрограмму

Команда GOTO.

Синтаксис:

GOTO Label

По этой команде выполнение программы продолжается с утверждения,

находящегося после метки Label.

Пример:

GOTO send

'Перейти на мтку send

...

send: SEROUT 0,N2400,["Hi"] 'Послать текст“Hi”с вывод Pin0 ‘ последовательного порта

Команда HIGH.

Синтаксис:

HIGH Pin

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

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

Пример:

HIGH 0

' Сделать Pin0 выходом и установить его в высокое состояние

‘ (+5 в)

HIGH PORTA.0

' Сделать pin 0 PORTА, выходом и установить его в высокое

‘ состояние (+5 в)

led VAR PORTB.0

' Определим переменную LED как PORTB.0

HIGH led

' Сделать LED выходом и установить его в высокое состояние

(+5 в)

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

PORTB.0 = 1 ' установить PORTB.0 в высокое логическое состояние

107


Команда HPWM.

Синтаксис:

HPWM Channel,Dutycycle,Frequency

Данная команда генерирует на выводе микроконтроллера прямоугольные импульсы с частотой –Frequency. Параметр - Channel определяет вывод микроконтроллера, который будет использован для этого. Некоторые МК имеют 1, 2 или 3 канала PWM. Параметр - Dutycycle определяет скважность сигнала. Она может меняться от 0 и до 255, где 0 – соответствует нулевой скважности (генерация отсутствует, на выходе - 0), а 255 полное заполнение (генерация отсутствует, на выходе – 1). Значение 127 дает 50 %- скважность (меандр). Если разделить значение Dutycycle на 2.55, то мы получим скважность в %. Параметр Frequency - желательная частота сигнала PWM. На микроконтроллрах с 2 каналами, частоты в обоих каналах должны быть одинаковыми. Однако не все частоты доступны для использования в этой команде. Это зависит от задающего генератора. Самая низкая частота при кварце в 4 МГц – 245 Гц. Самая высокая частота на любой частоте задающего генератора

– 32767 Гц.

Самые низкие возможные для использования частоты в команде HPWM в зависимости от используемого генератора показаны в таблице:

Таблица зависимости минимальной частоты в команде HPWM от частоты задающего генератора

Таблица 12.

Частота генератора,

Для 14-разрядных МК и 18Cxxx,

Для 17Cxxx,

МГц

Гц

Гц

4

245

3907

8

489

7813

10

611

9766

12

733

11719

16

977

15625

20

1221

19531

24

1465

23438

33

2015

32227

40

2442

na

108


Некоторые устройства, типа PIC18C452, имеют дополнительные выводы, которые могут использоваться в качестве выхода для команды HPWM. Следующие DEFINE разрешают использовать эти выводы:

DEFINE CCP1_REG PORTC

' Определяем порт для первого канала Hpwm

DEFINE CCP1_BIT 2

' Определяем вывод для первого канала Hpwm

DEFINE

CCP2_REG

PORTC

' Определяем порт для второго канала Hpwm

DEFINE

CCP2_BIT

1

' Определяем вывод для второго канала Hpwm

Следующие DEFINE определяют, какой таймер, 1 или 2, использовать с каналом PWM 2 и каналом PWM 3 для устройств типа PIC17C7xx. Если никакого DEFINE не будет предложено, то по умолчанию - таймер 1,.

DEFINE HPWM2_TIMER 1 'Для второго канала Hpwm использовать таймер 1 DEFINE HPWM3_TIMER 1 'Для третьего канала Hpwm использовать таймер 1

Пример:

HPWM 1,127,1000 ' Установить 50 % скважность для сигнала в 1 кГц HPWM 1,64,200 ' Установить 25 % скважность для сигнала в 2 Гц

Команда HSERIN.

Синтаксис:

HSERIN {ParityLabel,}{Timeout,Label,}[Item{,...}]

Эта команда предназначена для приема информации по последовательному асинхронному каналу связи.

Её можно использовать только с микроконтроллерами, которые имеют в своем составе модуль USART. Для уточнения этой информации смотрите справочные листы на эти микроконтроллеры. Там же Вы сможете найти информацию о номерах контактов используемых для такой связи. Основные параметры, в том числе и скорость канала в бодах, должны быть определены командами DEFINE.

'Установить в регистре приемнике разрешение на прием

DEFINE HSER_RCSTA 90h

'Установить регистр передатчика разрешение на передачу

DEFINE HSER_TXSTA 20h

'Установить скорость в бодах

DEFINE HSER_BAUD 2400

109


' Установить непосредственно регистр SPBRG (обычно установлено

HSER_BAUD)

DEFINE HSER_SPBRG 25

Для оперирования скоростью в бодах команда HSERIN по умолчанию предполагает генератор на 4 МГц. Для того чтобы правильно рассчитать скорость в бодах с другими значениями генератора, воспользуйтесь соответствующей командой DEFINE, с помощью которой можно установить нужное значение частоты. Дополнительные параметры, такие как время ожидания -Timeout и метка -Label могут быть включены в команду для того, чтобы разрешить программе продолжиться, если данные не будут получены в определенное время, с указанием того, куда должна перейти программа для продолжения. Время ожидания определяется в единицах миллисекунд.

По умолчанию формат принимаемых данных - 8N1, т.е. 8 информационных разрядов, нет разряда четности и 1 стоповый бит. Но можно использовать и другие форматы, например 7E1 (7 информационных разрядов, проверка на четность, 1 стоповый бит) или 7O1 (7 информационных разрядов, проверка на нечетность, 1 стоповый бит). Для этого надо использовать один из следующих

DEFINE:

'Если желаете используйте проверку на четность

DEFINE HSER_EVEN 1

'Если желаете, используйте проверку на нечетность

DEFINE HSER_ODD 1

Установка HSER_EVEN и HSER_ODD в 0 - отключит режим проверки на четность либо нечетность.

Установка проверки на четность, наряду со всеми другими DEFINE также будет касаться и команды HSEROUT. В команду может быть включен дополнительный параметр – ParityLabel( метка результата проверки на четность). Это значит, что программа продолжится с этого места, если в результате проверки на четность будет получена ошибка. Понятно, что это должно использоваться, если разрешена проверка на четность, которая задается в одном из предыдущих DEFINE. Так как последовательный прием данных осуществляется на основе аппаратных средств, то естественно не возможно перевести его в режим работы с инвертированными уровнями не заменив драйвер RS-232. Поэтому с командой HSERIN должен использоваться подходящий драйвер. Команда HSERIN поддерживает те же самые модификаторы данных, которые работают с командой

SERIN2.

Таблица модификаторов используемых с командой HSERIN

Таблица 13

Модификатор Операция

110