Обучение : Программирование на Си для PIC


Программа №1. «Рыба».

С чего всё начинается? Мы говорили про исходник с расширением *.с. У нас его нет. Создаем. Нажимаем меню FileNew. Появляется окно с именем Untitled. Теперь нам надо сохранить этот файл под определенным именем в определенном месте и подключить к проекту. Традиционным именем главного Си-файла является имя «main.c». Однако, MPLAB великолепно работает и с другими именами. В предыдущем разделе мы назвали проект как Test1. Файл исходника называем именем проекта (это будет имя «Test1.c»). Нажимаем меню File – Save As… и приходим в путь C:\Program Files\Microchip\Project\Test1 . Далее вводим имя файла Test1.c (внимание – обязательно вручную дописываем через точку расширение *.c) и не забываем поставить галочку Add File To Project (Добавить Файл В Проект) + Сохранить.

 

 

 

Представим ситуацию, что вы забыли поставить эту галочку. Не беда.

 

 

         

 

Правой кнопкой мыши в окне дерева проекта щелкаем на ветке Source File (англ. – источники; сленг – сырцы) и выбираем пункт Add Files…, затем находим и открываем наш файл Test.c. В дереве появляется наш файл. Это признак того, что файл подключен к проекту.

 

В итоге по пути C:Program FilesMicrochipProjectTest1 у нас сформируется 4 файла с одним и тем же именем, но с разными расширениями (Test1.mcp , Test1.mcs , Test1.mcw , Test1.c).

(Пуск – Настройка – Панель управления – Свойства папки – закладка Вид – снять галочку Скрывать расширения для зарегистрированных типов файлов).

 

Ну а теперь пишем программу «Рыба».

 

#include <pic.h>

 

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

 

void main (void)

{

}

 


Этот текст набираем в окне Test.c и затем нажимаем F10. Происходит компиляция и открывается окно Output. Если внизу в окне Output вы видите фразу типа
 

 

 

Loaded C:Program FilesMicrochipProjectTest1Test1.cof.

BUILD SUCCEEDED: Thu Apr 23 10:17:35 2009

 


то вы успешно откомпилировали свою рыбу. Это должно нас радовать. Нами создана первая прошивка (hex-файл), которая располагается в папке с проектом.

 

 

Что делать с получившейся  рыбой? Разбирать по косточкам.

Строго говоря, для успешной компиляции было бы достаточно текста.

main ()

{

}

 

Текст можно записать в одну строчку
void main (void){}

или так

main(){}
 

Эти особенности мы разберем чуть позже.
 

Так, первая строчка #include <pic.h> даёт указание компилятору, что всё что есть в файле pic.h «принять к сведению». И этот файл находится по пути C:\Program Files\HI-TECH Software\PICC9.50\include . Этот файл иначе называют заголовочным файлом. Давайте откроем pic.h из MPLAB. Когда мы создавали проект с помощью визарда, мы выбирали кристалл. В момент нажатия F10 компилятор «смотрит», какой мы выбрали кристалл с помощью визарда, затем по указанию  #include <pic.h> зачитывает текст из pic.h , в этом тексте он «спотыкается» на записи
 

#if defined(_16F627A)   || defined(_16F628A)    || defined(_16F648A)

#include    <pic16f62xa.h>
 

и уходит в файл pic16f62xa.h. Файл pic.h можно закрыть и затем открываем файл pic16f62xa.h. Зачем я всё это рассказываю? Чтобы вы осознано понимали взаимосвязь всех записей.

 

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

__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 отключен сторожевой таймер.


Что это значит и для чего – читаем даташит PIC16F627_628.pdf стр.88.
 

Необходимо отметить, что биты конфигурации интегрируются в прошивку (у микроконтроллеров AVR это приходится делать вручную весьма запутанной установкой фьюзов). Если мы не конфигурируем МК, то будут установлены биты конфигурации по-умолчанию. Умолчания описаны в даташите. Но мы можем посмотреть в программе эти умолчания через меню Configure - Configuration Bits

 

 

 

 

Сняв галочку, можно переопределить конфигурацию через вполне внятные обозначения. Установив галочку, настройки конфигурации будут интегрированы в прошивку. Это относится к случаю, если строка конфигурирования отсутствует в тексте. Приоритет по выбору битов конфигурации отдаётся строке конфигурации, а не этому окну настройки.
 

Рекомендую здесь же зайти в меню ConfigureSelect Deviceгде можно выбрать другой кристалл. Вам это может пригодиться, если вы захотите партировать (перенести) этот проект на другой кристалл, например, на PIC16F628 (без индекса A), или любой другой подходящий по количеству ножек и функций. Но это частный случай. Просто примите на заметку.
 

Я категорически не рекомендую надеяться на любые умолчания, описанные в даташите. Все параметры конфигурации, которые только можно указать – указывайте. Если по каким-то причинам вы захотите изменить биты конфигурации для имеющейся прошивки, то в программе для прошивания (например, в айси-проге IC-Prog) вы можем видеть нечто подобное (см. ниже). Лучше один раз правильно прописать биты конфигурации в исходнике, чем каждый раз напрягать мозг и вручную проставлять галочки в «швейной» программе.

 

 

Чуть выше мы помянули RA6. У вас возник вопрос – что такое RA6. Это одна из цифровых линий МК. На стр.3 даташита картинки с мнемоническими обозначениями линий. RA6 , означает «шестая линия порта А». О портах вы прочтете чуть далее.

Не менее важным элементом в строчке конфигурации является символ точки запятой «;» в конце предложения. Без него не компилируется. Этот символ является указателем конца. Будьте внимательны.
 

Наконец мы с вами добрались до нашей первой, но самой важной функции под названием main (англ. – «основа»).
 

void main (void)

{

}

 

Что такое функция? Это совокупность команд, обычно предназначенных для решения определенной задачи.


<<< назад далее >>>

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

 








 
 
 

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