Основное что необходимо сделать в начале программы, это настроить регистры конфигурации контроллера. От корректной настройки этих регистров часто зависит стабильная работа контроллера.
Описание:
1 |
__CONFIG(n,x); // где n – номер регистра, x – данные конфигурации |
Пример:
1 2 3 |
__CONFIG(1, HSPLL); // запустить генератор с умножителем __CONFIG(2, BORDIS & BORV45 & PWRTEN & WDTDIS & WDTPS1); __CONFIG(3, CCP2RB3); |
Как и где посмотреть какие есть регистры в контроллере – смотрим в описании на контроллер.
Как эти регистры описываются для С?
Лезем в каталог C:\Program Files\HI-TECH Software\PICC-18\PRO\9.66\include\legacy (установки компилятора) и открываем файл, например, ppic18f452.h. В нем ищем раздел // Configuration bit values
В этом разделе смотрим, как описываются биты настройки конфигурации.
Пример настройки контроллера pic18f452
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
__CONFIG(1, HS; OSCSDIS); // | +------ переключатель выбора генератора отключен // +------------ запустить генератор в режиме HS __CONFIG(2, BOREN; BORV45; PWRTEN; WDTEN; WDTPS128); // | | | | +--предделитель таймера настроен на 128 // | | | +--сторожевой таймер включен // | | +--активировать таймер задержки включения // | +--порог активации сброса 4,5 вольта // +--функция сброса по понижению питания активна __CONFIG(3, CCP2RB3); //выход модуля CCP2 настроен на вывод RB3 __CONFIG(4, DEBUGDIS; LVPDIS; STVRDIS); // | | +--сброс по переполнению стека отключен // | +--низковольтное программирование отключено // +--режим внутреннего отладчика отключен __CONFIG(5, CPALL); // установлена защита на всю память __CONFIG(6, WPALL); // защита по записи установлена на всю память __CONFIG(7, TRU); // табличное чтение памяти программ разрешено |
Пример настройки для PIC18F46K22
1 2 3 4 5 6 7 8 |
__CONFIG(1, // FOSC_HSMP & // // FOSC_INTIO7 & FOSC_INTIO67 & // внутрений генератор: выводы генератора используются как выводы i/o PLLCFG_ON & // умножитель включен PRICLKEN_OFF & // первичный генератор не может быть отключен программно FCMEN_OFF & // Отказоустойчивый Монитор Генератора отключен IESO_OFF); // режим переключения генераторов отключен |
1 2 3 4 5 6 |
__CONFIG(2, PWRTEN_ON & // таймер задержки влючения по подаче питания включен BOREN_ON & // сброс по понижению питания влючен BORV_220 & // уровень сброса 2,2 вольта WDTEN_ON & // сторожевой таймер WDTPS_32768); // предделитель сторожевого таймера |
1 2 3 4 5 6 7 8 |
__CONFIG(3, CCP2MX_PORTC1 & // CCP2 подключен к PORTC1 PBADEN_OFF & // порт PORTB скофигурирован при подаче питания как цифровой CCP3MX_PORTB5 & // CCP3 подключен к PORTB5 HFOFST_OFF & // запуск задерживается до появления устойчивого состояния генератора T3CMX_PORTC0 & // T3 подключен к PORTC0 P2BMX_PORTD2 & // P2B подключен к PORTD2 MCLRE_EXTMCLR); // MCLRE включен |
1 2 3 4 5 |
__CONFIG(4, STVREN_OFF & // сброс по переполнению стека отключен LVP_OFF & // поддержка низковольного программирования отключена XINST_OFF & // поддержка расширенных команд отключена DEBUG_OFF); // встроенный дебагер отключен |
1 2 3 4 5 6 7 |
__CONFIG(5, CP0_ON & // Block 0 (000640-003FFFh) защищен CP1_ON & // Block 1 (004000-007FFFh) защищен CP2_ON & // Block 2 (006400-00BFFFh) защищен CP3_ON & // Block 3 (00C000-00FFFFh) защищен CPB_ON & // Boot block (000000-0007FFh) защищен CPD_ON); // Data EEPROM защищен |
1 2 3 4 5 6 7 8 |
__CONFIG(6, WRT0_OFF & // Block 0 (000640-003FFFh) запись разрешена WRT1_OFF & // Block 1 (004000-007FFFh) запись разрешена WRT2_OFF & // Block 2 (006400-00BFFFh) запись разрешена WRT3_OFF & // Block 3 (00C000-00FFFFh) запись разрешена WRTC_OFF & // Регистр конфигурации - запись разрешена WRTB_OFF & // Блок загрузки (000000-0007FFh)- запись разрешена WRTD_OFF); // Запись в EEPROM - запись разрешена |
1 2 3 4 5 6 7 |
__CONFIG(7, EBTR0_OFF & // Block 0 (000640-003FFFh) табличное чтение - разрешено EBTR1_OFF & // Block 1 (004000-007FFFh) табличное чтение - разрешено EBTR2_OFF & // Block 2 (006400-00BFFFh) табличное чтение - разрешено EBTR3_OFF & // Block 3 (00C000-00FFFFh) табличное чтение - разрешено EBTRB_OFF); // Boot Block (000000-0007FFh) табличное чтение - разрешено //--------------------------------------------------------------- |
Пример настройки регистров PIC16F877A
1 2 3 4 5 6 7 8 9 10 11 |
__CONFIG( FOSC_HS & // HS oscillator WDTE_ON & // WDT enabled PWRTE_ON & // PWRT enabled BOREN_ON & // BOR enabled LVP_OFF & // Low-Voltage CPD_OFF & // Data EEPROM code-protected WRT_OFF & // Write protection off DEBUG_OFF & // In-Circuit Debugger disabled CP_OFF); // All program memory code-protected //----------------------------------------------- |
Пример для XC8 контроллер PIC16F1829
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
//================================================================================ // конфигурирование контроллера PIC16F1829 //--------------------------------------------------------------------------- // конфигурирование контроллера (регистры конфигурации) __CONFIG( FOSC_INTOSC & // внутрений генератор, выводы генератора и спользуются как порты ввода вывода WDTE_NSLEEP & // Сторожевой таймер включен в рабочем режиме, выключен в режиме сна PWRTE_OFF & // Таймер задержки включения питания-включен MCLRE_OFF & // вывод MCLR/VPP фунцция RA3 CP_ON & // Защита чтения памяти програм - включена CPD_ON & // Защита чтения памяти данных (EPPROM) - включена BOREN_ON & // Сброс по понижению питания отключен CLKOUTEN_OFF & // Фунцйия CLKOUT выхода тактовой частоты на вывод генератора - отключена IESO_OFF & // Функция переключателя Internal/External генратор - отключена FCMEN_OFF); // Монитор генератора бесперебойной работы - отключен __CONFIG( WRT_ALL & // Память программ - защищена от записи PLLEN_ON & // Внутренний умножитель 4x PLL - включен STVREN_OFF & // сброс по переполнению стека отключен BORV_LO & // Уровень сброса по понижению питания установлен на 2.7V LVP_OFF); // Низковольтное программирование отключено //================================================================================ |
Варианты альтернативной настройки регистров конфигурации для контроллера PIC18F25K20
Microchip MPLAB XC8 C Compiler V1.12
вариант 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
// конфигурирование контроллера __CONFIG(1, FOSC_INTIO67 & FCMEN_OFF & IESO_OFF); // | | +---Отключен режим переключения Генератора // | +--Отказоустойчивый Монитор Генератора отключен // +--Выбор Генератора, Внутренний генератор, функция порта на RA6 и RA7 // __CONFIG(2L, PWRT_ON & BOREN_ON & BORV_27); // | | +---Уровень напряжения срабатывания сброс при понижении питания 2.7 В // | +---Сброс по понижению питания // +---Задежка запуска процессора при подаче питания (включена) // __CONFIG(2H, WDTEN_ON & WDTPS_1024); // | +---1:1024 задежка страбатывания сторожевого таймера. // +---сторожевой таймер включен // __CONFIG(3, CCP2MX_PORTBE & PBADEN_OFF & LPT1OSC_OFF & HFOFST_OFF & MCLRE_ON); // | | | | +---MCLR включен // | | | +---HF-INTOSC Быстрый Запуск - отключен // | | +---Режим малой мощности Генератора Timer1 Отключен, T1 работает в стандартном режиме мощности. // | +---Режим работы порта PORTB после сброса, выводы PORTB<4:0> конфигурированы на цифровой ввод // +---Выход CCP2 подключен к выводу RB3. __CONFIG(4, STVREN_OFF & LVP_OFF & XINST_OFF & DEBUG_OFF); // | | | +---Режим фонового отладчика отключен. // | | +---Расширенный набор команд отключен // | +---Низковольтное программирование выключенно. // +---Сброс при переполнении стека отключен. // __CONFIG(5, CP0_ON & CP1_ON & CP2_ON & CP3_ON & CPB_ON & CPD_ON); // | | | | | +---защита EEPROM данных активирована // | | | | +---защита блока загрузки активирована // | | | +---защита кода блока 3 активирована // | | +---защита кода блока 2 активирована // | +---защита кода блока 1 активирована // +---защита кода блока 0 активирована // __CONFIG(6, WRT0_OFF & WRT1_OFF & WRT2_OFF & WRT3_OFF & WRTB_OFF & WRTC_OFF & WRTD_OFF); // | | | | | | +---Защита записи в EEPROM память // | | | | | +---Защита записи в регистр конфирураций // | | | | +---Защита записи в блок загрузки // | | | +---защита записи в блок 3 // | | +---защита записи в блок 2 // | +---защита записи в блок 1 // +---защита записи в блок 0 __CONFIG(7, EBTR0_OFF & EBTR1_OFF & EBTR2_OFF & EBTR3_OFF & EBTRB_OFF); // | | | | | // | | | | +---Защита от табличного чтения блок загрузки // | | | +---Защита от табличного чтения блока памяти 3 // | | +---Защита от табличного чтения блока памяти 2 // | +---Защита от табличного чтения блока памяти 1 // +---Защита от табличного чтения блока памяти 0 //------------------------------------------------------------------------------------------------------- |
вариант 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
//--------------------------------------------------------------------------- // конфигурирование контроллера #pragma config FOSC = INTIO67 // Internal oscillator block, port function on RA6 and RA7/Выбор Генератора, Внутренний генератор, функция порта на RA6 и RA7 #pragma config FCMEN = OFF // Fail-Safe Clock Monitor disabled/Отказоустойчивый Монитор Генератора отключен #pragma config IESO = OFF // Oscillator Switchover mode disabled/Отключен режим переключения Генератора #pragma config PWRT = ON // PWRT enabled/Задежка запуска процессора при подаче питания (включена) #pragma config BOREN = ON // Brown-out Reset enabled and controlled by software (SBOREN is enabled)/Сброс по понижению питания #pragma config BORV = 27 // VBOR set to 2.7 V nominalУровень напряжения срабатывания сброс при понижении питания 2.7 В #pragma config WDTEN = ON // WDT is always enabled. SWDTEN bit has no effect/сторожевой таймер включен #pragma config WDTPS = 8192 // 1:8192/ задежка страбатывания сторожевого таймера. #pragma config CCP2MX = PORTBE // CCP2 input/output is multiplexed with RB3/Выход CCP2 подключен к выводу RB3. #pragma config PBADEN = OFF // PORTB<4:0> pins are configured as digital I/O on Reset #pragma config LPT1OSC = OFF // Timer1 configured for higher power operation #pragma config HFOFST = OFF // The system clock is held off until the HFINTOSC is stable. #pragma config MCLRE = ON // MCLR pin enabled; RE3 input pin disabled #pragma config STVREN = OFF // Stack full/underflow will not cause Reset #pragma config LVP = OFF // Single-Supply ICSP disabled #pragma config XINST = OFF // Instruction set extension and Indexed Addressing mode disabled (Legacy mode) #pragma config DEBUG = OFF // Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins #pragma config CP0 = ON // Block 0 (000800-003FFFh) code-protected #pragma config CP1 = ON // Block 1 (004000-007FFFh) code-protected #pragma config CP2 = ON // Block 2 (008000-00BFFFh) code-protected #pragma config CP3 = ON // Block 3 (00C000-00FFFFh) code-protected #pragma config CPB = ON // Boot block (000000-0007FFh) code-protected #pragma config CPD = ON // Data EEPROM code-protected #pragma config WRT0 = OFF // Block 0 (000800-003FFFh) not write-protected #pragma config WRT1 = OFF // Block 1 (004000-007FFFh) not write-protected #pragma config WRT2 = OFF // Block 2 (008000-00BFFFh) not write-protected #pragma config WRT3 = OFF // Block 3 (00C000h-00FFFFh) not write-protected #pragma config WRTC = OFF // Configuration registers (300000-3000FFh) not write-protected #pragma config WRTB = OFF // Boot Block (000000-0007FFh) not write-protected #pragma config WRTD = OFF // Data EEPROM not write-protected #pragma config EBTR0 = OFF // Block 0 (000800-003FFFh) not protected from table reads executed in other blocks #pragma config EBTR1 = OFF // Block 1 (004000-007FFFh) not protected from table reads executed in other blocks #pragma config EBTR2 = OFF // Block 2 (008000-00BFFFh) not protected from table reads executed in other blocks #pragma config EBTR3 = OFF // Block 3 (00C000-00FFFFh) not protected from table reads executed in other blocks #pragma config EBTRB = OFF // Boot Block (000000-0007FFh) not protected from table reads executed in other blocks //--------------------------------------------------------------------------- |
примеры общего вида конфигураций
1 2 |
#include <xc.h> __CONFIG(WDTDIS & HS & UNPROTECT); |
для PIC10/12/16
1 2 3 |
#include <xc.h> __CONFIG(WDTDIS & XT & UNPROTECT); // Program config. word 1 __CONFIG(FCMEN); |
для PIC18
1 |
__CONFIG(2, BW8 & PWRTDIS & WDTPS1 & WDTEN); |
Это может быть интересно
PIC32MZ – прерывания (заметки)
Виды формирования запоминая контекста при входе в прерывания. Компилятор представляет три варианта AUTO – когда запоминания места возврата из подпрограммы возложено на программу, т.е все создается программно. Этот метод является …Регулятор влажности ch-3800
И еще один проект на плате ch-c3xxx – универсальный регулятор влажности ch-3800. Регулятор позволяет работать как в режиме индикатора влажности, так и в режиме регулятора. Рабочий диапазон измеряемой относительной …Простой сенсорный регулятор света
Простой сенсорный регулятор. Проект – 2007 года. Регулятор выполнена на микроконтроллере PIC12F683 и имеет минимальное количество элементов. Выполняет стандартные функции, включение выключение света, изменение яркости, запоминание последнего установленного уровня и быстрое …Проект с использованием MCC часть 05
Эту часть назовем так как избавься от delay, там где а это реально не надо. Для это нам потребуется научиться использовать прерывания и работать с таймерами. Что такое таймер? Это …Проект с использованием MCC часть 01
Для изучения MCC я выбрал простой контроллер PIC16F1509. Выбор его был обусловлен богатой новой периферией которую можно изучить. Для начала была собрана схема на макетной плате Внешний вид собранной схемы …MPLAB® Harmony – или как это просто! Часть 4.
Часть четвертая – это может показаться немного сложно. Структура проекта. Для облегчения конфигурирования проекты MPLAB Harmony обычно структурированы таким образом, чтобы изолировать код, необходимый для настройки «системы», от кода библиотеки …LM317 и светодиоды
LM317 и светодиоды статья с переработанная с сайта http://invent-systems.narod.ru/LM317.htm Долговечность светодиодов определяется качеством изготовления кристалла, а для белых светодиодов еще и качеством люминофора. В процессе эксплуатации скорость деградации кристалла зависит от …Счетчики посетителей
Вас сосчитали!? или счетчики посетителей. Для чего нужны счетчики посетителей? Какие они бывают? ТОРГОВЛЯ. Подсчитайте, сколько ваш магазин посещает человек за день. Кок много человек приходит утром, какое количество вечером. …Проект с использованием MCC часть 09
Эта часть будет посвящена созданию практического проекта управления освещение. Тех задание: Два выхода управления ШИМ – светодиодным освещением. Две кнопки управления, каждая кнопка управляет, своим каналом, логика самая простая, нажимаем …Просто о внешних переменных
Часто возникает задача когда необходимо предавать данные между модулями программы. Например, передать данные между файлами, или управлять работой модулей. Для этого создаем заголовочный файл и описываем наши переменные как внешние. В …