Гость hsl Опубликовано 5 Сентября, 2012 в 17:02 Жалоба Поделиться Опубликовано 5 Сентября, 2012 в 17:02 (изменено) Доброго времени суток! Пытаюсь разобраться с программированием 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, или я что то не так понимаю? Изменено 5 Сентября, 2012 в 17:05 пользователем hsl Ссылка на комментарий Поделиться на другие сайты Поделиться
if33 Опубликовано 5 Сентября, 2012 в 18:47 Жалоба Поделиться Опубликовано 5 Сентября, 2012 в 18:47 Сергей, скачай _https://yadi.sk/d/WcHPCeYIYDNa - русский даташит стр 88. Слово конфигурации состоит из 14 бит и находится по адресу 2007. __CONFIG (INTIO & UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS означает, что эти БИТЫ установлены в единицу, остальные биты не установлены в единоцу (т.е. ноль) Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость hsl Опубликовано 5 Сентября, 2012 в 19:37 Жалоба Поделиться Опубликовано 5 Сентября, 2012 в 19:37 (изменено) ...UNPROTECT & LVPDIS & BOREN & MCLRDIS & PWRTEN & WDTDIS означает, что эти БИТЫ установлены в единицу, остальные биты не установлены в единоцу (т.е. ноль)... Это теперь понятно, непонятно где найти весь перечень этих терминов, а даташит этот и не только этот я смотрел, нет там таких терминов, можно догадаться конечно, что например UNPROTECT это биты защиты, но которые из них?, и почему они так обзываются, и где брать полный перечень названий этих битов? Или не заморачиваться с этими названиями, а тупо выбрать побитно, то что нужно и записать в виде одного шестнадцатиричного числа? Изменено 5 Сентября, 2012 в 19:40 пользователем hsl Ссылка на комментарий Поделиться на другие сайты Поделиться
if33 Опубликовано 6 Сентября, 2012 в 04:16 Жалоба Поделиться Опубликовано 6 Сентября, 2012 в 04:16 Описание можно посмотреть здесь _https://radio-hobby.org/modules/news/article.php?storyid=934, но в принципе Вы всегда можете изменить эти биты прямо в программаторе, при программировании. Следует учесть, что у разных микроконтроллеров эти биты могут отличатся. Самое главное выставить правильно тактовый генератор и бит выбора работы вывода –MCLR, чтобы микроконтроллер запустился. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость hsl Опубликовано 6 Сентября, 2012 в 04:54 Жалоба Поделиться Опубликовано 6 Сентября, 2012 в 04:54 Описание можно посмотреть здесь... Описание есть и в даташитах и в общем довольно доходчивое, но ответа на мой вопрос по ссылке нет. ...Следует учесть, что у разных микроконтроллеров эти биты могут отличатся... Вот, как раз об этом в приведенной мной цитате в первом посте и говорится Согласитесь, удобнее написать осмысленные фразы, чем слабопонятные цифры. Если мы захотим перенести программу на другой кирпич, то там фразам могут соответствовать совершенно другие цифры. Таким образом, фразы позволяют безболезненно мигрировать на другие кристаллы (с известными оговорками, т.к. у разных кристаллов может быть свой набор конфигурационных битов, но имена фраз по функциям будут совпадать Биты разные, но названия то одни и те же, вот по этому я и хочу разобратся с ними, только не пойму принцип построения этих фраз и откуда они вообще берутся, вот например UNPROTECT, по смыслу понятно, что защита не включена, но какая? По даташиту за это отвечают 3 бита, что из этого оключает UNPROTECT, все? А если нужно отключить не все, как тогда будет выглядеть эта команда? Ссылка на комментарий Поделиться на другие сайты Поделиться
if33 Опубликовано 6 Сентября, 2012 в 09:40 Жалоба Поделиться Опубликовано 6 Сентября, 2012 в 09:40 (изменено) Надо открыть английский даташит не Вашу конкретную микросхему и там, к примеру 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 Изменено 6 Сентября, 2012 в 10:03 пользователем if33 Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость hsl Опубликовано 6 Сентября, 2012 в 13:04 Жалоба Поделиться Опубликовано 6 Сентября, 2012 в 13:04 В разных программах и компиляторах синтаксис разный и увы не совместимый, я как уже упомянул выбрал связку 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 */ Собственно это именно то, что я хотел понять, т.е. откуда эти обозначения берутся. Ссылка на комментарий Поделиться на другие сайты Поделиться
if33 Опубликовано 6 Сентября, 2012 в 13:18 Жалоба Поделиться Опубликовано 6 Сентября, 2012 в 13:18 Очень хорошо, я начинал изучение с книги Яценков В.С._Микроконтроллеры Microchip®. Практическое руководство__2002. Там сначала объяснялась аппаратная часть, а затем были главы по программированию. Не сразу все получалось. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти