|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1. Введение
Hi-Tech PICC (http://htsoft.com) - полнофункциональный компилятор языка программирования C для микроконтроллеров фирмы Microchip, а именно для PIC10xxxx, PIC12xxxx, PIC16xxxx, PIC17xxxx. Основное преимущество составления программ на C перед ассемблером является намного более высокая скорость написания кода, который в свою очередь более нагляден и понятен. Например, необходимо сложить два числа и результат вывести в виде двоичного кода на порт B. На ассемблере это будет выглядеть следующим образом: movf A, w addwf B movwf PORTB А на C вот так: PORTB = A+B; Как видно, на C код получается более наглядным, не говоря уже о сложных условных переходах, циклах, арифметических вычислениях. Это, конечно, не значит, что можно полностью отказаться от ассемблера, однако во многих случаях, размер и быстродействие создаваемого компилятором кода вполне удовлетворительные. К тому же, имеется возможность вставлять в программу asm текст, например для процедур ввода-вывода. Кроме того, программа, написанная на C, может быть легко перенесена на другой тип контроллера, например на PIC18, Atmel AVR и т.д. 2. Установка Для работы с компилятором лучше сначала установить интегрированную среду разработки MPLAB (скачать можно с http://www.microchip.com), в которой содержится редактор исходного кода, симулятор, отладчик. Можно, конечно, и не устанавливать MPLAB, но имеющийся в составе PICC "DOS'овский" текстовый редактор очень не удобен. После того, как установили MPLAB, запустите файл инсталляции (скачать, ~7 Мб, версия 8.05PL1) и следуйте инструкциям на экране. На вопрос "Would you like to install the MPLAB 6 PICC Toolsuite Plugin?" нажмите "Да". Теперь можно приступить к созданию первой программы. 3. Первая программа на C Запускаем MPLAB. Вызываем мастер создания проектов (щёлкаем Project->Project Wizard...). Нажимаем Далее и выбираем тип микроконтроллера. В нашем случае это PIC16F628A. Снова жмём далее. Здесь выбираем Active Toolsuite : HI-TECH PICC Toolsuite и переходим к следующему шагу. В поле Project Name вводим имя будущего проекта, например led_pic, и указываем папку, которой будут храниться его файлы. Если указанной папки не существует, то будет предложено её создать. Нажимаем Далее, пропускаем очередной шаг и жмём Готово. Создадим текстовый файл с исходным кодом (File->New). Напишем простенькую программку для мигания светодиодом:
Сохраним файл (File->Save As) в папке, которую указали при создании проекта. Добавим программу к проекту (Project->Add Files to Project...) и нажмём кнопку Build All. Исходный код скомпилируется и в папке проекта появится HEX файл, который можно записать в контроллер и посмотреть, как это работает. Скачать проект. 4. Разбираем первую программу по строкам. Первая строка #include "pic.h". Определяет включаемые в программу файлы. В данном случае pic.h содержит информацию о микроконтроллере(адреса регистров и т. д.). Имя этого файла одинаково для всех кристаллов, компилятор автоматически выбирает нужные данные в зависимости от типа контроллера(который мы указали при создании проекта. Чтобы его изменить щёлкните Configure->Select Device... из главного меню). Во вложенных файлах могут содержаться подпрограммы, функции, константы. К примеру, для использования функции printf, которая будет рассмотрена позже, необходимо подключить stdio.h. #define служит для объявления так называемых макросов. Например, bitset(PORTB, 1) будет заменено на PORTB |= 1 << 1. Далее следует предопределённое имя функции main(), выполнение которой начинается после подачи питания. Сам текст её заключён в фигурные скобки и начинается с объявления переменных. Сначала указывается тип переменной, определяющий возможные значения, которые она может принимать и, соответственно, занимаемое ей место в памяти, затем имя переменной. В PICC доступны следующие типы данных:
Примечания: * По умолчанию тип char без знака и со знаком, если используется опция компилятора PICC -SIGNED_CHAR. ** Тип double по умолчанию имеет точность 24 бита, чтобы использовать 32-х битную точность, нужно включить опцию компилятора PICC -D32. Запись значений в регистры микроконтроллера осуществляется так же, как для переменных: имя_регистра = значение. Название и назначение регистров смотрите в datasheet на соответствующий МК (www.microchip.com, www.microchip.ru - на русском, но не на все контроллеры). Для удобства, значения, присваеваемые переменным, можно записывать, помимо десятичного, в двоичном, восьмеричном, шестнадцатеричном виде:
repeat: имя метки для оператора безусловного перехода goto. for - оператор цикла. В скобках указывается начальное значение переменной (если их несколько, то они перечисляются через запятую); условие, при котором будет продолжаться цикл (если более одного условия, они также перечисляются через запятую); операторы, выполняющиеся перед проверкой условия, т. е. после того, как выражение, находящееся в фигурных скобках будет выполнено. В данной программе это оператор увеличения значения переменной на 1: ++. При помощи макросов bitset и bitclr осуществляется установка - очистка бита регистра-защёлки порта микроконтроллера (установка на выходе лог. 1 или 0). Логические операции, обозначенные в макросе, интерпретируются компилятором, как ассемблерные команды bsf и bcf. 5. Вставка ассемлерного кода в программу. Делается это при помощи служебных слов asm("command"); если команда одна. Если их несколько, то они записываются между словами #asm и #endasm: if (PORTA == 0b00001111) asm("sleep"); else asm("nop"); ... a = 180; while (--a) { PORTB = a; #asm movlw 45 movwf _z btfss _PORTA, 4 movlw 90 movwf _x #endasm PORTC = x; PORTD = z; } Переменные, указываемые в ассемлерном коде должны быть глобальными (описанными вне процедур) и начинаться с символа "_". Собственно программированию на C для ПК посвящено много книг, с помощью которых вы можете ознакомиться с программированием на этом языке, поскольку компилятор PICC соответствует стандарту ANSI C (исключение - не поддерживается рекурсия). Например, книга "Язык С" Б.В. Керниган, Д.М. Ричи. Скачать электронную версию. 12 февраля 2005 г. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Copyright 2004 by ICdevelop Group®. |