Файл: Учимся программировать микроконтроллеры 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