Так как пользуюсь я компиляторм HI-TECH (чего и Вам советую), опишу начало работы с ним.
Качаем компилятор HI-TECH PICC18 (для 18 серии), устанавливаем его.
Создаём папку для проекта, назовём её к примеру ”leds”. Открываем MPlab (надеюсь он у Вас уже установлен). Создаем проект, меню project->project wizard…
Перед Вами вылезает окно с приветствием.
Мысленно приветствуемся и жмём Далее
Вылезает окно выбора контроллера. Выбираем PIC18F252 и жмём Далее
Далее будет окно с выбором компилятора.
В списке Active Toolsuite нужно выбрать HI-TECH PICC18
Жмём Далее.
Перед Вами окно с вводом имени проекта и выбором пути к директории проекта.
Название проекта пишем leds и выбираем путь к созданной нами директории.
Жмём Далее.
Вылезает окно с предложением добавить в проект файлы. Нам добавлять ничего не нужно, по этому жмём Далее и в следующем окне жмём Готово.
Всё, проект создан.
Теперь нам нужно добавить в него новый файл. Лезем в меню File->Add New File to Project
вибираем нашу папку и пишем в имени файла main.c
Жмём Сохранить.
Теперь он добавлен в список файлов проекта и вылезло окно редактора.
Пишем первую программу.
Нашей программой будет бегущий светодиод на порте В.
Первой строчкой нашей программы будет
#include "pic18.h"
Этим мы подключим к проекту нужный файл, в котором описаны все регистры спец. назначения нашего МК.
Далее задаём биты конфигурации
__CONFIG(1, 0x02FF); __CONFIG(2, 0x0EFF); __CONFIG(4, 0xFF80);
Осциллятор – XT, WDT выключен и т.д… Подробнее о конфигах можно узнать в даташите
Теперь напишем функцию с которой наша программа будет начинать выполняться. Она всегда имеет имя main().
void main(void) { }
Затем, в этой функции проинициализируем порты
TRISB=0; // Все пины порта В на выход PORTB=0; // Выводим в порт В все нули
Далее нам нужно программу зациклить, так как она ни когда не должна закончиться. Делается это с помощью оператора while(). Он выполняет код, находящийся в фигурных скобках {}, пока в круглых скобках () условие равно 1.
while(1) // Бесконечный цикл { }
Теперь нам нужно сделать задержку, с которой у нас будут бегать светодиоды.
Для этого создаём новую функцию, перед main(). Назовём её delay().
И пишем в ней код :
unsigned long i; // Создаём 4-х байтную переменную i=100000; // Присваиваем переменной значение 100 000 while(i>0) // Пока переменная i больше ноля { i--; // Вычитаем из переменной 1, т.е. декремент. }При частоте кварца 10 Мгц, задержка получилась приблизительно 0.5 Сек. Если кто-то хочет по точнее, поиграйтесь с числом 100000.
Едем дальше…
Бегущий огонь будем делать методом сдвига 1-чки в порте. Запишем в 0-вой бит порта 1-чку, и будем её двигать влево пока порт не станет равным нолю. И так по кругу.
Переходим к главному циклу (который бесконечный) и пишем в нём код:
if(PORTB==0) { PORTB=1; }Этим условием мы проверяем порт на 0. И если условие верно, записываем в порт 1-цу.
Далее вызываем ф-ию задержки
delay();Затем сдвигаем порт влево.
PORTB = PORTB<<1;
В итоге main.c у нас примет такой вид:
#include "pic18.h" __CONFIG(1, 0x02FF); __CONFIG(2, 0x0EFF); __CONFIG(4, 0xFF80); void delay(void) { unsigned long i; // Создаём 4-х байтную переменную i=100000; // Присваиваем переменной значение 100 000 while(i>0) // Пока переменная i больше ноля { i--; // Вычитаем из переменной 1, т.е. декремент. } } void main(void) { TRISB=0; // Все пины порта В на выход PORTB=0; // Выводим в порт В все нули while(1) // Бесконечный цикл { if(PORTB==0)// Проверяем порт на 0, { PORTB=1; // и если равен, то пишем туда 1-чку } delay(); // Вызываем задержку PORTB = PORTB<<1; // Двигаем порт влево на 1 позицию } }
Затем жмём в Мплабе кнопку Build All и у нас готовая прошивка, которую можно опробовать в железе.
Прикрепляю только что созданный нами проект + проект протеуса, что бы посмотреть наглядно работу программы.
leds.rar (25,5К)
Количество загрузок:: 351
Вот и всё, пробуем, задаём вопросы….