Язык си для pic микроконтроллеров + видео обзор

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

Язык си для pic микроконтроллеровЯ ни раз задавал сам себе вопрос, с какого бы языка начинать изучение. Твёрдо отвечаю – Си, т.к. в ассме много рутины и условностей, что лишает творчества. Постоянно надо проверять и перепроверять себя, а не забыл ли ты то или иное действие. В ассме есть свои неоспоримые преимущества, но о них потом, т.к. это почувствовать можно только на практике. C языком определились. Реально Си учить не надо. Я вам так скажу – мой Си это условно десять пазлов и море логики, которые я комбинирую. Можно ничего не знать, важно понимать механизм, т.е. что на что влияет и к чему приводит. Это как игра в тетрис в котором нужно лишь крутить фигуры и плотнее их ставить. Если вы играли в тетрис (не уверен что вы знаете эту игру), то вы легко поймете что такое Си.

Далее о макете (макетной плате). И на эту тему мне задавали вопрос. И пришел к выводу, что человеку, который не первый день в электронике делать какую-то плату или платку с кнопками и светодиодами не интересно. Школьнику мигалка, пищалка и кнопка будут интересны. Но не взрослому человеку. Тем более всё это можно сделать в Протеусе. Протеус изучается за 30 мин. Тогда вы меня спрашиваете, а что же сделать? Сделать практическое устройство по которому у вас будет цель – цель доделать это устройство до конца. Это самый главный психологический стимул.

Из каких компонентов должно быть устройство? Несколько кнопок (хоть десяток), семисегментные индикаторы 2-5 разрядов, микроконтроллер PIC16F628A (или без А) (на этом микроконтроллере можно много фантазировать), ну и оставить 1-2-3 свободные линии, чтобы что-то внешнее подключить или управлять. У меня всё начинается с идеи и вопроса что собрать и подключить к МК, и сразу думаю, а как это будет подключаться к МК и может ли работать такое подключение. Ну и собственно процесс рисования печатной платы идет в параллели. Необходимо знать и учитывать при рисовании, что не все ножки одинаково работают. И именно это важное начальное условие расписывается в самоучителе с самого начала.

В связи с этим ваша задача сейчас по моему самоучителю разобраться с выводами (ножками), как, какие, в какую сторону, при каких условиях работают эти вывода. При всей простоте задачи вы столкнетесь с массой других несложных вещей, которые нужно изучить.

Что в итоге вы получите?
1) Понимание как, что и с чем соединять.
2) Как управляются эти соединения на элементарном уровне.
3) Начнете привыкать к интерфейсу среды разработки.
4) Начнете изучать структуру текста программы.
5) Начнете понимать механизм работы программы.

Важное условие – вдумчиво читать подряд. Вдумчиво и подряд. Возможно перечитывать.
Мир вам.

Источник

Программирование PIC на С (CCS PIC-C Compiler)

Язык си для pic микроконтроллеров

Давайте напишем для микроконтроллера PIC12F629 классическую «стартовую» программу – мигание светодиодом по нажатию кнопки. В качестве компилятора применим CCS PIC-C Compiler. Я использую версию 4.108, все скриншоты представлены с нее. Для тестирования программы использован ISIS Proteus 7.5.
Схема для данного примера выглядит так:

Язык си для pic микроконтроллеров

Запускаем программу.
Самый простой и быстрый способ начать написание первой программы – использовать мастер создания проектов. Для этого переходим на вкладку меню Project на ней щелкаем по значку PIC Wizard.

Язык си для pic микроконтроллеров

Вначале запустится диалог сохранения проекта, в котором Вам предстоит указать место сохранения и имя создаваемого проекта. Назовем проект led_c. Далее запустится сам мастер создания проекта. При запуске мы попадаем в подменю General.

Язык си для pic микроконтроллеров

Здесь на вкладке Options изменим некоторые свойства.
В списке Device выберем тип нашего котроллера PIC12F629.
Напротив, в окошке Oscillator Frequency укажем частоту тактового генератора в Гц. В нашем проекте мы будем использовать внутренний тактовый RC генератор, частота которого 4 Мгц.
В блоке Fuses в списке выберем тип тактового генератора или источник тактовых импульсов, Internal RC Osc, no CLKOUT, этим мы и определили использование внутреннего тактового RC генератора. (no CLKOUT означает, что «наружу», из микроконтроллера, тактовый сигнал не будет выводится).
И последнее, что сделаем, уберем галочку напротив Master Clear pin enabled, этим мы ножку сброса освободили от своей «обязанности», задействовав схему внутреннего сброса. А освободившуюся ножку можно будет, в случае необходимости, использовать для наших нужд.
На вкладке Code можно посмотреть код созданный мастером.
Все, пока больше ничего не трогаем, нажимаем ОК, мастер завершит работу, создав наш проект, готовый для написания программы.
Возвращаемся в компилятор и на вкладке меню Project выбираем значок Project и в открывшемся диалоге указываем на созданный нами проект lcd_c. Откроется файл исходного кода нашего проекта, созданный мастером. Посмотрим, что в нем:

В самой первой строке указывается файл led_c.h, в котором мастер прописал указанные нами настройки конфигурации микроконтроллера, его рассмотрим ниже.
Далее следует —
void main()
<

>

— так указывается начало программы, код самой программы размещается между двумя фигурными скобками.
Следующие 5 строк описывают настройки по умолчанию, в данном примере они нас не интересуют если смущают, их можно убрать, т.к. в контроллере после сброса они выставятся автоматически в такое состояние.
// TODO: USER CODE!! — здесь нам предлагают вписать код нашей программы.

Рассмотрим файл led_c.h. Он находится в папке, куда мы сохранили проект. Откроем его стандартным блокнотом.

Мы видим код, настройки конфигурации контроллера, который мы могли видеть при работе с мастером создания проектов, на вкладке Code, подменю General. Также здесь подключается файл 12F629.h, в котором для компилятора прописаны доступные в этом контроллере функции. Строка #use delay(clock=4000000) — указывает частоту тактовых импульсов, что важно для формирования временных задержек, если таковые потребуются в программе. Удалим строки

т.к. они могут вызвать сбой при компиляции программы. Закроем блокнот, сохранив файл.
Давайте впишем код нашей прогаммы там, где нам предлагали это сделать. Наша программа должна выполнять мигание светодиодом, пока не нажата кнопка. Кнопку нажали — не мигаем, отпустили — мигаем. Код следующий:

Рассмотрим как работает программа и код подробнее:
while(1)
<

>

— таким образом организуется «вечный» цикл, программа будет «крутиться» внутри него пока что-либо не остановит ее (например — разряд батареи). В скобках указывается условие нахождения в цикле.
while(input(PIN_A0))
<

>

— еще один цикл, только он будет длиться пока не нажата кнопка, т.е. на входе котроллера A0 (по ДШ – GP0) будет лог. 1. Команда input(PIN_A0) считывает состояние указываеммой ножки, автоматически переводя ее в режим ввода.
output_high(PIN_A1);
delay_ms(500);
output_low(PIN_A1);
delay_ms(500);

— эти 4 строчки обеспечивают мигание светодиода. В первой строчке output_high(PIN_A1) команда на указываемую ножку выводит лог. 1(high), зажигаем диод. Далее следует задержкав мс, число мс указанно в скобках. Если нужна задержка в с или мкс то будет delay_s или delay_us соответственно. Оставшиеся 2 строчки кода аналогичны — гасим диод, делаем задержку.
output_low(PIN_A1);
— эта комманда гасит светодиод, устанавливая на ножке А1 лог. 0 (low).
В цлом, прогамму можно «прочитать» так: в «вечном цикле (while(1)) делается следующее: если на входе (ножке) А0 лог. 1 работает цикл мигания (while(input(PIN_A0))), как только нарушено условие нахождения в цикле, т.е. на входе А0 станет лог. 0, мы выходим из цикла и переходим к следующей комманде — гасим светодиод. Вот так программа и будет работать. Для наглядности можно прикинуть блок-схему:

Источник

Электроника для всех

Блог о электронике

Шпак Ю.А. Программирование на языке C для AVR и PIC микроконтроллеров

Язык си для pic микроконтроллеров

Вот что я нарыл. Собственно, других книг по GCC я больше и не встречал. Одно время был классный мануал в виде chm файла, но потом он куда то делся и больше я его не видел. Так что качайте что есть 🙂 Тут вначале рассмотрен сам язык Си, хуже конечно чем в оригинале от Кернигана и Ритчи, но зато обьемом поменьше. А дальше идет описание языка Си уже с упором на микроконтроллеры. Довольно кратко, но есть примеры, а это главное. Для PIC описывается компилятор CCS-PICC, а для AVR разобран GCC WinAVR.
Особо меня тут порадовал справочник в конце книги, где кратко расписаны все функции стандартной поставки CCS-PICC и GCC WinAVR с примерами. В общем, выбора у вас нет, раз ленитесь писать на ассемблере, то придется разбираться вот по этой книжке 🙂

23 thoughts on “Шпак Ю.А. Программирование на языке C для AVR и PIC микроконтроллеров”

я во всех ваших спорах «си против асма» уже участвовать не хочу )
но может кому-нить си на 4к доступной памяти и пригодится…

зы! хотя я лично, когда юзал отладочную платку с армом9 и линухой на нём, использовал этот самый си там аж на процентов 90 )

ззы! с програмерством на вижеле, гэцэцэ и всех средах, вплоть до эклипса, знаком )

Ну на армах и выше си использовать самое то. Тем более когда есть ось.

ну надеюсь, что я не догматик…
я прекрасно разбираюсь даже в тех вещах, где удобнее использовать билдер вместе вижела, асм вместо си и даже лисп вместо всех других языков, вместе взятых )

си для армов — это компромисс цены, времени и производительности. всё как в физике — выигрыш в усилении компенсируется устойчивостью и всё такое…

Ну тут спорить особо не стоит, конечно. Но как мне кажется — основное преимущество С — это переносимость программ на разные контроллеры — только HAL заменить и можно спокойно использовать программу несколько раз, а не изобретать велосипед заново.
Алексей

Переносимость — понятие растяжимое… (В принципе, и из любого приемника, даже детекторного, можно сделать телевизор, добавив недостающие детали).
Перенести программу, например, c Меги 16 на 32 — и в ассемблере не проблема.
А, к примеру, с АРМ на Тини — никакой С не поможет.
Ну, а с определенными оговорками — любой язык высокого уровня обладает переносимостью, если не использовать абсолютные адреса. Но только поклонники третьей буквы латинского алфавита упорно твердят об этом, доводя, в общем — то, неплохую идею, до абсурда. В то же время даже перенести программу для одного и того же процессора просто из компилятора Си одной фирмы в компилятор Си другой — частенько задача не для слабонервных. Да и написать новую программу с нуля гораздо лучше и проще, чем приспосабливать куски всякого старья. Иначе всю жизнь будешь решать задачи по шпаргалкам, копируя раз за разом одни и те же ошибки.

В принципе — согласен, что в пределах одного семейства процессоров переносить иногда сложно, но под переносимостью, в данном случае, я имеел ввиду переносимость кода в пределах абсолютно разных платформ. Скажем — какие либо функции, которые и под виндовсом и под линуксом и на арме одинаковую функциональность имеют и в авр их запихать можно не переделывая. Вот именно об этой переносимости все поклонники третьей буквы латинского алфавита и говорят, чтобы не изобретать заново какой либо алгоритм, который уже сделан и отлажен много раз.
А про «написать с нуля» попробуйте объяснить менеджеру проекта, который требует рабочую программу уже вчера, а с вашим «переписать с нуля» он ее получит через три месяца, но с уже новыми багами, которые потом столько же отлавливать надо.
Алексей

Всегда считал, что переносимость, это когда программа, которая компилируется и работает одинаково на нескольких платформах. Если надо что-то переписывать, то это портирование, а не переносимость.

Ну, межплатформенная переносимость реально возможна только на языках очень высокого уровня, полностью абстрагированных от железа, вроде Явы, и то не всегда. На микроконтроллерах же привязка к железу настолько жесткая, что даже перенос в пределах одного семейства требует некоторых доработок, а уж между контроллерами разных фирм — тем более. Например, похожие вроде таймеры разных контроллеров, например, PIC и AVR, в разных режимах ведут себя по разному, могут иметь разные пред- и пост- делители, режимы захвата, и прочее. Или, к примеру, быстродействие предделителей. Почти любой PIC, независимо от тактовой частоты, способен считать с внешнего входа до 70-80Мгц, для AVR — только единицы МГц (реально до 1-2). Попробуйте перенести с PIC на AVR программу популярного частотомера Денисова, хоть на асме, хоть на Си. (Я уж не говорю о том, что на Си программа по тому алгоритму вообще нормально работать не будет из за невозможности точно просчитать и откалибровать время работы разных веток из за интенсивного использования стека и непредсказуемой «оптимизации»).
Лично я понимаю переносимость только на уровне идеи, алгоритмов, и то с учетом вышеупомянутого.
А простая перекомпиляция листинга под другой контроллер — явление редкое. Только, если просто использовать аналогичный, но с большей памятью, или больше портов (Например, c Меги 16 на 32, или с PIC16F873 на 876,877).
А, к примеру, с Меги на PIC или Моторолу — проще заново… Если, конечно, программа сложнее, чем «HELLO, WORLD!».

Про привязку к железу скажу так — надо правильно писать программы. А именно — разделять сам алгоритм от уровня работы с железом — в народе называемом HAL — Hardware abstraction level. Это еще в школе проходят. И если обратить внимание на мой самый первый коммент тут — там написано: “…только HAL заменить и можно спокойно использовать программу…”. И если, например, в гермашке, на фирме, пишушей софт для автомобилей, вы будете делать программы, которые даже намека на HAL не имеют — долго не продержитесь. Вылетите сразу после того, как вашей проге Code review сделают. И не важно, что прога работает лучше и быстрее. На многих фирмах Code review — в простонародии это просмотр твоего кода посторонними для этого проекта, но знающими толк в программировании, людьми — обязательный этап выпуска ПО.

у нас эти люди называются «нормоконтроллёрами». самые важные люди в инсте и на производстве. по поводу программ — это и подсчёт числа отступов, и необходимые по СТП значки и символы (не комментарии, между прочи). для каждой функции — пояснения на пол-страницы, чтобы они поняли. они — это женщины-старушки от 50 и выше, которые компутеры увидали года 3-4 назад впервые.

а т.к. у нас каждый чел пишет проги от 100к строк и выше по одиночке, то наше руководство решило, что группы тестеров нам не нужны, а нужны умудрённые годами НК. уж они то лажу не пропустят.

доходило до того, что по СТП текст проги надо формлять в utf8. по мнению нормоконтроллёрши — это означает, что в каждом файле вначале должна быть надпись типа «text = utf8», а не то, что это должно значить на самом деле. некоторые перцы шли на принцип, оформляли как треба по ОСТам и по полгода пинались служебками, отвечая на вопросы «почему мой блокнот показывает крякозябры вместо русских буковок».

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

зы! на такие нюансы, вроде «я принёс hex файл, а нормоконтроллёрша кликает по нему в проводнике и не может понять, почему не начинает на её виндовс мигать светодиодом, сигнализирующим об начале теста-калибровки» и всё такое согласно руководству оператора, я уже внимания не обращаю )

Ну на это я ничего не скажу. Скажу лишь, что у нас CodeReview делается не на проверку отступов, а на нахождение логических ошибок и проверяющего программер обязан сам выбрать из своих коллег! Т.е. проггер сам заинтересован в том, чтобы его код смотрел человек знающий то, на что он смотрит. А то, что у вас твориться — так это уже проблемы организации процесса, т.е. менеджмента и руководства — тут я только могу развести руками, и надеятся, что народ у вас может быть когда нить поумнеет. Кстати — менеджеры проекта тут — это бывшые проггеры — которые вкурсе, как программировать, и которые до менеджмента написали не мало строк работающего кода!

Источник

Программирование на языке C для AVR и PIC микроконтроллеров (2-е изд.) +CD

Язык си для pic микроконтроллеров

Часть I. Архитектура микроконтроллеров AVR

Глава 1. Восьмиразрядные микроконтроллеры AVR
Семейства восьмиразрядных микроконтроллеров AVR
Отладочная плата
Схема базового монтажа
Структура микроконтроллеров AVR
Программирование памяти
Технология picoPower

Глава 2. Семейство AVR ATxmega
Обзор возможностей микроконтроллеров ATxmega
Организация памяти семейства ATxmega
Контроллер прямого доступа к памяти
Система обработки событий
Система синхронизации
Счетчики реального времени
Модуль питания от батареи
Обработка прерываний
Аналого-цифровое преобразование
Цифро-аналоговое преобразование
Аналоговый компаратор
Средства шифрования
Модуль обмена данными по инфракрасному каналу

Часть II. Компиляторы и средства разработки для микроконтроллеров AVR

Глава 3. Компилятор WinAVR

Глава 4. Среда разработки AVR Studio
Эмуляция
Окно Memory
Окно Register
Окно Watch
Отладка программы
настройка параметров имитатора
Создание проекта и компиляция программы

Глава 5. Среда разработки CodeVisionAVR
Компиляция и построение проекта
Создание проекта с помощью мастера CodeWizardAVR
Создание новых файлов с исходным кодом
Отладка программы

Глава 6. Программаторы для микроконтроллеров AVR
Программные средства для программирования микроконтроллеров

Часть III. Архитектура микроконтроллеров PIC

Глава 7. Восьмиразрядные микроконтроллеры PIC
Общие аспекты архитектуры восьмиразрядных
микроконтроллеров PIC
Семейство микроконтроллеров PIC16
Микроконтроллеры серии 12F50x

Глава 8. Семейство PIC18F
Организация памяти
Организация тактирования
Таймеры
АЦП
Обработка прерываний

Глава 9. Семейство PIC24
Порты
Таймеры
Прерывания
Окно Program Space Visibility
Интерфейс SPI
Порт PMP
АЦП
Модуль CTMU

Глава 10. Семейство PIC32
Порты
Таймеры
Системная шина
Организация памяти
Прерывания и исключения
Система тактирования
Интерфейс SPI
Порт PMP 258
АЦП
Модуль сравнения на выходе

Часть IV. Компиляторы и средства разработки для микроконтроллеров PIC

Глава 11. Компилятор CCS-PICC
Создание проектов CCS-PICC вручную
Создание проектов CCS-PICC с помощью PIC Wizard
Создание проектов CCS-PICC с помощью PIC24 Wizard
Открытие и добавление в проект файлов с исходным кодом
Компиляция проекта
Меню Tools

Глава 12. Эмуляция и отладка программ в среде MPLAB
Рабочая область и проект MPLAB
Компиляция под управлением MPLAB
Настройка режима отладки/эмуляции
Работа в режиме отладки/эмуляции
Окна отладчика

Глава 13. Компилятор mikroC
Создание проекта mikroC
Компиляция проекта
Добавление в проект файлов с исходным кодом
Эмуляция выполнения программы
Вспомогательные инструменты среды mikroC

Глава 14. Компиляторы C30 и C32
Компилятор C30
Компилятор C32

Глава 15. Программаторы для микроконтроллеров PIC
Программные средства для программирования микроконтроллеров

Часть V. Язык C и директивы препроцессора

Глава 16. Основы языка C
Вводные понятия
Структура программы на C
Типы данных, переменные, константы
Функции
Структуры
Указатели и адреса переменных
Массивы и строки
Операторы ветвления
Циклические конструкции
Стандартные функции ввода/вывода
Директивы препроцессора
Обработка прерываний
Исполнение ассемблерного кода

Глава 17. Функции и макросы языка C для различных компиляторов
Стандартные функции языка C
Функции и макросы компилятора WinAVR
Функции и макросы компилятора CodeVisionAVR
Функции и макросы компилятора CCS-PICC
Функции компилятора mikroC

Часть VI. Программные примеры для микроконтроллеров AVR

Глава 18. Примеры для компилятора WinAVR
Управление ЖК-дисплеем
GPS-навигатор

Глава 19. Примеры для компилятора CodeVisionAVR
Управление аналого-цифровым преобразованием
Измерение температуры

Часть VII. Программные примеры для микроконтроллеров

Глава 20. Примеры для компилятора CCS-PICC
Отображение состояния выводов порта
Управление частотой мерцания светодиодов с помощью различных таймеров
Управление светофорами на перекрестке
Обмен данными в режиме PSP
Контроль предельной скорости вращения двигателя

Глава 21. Примеры для компилятора mikroC
Игральные “кости”
Вольтметр с ЖК-дисплеем
Калькулятор

Глава 22. Примеры для компилятора C30
Использование порта PMP
Работа с АЦП

Глава 23. Примеры для компилятора C32
Работа с интерфейсом SPI
Работа с модулем UART

Часть VIII. Приложения
Приложение А. Таблица символов ASCII
Приложение Б. Преобразование из одной системы счисления в другую
Приложение В. Система команд микроконтроллеров AVR
Наличие команд в различных микроконтроллерах AVR
Команды по категориям
Приложение Г. Система команд микроконтроллеров PIC
Команды восьмиразрядных микроконтроллеров
Система команд микроконтроллеров PIC24
Приложение Д. Область ввода/вывода микроконтроллеров AVR ATxmega

Название: Программирование на языке C для AVR и PIC микроконтроллеров (2-е издание) +CD
Автор: Шпак Ю. А.
Издательство: МК-Пресс
ISBN: 966-5-7931-0842-3
Год издания: 2011
Формат: DJVU + CD
Язык: русский
Страниц: 544
Размер: 596,39 mb

Скачать Шпак Ю.А. Программирование на языке C для AVR и PIC микроконтроллеров (2-е издание) +CD

Источник

Программирование микроконтроллеров PIC16/PIC18 на языке C. Статья вторая. Базовые сведения о платформе. Первая программа

Если в первой статье все получилось хорошо — мы получили базовую программную обстановку для продолжения обучения.

Как я говорил ранее, пока что объяснять буду на базе МК PIC16F628A.
Обязательно качаем документацию на него. Рекомендую для поиска — alldatasheet.com
DataSheet — главный документ при разработке на базе МК.
Рекомендую распечатывать основные таблицы и разделы для удобства пользования.

Наиболее важные сведения о кристалле:
— максимальная рабочая частота — 20МГц;
— 2048х14 бит флеш-ПЗУ;
— 224 байта статической ОЗУ;
— 128 байт энергонезависимой ПЗУ;
— 16 доступных выводов;
— модуль приемо-передатчика;
— 3 таймера.

Данный кристалл — представитель так называемого среднего (Mid-range) семейства МК PIC.

Вкратце расскажу о том, что обязательно нужно понимать.

Память данных устройства разделена на 4 банка.
Банки содержат регистры специального назначения(SFR) и регистры общего назначения(GPR).
SFR — используются для управления устройством и его модулями.
Регистры обшего назначения представлены в виде статической ОЗУ, где мы можем хранить свои переменные.
Специальные регистры занимают по 32 начальные позиции в каждом банке.
В ДШ на страницах 18-21 показаны все регистры специального назначения. Распечатайте их — пригодится и не раз.

Это довольно таки объемная тема, и пропускать ее никак нельзя.
А с другой стороны нудноватая и неинтересная.
Пробуйте переосилить себя и прочитать об организации памяти и регистрах специального назначения в ДШ и у Шпака(упоминал в первой статье).

У данного устройства два порта: PORTA и PORTB.
Каждый вывод порта может использоваться непосредственно как простой вывод либо как вывод прочих модулей МК.
В самом начале ДШ вы должны были заметить что каждый вывод помимо основного названия, к примеру RB1, содержит еще и другое наименование RX и DT.
Вот здесь RX и есть второстепенная функция вывода — как вход приемо-передатчика.
Но пока мы не будем трогать периферийные модули устройства.

Каждый вывод порта может функционировать как вход или как выход.
Например, если нам нужно зажечь светодиод то вывод, к которому он подключен мы конфигурируем как выход, и выставляем на нем соответствующий уровень.
А вот если нам нужно подключить кнопку к порту и считывать факт нажатия, то здесь уже необходимо конфигурировать этот вывод как вход.
Конфигурация вход/выход осуществляется с помощью регистров TRIS.
Если в соответствующий бит регистра TRIS записать 1 то этот вывод станет входом, если 0 — выходом(видимо в связи с схожестью 1 и Input, а 0 и Output)
К примеру:

Имена регистров можно посмотреть в папке «Папка HT-PICC\include» для соответствующего контроллера.

Для установления определенного уровня на выводе используем регистр PORT.
К примеру:

PORTA = 0; // Все выводы порта А с низким уровнем
PORTB = 0xff; // Все выводы порта B с высоким уровнем
RB5 = 1; // На пятом выводе порта B высокий уровень

Так. Достигаем момента когда неоходимо сделать отступление собственно по языку C.
Наверное напишу здесь небольшой пример. Скомпилируем. Запустим в Proteus, а о базовом языке C напишу в следующей статье.

Напишем небольшую программку. Помигаем светодиодом.
Пользуемся ранее созданным проектом, либо создаем новый, по схеме из первой статьи.

Для начала подключим файл заголовков.

Мы не выбираем конкретную модель, а указываем pic.h. Если открыть его то увидим скрипт выбора конкретного файла исходя из выбранного устройства при создании проекта.

Далее нам нужно инициализировать наши порты.
Создаем основную функцию программы:

Пойдем в «Папка HT-PICC\samples\delay».
Скопируем оттуда delay.c и delay.h и вставим их в папку проекта.

Добавим строку в начале:
#include «delay.c»
Мы будем использовать функцию DelayMs(x) для создания паузы между переключениями светодиода.

Допустим светодиод подключен к RB0.
Для его переключения будет использоваться логическое исключающее «ИЛИ»:

В итоге код принимает вид:

void main(void)
<
TRISA = 0;
PORTA = 0;
TRISB = 0;
PORTB = 0;

while(1)
<
DelayMs(250); // Сделаем паузу в полсекунды
DelayMs(250);
RB0 ^= 1; // инвертируем вывод
>
>

Язык си для pic микроконтроллеров

Видим несколько пунктов.
Выставляем как на скрине.
Oscillator — HS — в качестве тактового генератора будет использоваться высокочастотный кварцевый резонатор.
WatchDog Timer — Off, если включить, то микроконтроллер будет периодически сбрасываться во избежание каких-либо зависаний. Нам такая возможность пока не нужна.
Power Up Timer — Enabled, МК будет находится в состоянии сброса, пока напряжение питания не достигнет необходимого порогового уровня.
Brown Out Detect — On, сброс МК, если произошло падение питающего напряжения ниже определенного уровня.
Low Voltage Program — Disabled, запрещаем использовать низковольтное внутрисхемное программирование МК. Здесь уже зависит от Вашего программатора.
Data EE Read Protect — Off, разрешаем чтение данных и EEPROM памяти МК.
Code Protect — Off, отключаем защиту кода в МК. Если выставить On — то невозможно будет считать программу из МК. Нам пока такая возможность не нужна.

Язык си для pic микроконтроллеров

Еще раз жмем F10.
Закрываем.

Прогоним программу в Proteus.
Запускаем Proteus ISIS.
Находясь в разделе Component mode жмем Pick from libraries и, пользуясь поиском, добавляем на форму компоненты:
— PIC16F628A;
— LED-RED;
— RES;

Два раза кликаем на каждом из них и выставляем параметры.
Для МК — выбираем файл прошивки *.hex из папки нашего проекта, и выставляем частоту 4МГц.
Для LED-RED выбираем Model type — Digital.
Для резистора выбираем сопротивление в 300 Ом.
Добавляем на форму Ground в разделе Terminals mode и соединияем как на скрине.
Язык си для pic микроконтроллеров
Жмем Play — светодиод должен мигать.

В следующей статье плотно пройдусь по языку C.
Вслед за ней будет статья по периферии контроллера и примеры кода для нее.
И за ней планирую рассказать о USB и PIC 18.
Вот такой план пока:-)

Источник

Видео

Программирование микроконтроллеров на си

Программирование микроконтроллеров на си

Микроконтроллеры PIC для начинающих. Практика #1

Микроконтроллеры PIC для начинающих. Практика #1

Программирование МК PIC. Урок 1. Знакомство с семейством PIC

Программирование МК PIC. Урок 1. Знакомство с семейством PIC

Программирование микроконтроллеров на си

Программирование микроконтроллеров на си

Программирование на C. Урок 1. Наша первая программа. Часть 1

Программирование на C. Урок 1. Наша первая программа. Часть 1

Микропроцессоры и "умные" вещи / Встроенные системы, IoT и язык С / Интервью с Design Engineer

Микропроцессоры и "умные" вещи / Встроенные системы, IoT и язык С / Интервью с Design Engineer

C++ Siberia 2019: Игнат Ворошилов, Возможности С++ для программирования микроконтроллеров

C++ Siberia 2019: Игнат Ворошилов, Возможности С++ для программирования микроконтроллеров

Программирование МК PIC. Урок 24. USART. Приём данных. Соединяем два микроконтроллера. Часть 1

Программирование МК PIC. Урок 24. USART. Приём данных. Соединяем два микроконтроллера. Часть 1

Язык C за 100 секунд [перевод на русский]

Язык C за 100 секунд [перевод на русский]

33. Знакомство с алгоритмами при написания программ для PIC микроконтроллеров (Урок 28. Теория)

33. Знакомство с алгоритмами при написания программ для PIC микроконтроллеров (Урок 28. Теория)
Поделиться или сохранить к себе:
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных, принимаю Политику конфиденциальности и условия Пользовательского соглашения.