Перейти к содержанию

PIC биты конфигурации


Рекомендуемые сообщения

Доброго времени суток!

Пытаюсь разобраться с программированием PIC, поставил MPLAB, с самой программой на С в принципе боле-менее понятно и мало чем отличается от того же С на АВР, а вот с битами конфигурации что то запутался, есть вот такое описание

Следующая строчка – конфигурирование кристалла

__CONFIG (INTIO & UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS);

Что такое конфигурирование? Это установка определенных режимов работы МК. Более подробно о конфигурировании МК смотрим в документе PIC16F627_628.pdf на стр.88. (разместите ярлык этого даташита на рабочем столе).

Что означает фраза __CONFIG ? Это так называемая директива (указание) на установку битов конфигурации. А откуда взялись фразы INTIO & UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS? Они у нас из файла pic16f62xa.h. Этим фразам конфигурирования сопоставлены 16-ричные числа. 0x3FFC 0x3FFF 0x3F7F 0x3FFF и т.д. С тем же успехом мы могли бы написать через логические «и» (&)

__CONFIG (0x3FFC & 0x3FFF & 0x3F7F & 0x3FFF & и т.д.

Согласитесь, удобнее написать осмысленные фразы, чем слабопонятные цифры. Если мы захотим перенести программу на другой кирпич, то там фразам могут соответствовать совершенно другие цифры. Таким образом, фразы позволяют безболезненно мигрировать на другие кристаллы (с известными оговорками, т.к. у разных кристаллов может быть свой набор конфигурационных битов, но имена фраз по функциям будут совпадать).

Таким образом, если вместо

#include <pic.h>

__CONFIG (INTIO & UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS);

мы запишем только __CONFIG (0x3FFC & 0x3FFF & 0x3F7F & 0x3FFF & и т.д. то и эта запись будет корректно скомпилирована.

Последовательность перечисляемых фраз или их чисел не имеет значения.

Кратко на русском перечислим выбранные биты конфигурации

INTIO & UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS

INTIO внутренний генератор, RA6 работает как цифровая линия ввода/вывода;

UNPROTECT защита отключена;

LVPDIS отключено низковольтное программирование;

BOREN включен сброс по снижению питания;

MCLRDIS отключен внешний мастер сброса;

PWRTEN включен таймер включения питания;

WDTDIS отключен сторожевой таймер.

То, что биты указаны словами INTIO & UNPROTECT & и т.д. понятно, а вот построение этих слов никак в толк не возьму, и с тем что приведено в даташите как то не совсем вяжется, вот например "PWRTEN - включен таймер включения питания;", а как в таком случае будет выглядеть "выключен таймер включения питания"? Хотя этого я и не знаю, но принцип понятен, а вот с написанием "0x3FFC & 0x3FFF & 0x3F7F & 0x3FFF & и т.д." совсем не понятно, у нас же описываются биты конфигурации, как же тогда понимать, что биты описываются шестнадцатиричными числами? Ведь чтобы описать все биты достаточно одного числа, например 0x3FFF, или я что то не так понимаю?

Изменено пользователем hsl
Ссылка на комментарий
Поделиться на другие сайты

Сергей, скачай _https://yadi.sk/d/WcHPCeYIYDNa - русский даташит стр 88. Слово конфигурации состоит из 14 бит и находится по адресу 2007.

__CONFIG (INTIO & UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS означает, что эти БИТЫ установлены в единицу, остальные биты не установлены в единоцу (т.е. ноль)

Ссылка на комментарий
Поделиться на другие сайты

...UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS означает, что эти БИТЫ установлены в единицу, остальные биты не установлены в единоцу (т.е. ноль)...

Это теперь понятно, непонятно где найти весь перечень этих терминов, а даташит этот и не только этот я смотрел, нет там таких терминов, можно догадаться конечно, что например UNPROTECT это биты защиты, но которые из них?, и почему они так обзываются, и где брать полный перечень названий этих битов?

Или не заморачиваться с этими названиями, а тупо выбрать побитно, то что нужно и записать в виде одного шестнадцатиричного числа?

Изменено пользователем hsl
Ссылка на комментарий
Поделиться на другие сайты

Описание можно посмотреть здесь _https://radio-hobby.org/modules/news/article.php?storyid=934, но в принципе Вы всегда можете изменить эти биты прямо в программаторе, при программировании. Следует учесть, что у разных микроконтроллеров эти биты могут отличатся. Самое главное выставить правильно тактовый генератор и бит выбора работы вывода –MCLR, чтобы микроконтроллер запустился.

Ссылка на комментарий
Поделиться на другие сайты

Описание можно посмотреть здесь...

Описание есть и в даташитах и в общем довольно доходчивое, но ответа на мой вопрос по ссылке нет.

...Следует учесть, что у разных микроконтроллеров эти биты могут отличатся...

Вот, как раз об этом в приведенной мной цитате в первом посте и говорится

Согласитесь, удобнее написать осмысленные фразы, чем слабопонятные цифры. Если мы захотим перенести программу на другой кирпич, то там фразам могут соответствовать совершенно другие цифры. Таким образом, фразы позволяют безболезненно мигрировать на другие кристаллы (с известными оговорками, т.к. у разных кристаллов может быть свой набор конфигурационных битов, но имена фраз по функциям будут совпадать

Биты разные, но названия то одни и те же, вот по этому я и хочу разобратся с ними, только не пойму принцип построения этих фраз и откуда они вообще берутся, вот например UNPROTECT, по смыслу понятно, что защита не включена, но какая? По даташиту за это отвечают 3 бита, что из этого оключает UNPROTECT, все? А если нужно отключить не все, как тогда будет выглядеть эта команда?

Ссылка на комментарий
Поделиться на другие сайты

Надо открыть английский даташит не Вашу конкретную микросхему и там, к примеру PIC16F627A имеет только 1 единственный бит защиты. Если бит не один выбирается значением.

Пример mikroC PRO for PIC при создании проекта я выставил вот такие значения

MCU: PIC16F690, (CONFIG :$2007 : 0x0FD4):

Oscillator > Internal RC No Clock (Тактовый генератор)

Watchdog Timer > Off (Сторожевой таймер WDT))

Power Up Timer > Off (Таймер включения питания PWRT)

Master Clear Enable > Disabled (Внутренный) (Режим работы вывода MCLR)

Code Protect > Off (Защита кода программы)

Data EE Read Protect > Off (Защита EEPROM памяти данных)

Brown Out Detect > BOD Enabled, SBOREN Disabled (Сброс по снижению питания)

Internal External Switch Over Mode > Enabled

Monitor Clock Fail-safe > Enabled

 

В ассемблере (для PIC16F84) _CONFIG _CP_OFF & _WDT_OFF & PWRTE_ON & _XT_OSC

Изменено пользователем if33
Ссылка на комментарий
Поделиться на другие сайты

В разных программах и компиляторах синтаксис разный и увы не совместимый, я как уже упомянул выбрал связку MPLAB и HI-TECH, после CodevisionAVR они мне показались наиболее близкими.

МК с которым я пытаюсь разобратся PIC12F629, у него к слову сказать 2 бита защиты. С ключевыми словами обозначающими биты конфигурации в итоге тоже разобрался, в компиляторе есть фалы конфигураций для всех поддерживаемых МК, в них по мимо прочего перечислены все ключевые слова обозначающие биты конфигурации, в моем случае это выглядит вот так

/* Protection of data block */
#define CPD	0x3EFF		/* data protect on */ 
#define UNPROTECT	0x3FFF 	/* data protect off */

/* Protection of program code */
#define PROTECT	0x3F7F 		/* code protection on */
#define UNPROTECT	0x3FFF 	/* code protection off */

/* Brown out detection enable */
#define BOREN	0x3FFF 		/* brown out reset enabled */
#define BORDIS	0x3FBF 		/* brown out reset disabled */

/* Master clear reset */
#define MCLREN	0x3FFF 		/* master clear reset function enabled */
#define MCLRDIS	0x3FDF 		/* master clear reset function disabled */

/* Power up timer enable */
#define PWRTDIS	0x3FFF 		/* power up timer disabled */
#define PWRTEN	0x3FEF 		/* power up timer enabled */

/* Watchdog timer enable */
#define WDTEN	0x3FFF 		/* watchdog timer enabled */
#define WDTDIS	0x3FF7 		/* watchdog timer disabled */

/* Oscillator configurations */
#define RCCLK	0x3FFF 		/* GP4 = clock out signal/GP5 = RC osc */
#define RCIO	0x3FFE 		/* GP4 = IO/GP5 = RC osc */
#define INTCLK	0x3FFD 		/* internal osc/GP4 = clock out signal/GP5 = IO */
#define INTIO	0x3FFC 		/* internal osc/GP4 = IO//GP5 = IO */
#define EC	0x3FFB 		/* external clock */
#define HS	0x3FFA 		/* high speed crystal/resonator */
#define XT	0x3FF9 		/* crystal/resonator */
#define LP	0x3FF8 		/* low power crystal/resonator */

Собственно это именно то, что я хотел понять, т.е. откуда эти обозначения берутся.

Ссылка на комментарий
Поделиться на другие сайты

Очень хорошо, я начинал изучение с книги Яценков В.С._Микроконтроллеры Microchip®. Практическое руководство__2002. Там сначала объяснялась аппаратная часть, а затем были главы по программированию. Не сразу все получалось.

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...