![]() | |
![]() |
Off-line версия журнала "Sources.RU Magazine". Выпуск "Декабрь 2004" |
· От редактора · Создание сайта · Программирование на IAR · Обзор UPS · mIRC + Delphi = WinAmp Plugin · Многоязыковое приложение · Передача файлов через сокеты · H.323: Обзор архитектуры · Введение в KDevelop · Linux Live CD - Основы · Microsoft Speech API — Синтез речи |
Программирование микроконтроллеров на Си. Программирование в среде IAR Embedded Workbench for Microchip PICmicro 16/17.Автор: bizarНемного о IARКак и во всех статьях по программированию начинают с самого лёгкого, например простой программой "Hello world" так и в моей первой статьи я начну с простого, работа со светодиодами. Но для начала я вас дорогие читатели посвищу в среду IAR. IAR - это компилятор для микропроцессора с Гарвардской архитектурой (два адресных пространства - для кода и данных) и для более эффективной работы в ограниченных условиях микроконтроллеров. Также следует отметить возможность описывать внешние события и управлять средой и симулятором с помощью специального скриптового языка. Также очень хорошо реализована отладка Си-приложений - то есть удобно просматривать структуры данных, как глобальные, так и локальные, и управлять симулятором на основе структуры Си-кода. Скачать IAR можнос сайта производителя www.iar.com Установка и настройка IAR для PicСкачиваем пакет IAR Embedded Workbench for Microchip PICmicro 16/17 и устанавливаем его. Открываем IAR Embedded Workbench смотрите ниже внешний вид программы. ![]() Нажимаем меню File->New..., выбираем source/text, вставляем исходник, нажимаем File->SaveAs..., вводим имя в виде имя_файла.c , нажимаем Сохранить. Если в проекте в разделе Common Sources этот файл не появился, то нажимаем меню Project->Files..., выбираем этот файл, нажимаем Add, затем Done. Файл в проекте. Дальше - компиляция. В Project->Options в General нужно указать путь к "Процессор сетап файл" pic16f84. (ну или тот микроконтроллер с которым вы работаете.) IAR должно выдать что-то типа: Rebuilding target Debug... tit.c Linking... Первые программыДля начало составим схему с 10 светодиодами: ![]() #include Далее для разнообразия подкину исходник Бегущего огня, то есть светодиоды будут загораться по очереди. Все вопросы которые у вас возникнут задавать на форуме сайта где размещена статья или почитайте в ссылке которая указана ниже, там сто пудов найдёте ответ на свой вопрос. Бегущий огонь: #include А вот и сама ссылка где родилась эта идея: http://forum.sources.ru/index.php?showtopic=42431&st=0. Теперь я вам растолкую как указывать на вход или выход (выбирать нужную ногу) чтобы было понятней вот строчка исходника: PORTA &= 0xfe Что за 0xfe? Это и есть адрес нужной ноги микроконтроллера. Объясню вам на примере микроконтроллера pic16f84 ![]() RB, RA это и есть обозначение портов для настройки ввода/вывода. В исходнике они обозначаются PORTA (это обозначение всех портов RA), PORTB (это обозначение портов RB). Далее идёт номер порта 0xfe это номер порта RB0. Переводим у 0xfe, fe из шестнадцатеричной в двоичную систему исчисления это будет 11111110 считаем число всех цифр это будет восьмизначное число и у нашего микроконтроллера восемь портов ввода/вывода RB0-RB7 значит это число (fe) относиться к порту RB так как у RA всего пять портов RA0-RA4. Теперь смотрим нолик у числа 11111110 находиться в начале числа вот это и говорит что это первый порт на RB, не трудно догадаться что это RB0. Если бы нолик стоял вторым числом 11111101 то это был бы порт RB1 и т. д. Также у портов RA. Для портов RA: PORTA = 0x1f;//записываем во все разряды PORTB единицы (11111) PORTA = 0x1е;// записываем в RB0 0, в остальные разряды 1 (11110) PORTA = 0x1d;// записываем в RB1 0, в остальные разряды 1 (11101) PORTA = 0xb;// записываем в RB2 0, в остальные разряды 1 (11011) PORTA = 0x17;// записываем в RB3 0, в остальные разряды 1 (10111) PORTA = 0xf;// записываем в RB4 0, в остальные разряды 1 (01111) Для портов RB: PORTB = 0xff;//записываем во все разряды PORTB единицы (11111111) PORTB = 0xfе;// записываем в RB0 0, в остальные разряды 1 (11111110) PORTB = 0xfd;// записываем в RB1 0, в остальные разряды 1 (11111101) PORTB = 0xfb;// записываем в RB2 0, в остальные разряды 1 (11111011) PORTB = 0xf7;// записываем в RB3 0, в остальные разряды 1 (11110111) PORTB = 0xef;// записываем в RB4 0, в остальные разряды 1 (11101111) PORTB = 0xdf;// записываем в RB5 0, в остальные разряды 1 (11011111) PORTB = 0xbf;// записываем в RB6 0, в остальные разряды 1 (10111111) PORTB = 0x7f;// записываем в RB7 0, в остальные разряды 1 (01111111) В написании статьи огромное участие принимал: trainer и potor. |
![]() | |
Журнал "Исходники.RU". Copyright (c) 2004 by Исходники.RU. Designed by Mastilior. |