Теперь у нас есть среда программирования и компилятор. Также у нас есть готовый проект. Поэтому теперь самое время заняться написанием какого-нибудь кода.
Ну и, по традиции, давайте напишем код, который будет управлять свечением светодиодов, подключенных к ножкам портов микроконтроллера. То есть за счёт поочерёдного поступления положительного потенциала от ножек портов на ножки светодиодов, а также нулевого номинала на другие ножки, мы создадим поочерёдное свечение и потухание светодиодов, за счёт чего произойдёт эффект бегущих огней. Почему именно нужно начинать с такого проекта? Да потому, что светодиоды, как ничто другое, позволяют наглядно оценить управление уровнями на ножках портов, в ту же очередь управление битами в регистрах специального назначения — а именно в регистрах портов ввода-вывода.
Сначала давайте соберём схему с контроллером PIC16F84A и подключенными через токоограничивающие резисторы светодиодами в программе-стимуляторе — Proteus

32. Управление светодиодом с использованием кнопки и PIC16F84A (Урок 27. Теория)
Также мы обязаны подать питание на соответствующие ножки, а также на соответствующие ножки обязаны подключить кварцевый резонатор и конденсаторы на 15 пикофарад. Но, как известно, в проетусе этого делать необязательно. Всё и так будет работать. А в практической схеме, конечно, .об этом ни в коем случае нельзя забывать.
Далее откроем наш проект и настроим ножки портов, к которым подключены светодиоды, на выход. Делается это подобно тому, как мы это делали, когда работали с микроконтроллерами AVR. Также установим низкий уровень на этих ножках, так как в отличие от AVR при старте может быть любой случайный уровень, нам этого не нужно
TRISB = 0x00;
PORTB = 0x00;
TRISA
PORTA
Чуть не забыл, давайте настроим конфигурационные биты. Это биты, без которых нам не обойтись. С помощью них мы настраиваем некоторые свойства нашего контроллера, подобна фьюзам в AVR. Для того, чтобы более удобно их настраивать, есть специальный инструмент в среде программирования MPLAB X IDE.
Проследуем по пунктам меню Window -> PIC Memory Views -> Configuration Bits и внизу у нас появятся настроики этих самых битов конфигурации. Настроим там следующие занчения

Как написать программу для включения светодиодов, подключенных к PIC16F84A
В данном уроке показано, как пишется программа управления для PIC16F84A на языке ассемблер в программе MPLABX. Программа включает светодиоды, подключенные к ножкам PIC16F84A. Для упрощения понимания работы PIC16F84A и написания программы для включения светодиодов используется модель с выключателями с разными назначениями.
Проект на PIC микроконтроллере PIC16C84 (или PIC16F84)
PIC16C84 (или PIC16F84) фирмы Microchip — миниатюрный, но мощный микроконтроллер. Он основан на EEPROM или «FLASH» технологии, позволяющей перепрограммировать его буквально за секунды. Типовое количество циклов перезаписи — около 1000. Из его 18-ти выводов 13 могут использоваться как разряды ввода/вывода общего назначения.
4. Как написать программу для включения светодиодов, подключенных к PIC16F84A (Урок 4. Теория)
Когда они программируются на вывод, то допускают ток «1» до 20 мА и ток «0» до 25 мА (более чем достаточный для подключения, например, светодиодов). Это позволяет разрабатывать на данном микроконтроллере простые и недорогие электронные устройства и делает его идеальным для желающих изучить принципы работы микроконтроллеров.


Этот короткое руководство предназначено для людей, которые только что собрали или купили программатор для PIC микроконтроллера и хотят убедиться, что оба, программатор и микроконтроллер, работают. Для этого сначала необходимо обладать некоторыми знаниями о структуре и функционировании PIC микроконтроллера. Это цоколевка выводов (см.рис.):
Выводы RA* и RB* — это контакты ввода/вывода, связанные с регистрами микроконтроллера PORTA и PORTB соответственно (RA4 также может быть использоваться как вход внутреннего таймера, а RB0 может быть использован как источник прерываний). VDD и VSS — выводы питания (+Uпит и GND соответственно). Серия 16 x 84 работает в широком диапазоне питающих напряжений, но обычно VSS подключен к 0В, а VDD подключен +5 В. Вывод основного сброса /MCLR обычно подключен к VDD (напрямую или через резистор), потому что микроконтроллер содержит надежную схему сброса при включении питания — все, что вам надо, микроконтроллер выполнит сам. Выводы OSC1 и OSC2 подключаются к генератору тактовой частоты и могут быть сконфигурированы для различных его типов, включая режимы кварца и RC-генератора. Простая схема, которая используется как база для проекта с использованием PIC16C84 представлена на рисунке:
Более наглядная схема:
Схема содержит RC-генератор и один вывод (RB4) подключен к индикатору. Это — все, что необходимо для работы микроконтроллера. Charles Manning (Electronics Australia, April 1996) написал изумительно короткую (6 слов) программу для мигания индикатора, которую вы можете использовать с этой схемой: http://www.microchip.com).
Для использования программы вы должны извлечь ее из этого файла любым редактором, сохранить в другой файл (например LIGHTS.ASM), затем проассемблировать с помощью MPASM (используйте команду «MPASM LIGHTS.ASM») для получения HEX файла LIGHTS.HEX, который может быть загружен в микроконтроллер с помощью программатора. Не обращайте внимания на замечания MPASM о том, что использование регистров TRIS и OPTION «не рекомендуется». Убедитесь в том, что сторожевой таймер «watchdog» включен и выбран RC-генератор. Если у вас еще нет MPASM, то здесь представлен HEX-вариант приведенной выше программы:
LIST P=16C84 ; MOVLW 0 TRIS 6 OPTION LOOP SLEEP INCF 6,F GOTO LOOP END
Эта программа написана для MPASM (бесплатный ассемблер от Microchip, доступный по адресу
Вы можете записать эти две строки в файл LIGHTS.HEX без использования MPASM. Если вы используете один из моих PIC программаторов (например TOPIC или PP), вы можете можете загрузить этот файл с корректной конфигурацией с помощью следующей команды:
PP -RW8 LIGHTS.HEX (PP V-0.3)
PP -RW LIGHTS.HEX (PP V-0.4)
Программа использует таймаут «watchdog» таймера как как источник синхронизации для определения моментов включения и выключения светодиода; в результате вы можете заставить светодиод вспыхивать с различной частотой, подключая его к различным разрядам порта PORTB (RB0-RB7, выводы 6-13). Это необычное использование «watchdog» таймера.
Обычно «watchdog» таймер используется, чтобы удостовериться, что PIC ведет себя в соответствии с заданной программой, и, если ваша программа специально не сконфигурирована для использования «watchdog» таймера, активизировать его было бы большой ошибкой. Простая программа LIGHTS использует его для выхода из режима «SLEEP» (т.е. режима «засыпания»); при выходе из этого режима PIC увеличивает содержимое регистра PORTB, что изменяет состояние RB0-RB7 и опять переходит в режим «засыпания» до следующего таймаута «watchdog» таймера. «Watchdog» таймер синхронизирован внутренним RC генератором, который имеет одинаковый период на всех PIC микроконтроллерах, следовательно, использование «watchdog» таймера для операций со временем гарантирует, что временные задержки будут измеряться стабильно независимо от конфигурации задающего генератора микроконтроллера или используемой частоты (желательно, чтобы частота составляла хотя бы несколько кГц).
Это свойство делает программу LIGHTS очень удобной для начального тестирования большинства макетных плат для PIC. Схема может быть изменена для получения значительно большего количества эффектов путем добавления сведодиодов. Подключите первый из них к выводу RB0 (контакт 6), второй — к RB1 (контакт 7), третий — к RB2 (контакт 8) и т.д. Наилучшим вариантом является использование как минимум четырех светодиодов с увеличением до восьми (последний подключить к RB7, т.е. контакт 13). Каждый сведодиод подключается через резистор 470 Ом между ножкой микроконтроллера и «землей» (см. схему). Следующая программа реализует эффект «бегущего огня»:
:100000008601831686010A3081008312860A031056 :100010006300860D861D08286300860C061C0C28CC :020020000828AE :00000001FF
Снова вы должны с указать программатору включить «watchdog» таймер и RC генератор. Если вы запишете указанные выше четыре HEX строки в файл (например, WALKLEDS.HEX), вы можете загрузить программу, используя
PP -RW8 WALKLEDS.HEX (PP V-0.3) PP -RW WALKLEDS.HEX (PP V-0.4) TOPIC -RWG WALKLEDS.HEX (TOPIC V-0.2)
Программа «бегущий огонь» предназначена для использования четырех светодиодов, но вы можете изменять значение MSB для использования большего количества светодиодов: для количества светодиодов 5, 6, 7 и 8 значения MSB должны быть 4, 5, 6 и 7 соответственно.
В программе не используются команды TRIS и OPTIONS, не рекомендованные к применению фирмой «MicroChip», т.к. они могут не поддерживаться в будущих микроконтроллерах. Таким образом, в отличие от предыдущей программы, во время ассемблирования не будут генерироваться предупреждения Для предотвращения генерации MPASM’мом сообщений о корректном использовании регистровых банков необходимо инвертировать старший значащий бит в любом адресе, приходящемся на банк 1 (например, использовать TRISB^80H вместо обычного TRISB, где оператор «^» означает битовое «исключающее ИЛИ»). Это — одна из уловок, которые используются для подавления вывода предупреждающих сообщений MPASM.
В качестве заключительного примера рассмотрим программу, когорая демонстрирует такие же эффекты, как и программа WALKLEDS на 4-х светодиодах. Вы обратите внимание на то, что она значительно больше по объему и ее нельзя назвать примеров эффективного программирования. Она всего лишь предназначена для демонстрации нескольких ключевых идиом и технологий PIC микропроцессоров.
Кроме прочего, она содержит обработчик прерываний, процедуры записи и чтения данных встроенного FLASH EEPROM и демонстрирует, как в PIC реализован принцип табличного поиска. Программа содержит примеры одной из наиболее удобных особенностей MPASM, такой как два вида макрокоманд. Она также показывает, как отменить заданное по умолчанию основание системы счисления (шестнадцатеричное) для чисел и как внедрить информацию о конфигурации микроконтроллера. По крайней мере, по стилю она больше напоминает «настоящую» программу для микроконтроллера.
TOPIC -RWG LIGHTS.HEX (TOPIC V-0.2) Проассемблируйте эту программу с помощью MPASM для получения ее HEX представления:
Источник: www.rlocman.ru