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

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

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

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

Добавлен: 17.06.2025

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

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

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

являются предопределенными в PicBasicPro. Команда переопределения DEFINE позволяет компилятору PicBasicPRO изменять эти настройки по Вашему усмотрению. Эти определения должны быть все в верхнем регистре.

Примеры переопределений в PicBasicPro:

DEFINE ADC_BITS 8 'Количество разрядов в результате АЦП DEFINE ADC_CLOCK 3 ' Источник синхронизации АЦП (rc = 3) DEFINE ADC_SAMPLEUS 50 ' Время выборки АЦП преобразования в мкс

DEFINE BUTTON_PAUSE 10 'Противодребезговая задержка срабатывания ‘ кнопки в мc

DEFINE CCP1_REG PORTC ' Определяем порт для первого канала Hpwm DEFINE CCP1_BIT 2 ' Определяем вывод для первого канала Hpwm DEFINE CCP2_REG PORTC' Определяем порт для второго канала Hpwmt DEFINE CCP2_BIT 1 ' Определяем вывод для второго канала Hpwmt DEFINE CHAR_PACING 1000 ' Задержка между передачей знаков в мкс DEFINE DEBUG_REG PORTB 'Установить порт для работы с функцией Debug DEFINE DEBUG_BIT 0 'Установить вывод для работы с функцией Debug DEFINE DEBUG_BAUD 2400 'Установить скорость передачи в бодах для

‘ Debug

DEFINE DEBUG_MODE 1 'Режим работы функции Debug: 0 = True, 1 = Inverted

DEFINE DEBUG_PACING 1000 ' Задержка между передачей знаков в мкс для ‘ функции Debug

DEFINE DEBUGIN_REG PORTB ' Устанавливаем порт для работы с командой

‘ Debugin

DEFINE DEBUGIN_BIT 0 ' Устанавливаем вывод порта для работы с

‘ командой Debugin

DEFINE DEBUGIN_MODE 1 ' Установка режима работы с командой Debugin: ‘ 0 = прямой, 1 = инверсный

DEFINE HPWM2_TMR 1 ' В команде Hpwm для 2 канала использовать таймер 1 DEFINE HPWM3_TMR 1 ' В команде Hpwm для 3 канала использовать таймер 1 DEFINE HSER_BAUD 2400 ' Установить скорость в бодах для команды Hser DEFINE HSER_CLROERR 1 ' Автоматически очищать ошибку переполнения

Hser

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

DEFINE HSER_RCSTA 90h

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

‘ прием

DEFINE HSER_TXSTA 20h

' Установить для регистра передатчика

‘ разрешение на передачу

DEFINE HSER_EVEN 1 ' Использовать проверку на четность DEFINE HSER_ODD 1 ' Использовать проверку на нечетность

DEFINE HSER2_BAUD 2400 ' Установить скорость в бодах для 2 порта DEFINE HSER2_CLROERR 1 ' Автоматически очищать ошибку переполнения

167


‘ для 2 порта

DEFINE HSER2_SPBRG 25 ' Установить SPBRG для 2 порта непосредственно ‘ (обычно устанавливается HSER_BAUD)

DEFINE HSER2_RCSTA 90h ' Установить регистр 2 приемника на получение ‘ информации

DEFINE HSER2_TXSTA 20h ' Установить регистр 2 передатчика на выдачу ‘ нформации

DEFINE HSER2_EVEN 1 ' Использовать проверку на четность для 2 порта DEFINE HSER2_ODD 1 ' Использовать проверку на нечетность для 2 порта DEFINE I2C_HOLD 1 ' пауза в передаче информации по шине I2C когда цепь ‘ синхронизации переведена в низкое логическое состояние

DEFINE I2C_INTERNAL 1 ' Работать с внутренней EEPROM ‘ микроконтроллеров 16CExxx и 12CExxx

DEFINE I2C_SCLOUT 1 ' Установить цепь синхроимпульсов биполярной ‘ вместо открытого коллектора

DEFINE I2C_SLOW 1 ' Для частот >8МГц установить доступ к ‘ стандартным скоростям

DEFINE I2C_SDA PORTA,0 ' Установить вывод данных (касается только12- ‘ разрядных МК)

DEFINE I2C_SCL PORTA,1 'Установить вывод синхронизации (касается ‘ только12-разрядных МК)

DEFINE LCD_DREG PORTA 'Определяем порт данных для связи с ЖК ‘ монитором

DEFINE LCD_DBIT 0 'Порядковый адрес порта для подключения цепи данных ‘ ЖК монитора( 0 или 4)

DEFINE LCD_RSREG PORTA 'Определяем порт к которому подключается цепь ‘ RS ЖК монитора

DEFINE LCD_RSBIT 4 'Определяем вывод к которому подключается цепь RS ‘ ЖК монитора

DEFINE LCD_EREG PORTB 'Определяем порт к которому подключается цепь ‘ ENABLE ЖК монитора

DEFINE LCD_EBIT 3 'Определяем вывод к которому подключается цепь ‘ ENABLE ЖК монитора

DEFINE LCD_RWREG PORTE 'Определяем порт к которому подключается цепь

‘ read/write ЖК монитора

DEFINE LCD_RWBIT 2 'Определяем вывод к которому подключается цепь

‘ read/write ЖК монитора

DEFINE LCD_BITS 4 ' Подключение ЖК монитора осуществляется по 4 или 8 ‘ разрядной шине

DEFINE LCD_LINES 2 ' Количество строк используемого ЖК монитора DEFINE LCD_COMMANDUS 2000 'Время задержки команд в мкс DEFINE LCD_DATAUS 50 'Время задержки данных в мкс

DEFINE LOADER_USED 1 'Использовать встроенный Bootloader

168


DEFINE NO_CLRWDT 1 ' Не добавлять команды CLRWDT

DEFINE PULSIN_MAX 1000 ' Установить максимальное значение счета для ‘ измерения pulsin

DEFINE OSC 4 ' Установить частоту генератора в МГц: 3(3.58), 4, 8, 10, 12, ‘ 16, 20, 24, 25, 32, 33, 40

DEFINE OSCCAL_1K 1 ' Установить значение частоты генератора для МК

‘ PIC12C671/CE673

DEFINE OSCCAL_2K 1 ‘ Установить значение частоты генератора для МК

‘ PIC12C672/CE674

DEFINE SER2_BITS 8 ' Установить разрядность данных для команд Serin2 и ‘ Serout2

DEFINE SER2_ODD 1 ' Установить проверку на нечетность

DEFINE SHIFT_PAUSEUS 50 ' Изменить длительность синхроимпульсов для

‘ команд Shiftin и Shiftout

Некоторые замечания по поводу обозначения выводов микроконтроллеров.

В тексте программы PicBasic Pro к выводам микроконтроллера можно обратиться множеством различных способов. Лучший способ для указания вывода микроконтроллера это просто использовать его название:

PORTB.1 = 1 ' Установить первый разряд PORTB в 1

В тех случаях, когда необходимо помнить для каких целей используется данный вывод микроконтроллера принято определять этот вывод как переменную с использованием команды VAR и затем уже использовать это название в любых операциях:

led VAR PORTA.0

' Изменим название вывода PORTA.0 на имя led

HIGH led

' Установим на выводе led (PORTA.0) высокий логический

уровень (+5 вольт)

Для совместимости с программами BASIC Stamp, выводы, используемые в текстах программ PicBasicPro можно также обозначать, используя относительную нумерацию, т.е. 0 - 15. Эти выводы физически могут относиться к различным портам микроконтроллера в зависимости от того, сколько контактов имеет микроконтроллер.

Таблица 31

Количество выводов в

0 - 7

8 - 15

PIC-микроконтроллере

8-выводов

GPIO*

GPIO*

169


18-выводов

PORTB

PORTA*

28-выводов (кроме 14C000)

PORTB

PORTC

28-выводов (14C000)

PORTC

PORTD

40-выводов

PORTB

PORTC

*GPIO и PORTA не имеют 8 выводов типа вход - выход.

Если количество выводов порта меньше 8 (например, PORTA), то при обозначении вывода этого порта надо указывать номер только реально существующего вывода, то есть 8 - 12. Поэтому если обозначить вывод этого порта номером 13, 14 или 15 то при ассемблировании это не даст никакого результата. В зависимости от конкретного PIC-микроконтроллера, номер вывода - 0 может быть физическим выводом 6, 21 или 33, но в каждом случае это относится к PORTB.0 (или GPIO.0 для микроконтроллеров с 8 выводами, или PORTC.0 для PIC14C000). Отсюда следует, что в программе PicBasicPro можно ссылаться на выводы как на номера (например. Pin0 или Pin10). Но это возможно, только если один из файлов bsdefs.bas включен в Вашу программу или Вы определили их непосредственно. И естественно, что обозначать выводы можно указанием полного названия вывода (например. PORTA.1). Наилучшим методом обращения к любому выводу микроконтроллера является последний метод. В некоторых случаях, обозначать выводы, удобнее присвоив им определенное имя. Для этого используется команда VAR:

led VAR PORTB.3

Для того чтобы увеличить совместимость программ PicBasicPro с программами BASIC Stamp, в комплект компилятора включены два файла определений. Это файлы "bs1defs.bas" и "bs2defs.bas". Они могут быть включены в программу PicBasic Pro, для того чтобы названия разрядов и выводов были такими же, как и в

BASIC Stamp. В файле BS1DEFS.BAS выводы обозначаются как B0-B13, и W0W6 и т.д. А в файле BS2DEFS.BAS выводы обозначаются как Ins, Outs, B0-B25, W0-W12 и т.п.

Когда на PIC-микроконтроллер подается питание, то все его выводы устанавливаются в состояние входа. Для того чтобы установить вывод порта в состояние выхода (или входа), установите соответствующим образом регистр TRIS. Запись 0 в один из разрядов регистра TRIS устанавливает соответствующий разряд соответствующего порта в состояние выхода. И наоборот, запись 1 в один из разрядов регистра TRIS устанавливает соответствующий разряд порта в состояние входа. Например:

‘ установить все разряды PORTA в состояние выхода.

TRISA = %00000000 ' Или TRISA = 0

‘ установить все разряды PORTB в состояние выхода.

170


TRISB = %11111111 ' Или TRISB = 255

‘ установить все четные разряды PORTC в состояние выхода, а нечетные в состояние входа.

TRISС = %10101010 ' Или TRISС = 170

Заключение.

Замечания по поводу использования 12-разрядных микроконтроллеров В связи с тем, что 12-разрядные микроконтроллеры имеют ограниченные

возможности, не все команды компилятора PicBasic Pro будут работать с этими контроллерами.

Ниже приведена таблица команд, которые не поддержаны для этих микроконтроллеров:

Таблица 32

Команда

Причина отсутствия

ADCIN

Отсутствие в составе контроллера АЦП

DATA

Отсутствие в составе контроллера

ЕЕПРОМ

DTMFOUT

Недостаточно ОЗУ или стека

EEPROM

Отсутствие в составе контроллера

ЕЕПРОМ

FREQOUT

Недостаточно ОЗУ или стека

HPWM

Отсутствии встроенного ШИМ

HSERIN

Отсутствие встроенного порта

HSEROUT

Отсутствие встроенного порта

ON INTERRUPT

Не поддержаны прерывания

READ

Отсутствие в составе контроллера

ЕЕПРОМ

READCODE

Отсутствие флаш памяти

RESUME

Не поддержаны прерывания

SERIN2

Недостаточно ОЗУ или стека

SEROUT2

Недостаточно ОЗУ или стека

USBIN

Отсутствие USB порта

USBINIT

Отсутствие USB порта

USBOUT

Отсутствие USB порта

WRITE

Отсутствие в составе контроллера

ЕЕПРОМ

WRITECODE

Отсутствие флаш памяти

XIN

Недостаточно ОЗУ или стека

XOUT

Недостаточно ОЗУ или стека

Некоторые команды при использовании 12-разрядных микроконтроллеров модифицированы.

171