Микроконтроллер PIC16F877A: введение, особенности и начало работы


Микроконтроллер PIC16F877A — один из самых известных микроконтроллеров в отрасли. Этот микроконтроллер очень удобен в использовании, а его программирование также не представляет сложности. Одним из его главных преимуществ является возможность многократной записи и стирания данных благодаря использованию технологии FLASH-памяти. Он имеет 40 выводов, из которых 33 предназначены для ввода и вывода. PIC16F877A на нашем сайте используется во многих проектах на базе микроконтроллеров PIC.

Внешний вид микроконтроллера PIC16F877A

Микроконтроллер PIC16f877a находит применение в огромном количестве устройств. Он используется в дистанционных датчиках, системах безопасности, системах домашней автоматизации и многих промышленных приборах. В нем также имеется EEPROM, позволяющая постоянно хранить некоторую информацию, такую ​​как коды передатчиков, частоты приемников и другие связанные данные. Стоимость этого контроллера низкая, а его использование простое. Он гибок и может применяться в областях, где микроконтроллеры ранее не использовались, например, в микропроцессорных приложениях и функциях таймеров и т. д.

Другие особенности данного микроконтроллера:

  • В нём содержится меньший набор из 35 инструкций;
  • Он может работать на частоте до 20 МГц;
  • Рабочее напряжение составляет от 4,2 до 5,5 вольт. Подача напряжения выше 5,5 вольт может привести к необратимому повреждению устройства;
  • В отличие от других микроконтроллеров PIC18F46K22 и PIC18F4550, он не имеет встроенного генератора;
  • Максимальный ток, который может потреблять или отдавать каждый порт, составляет около 100 мА; Следовательно, ограничение по току для каждого вывода GPIO микроконтроллера PIC16F877A составляет 10 миллиампер;
  • Он доступен в четырех вариантах корпуса микросхемы: 40-контактный PDIP, 44-контактный PLCC, 44-контактный TQFP и 44-контактный QFN.

Конфигурация и распиновка микроконтроллера PIC16F877A

  • Как уже упоминалось ранее, этот микроконтроллер имеет 40 выводов. Он включает в себя два 8-битных и один 16-битный таймер. Также в нем присутствуют модули захвата и сравнения, последовательные порты, параллельные порты и пять портов ввода/вывода. На следующем рисунке показана схема расположения выводов PIC16F877A.

Распиновка микроконтроллера PIC16F877A

  • PIN 1: MCLR: первый вывод — это главный вывод сброса этой микросхемы. Он сбрасывает микроконтроллер и находится в низком активном состоянии, то есть на него постоянно должно подаваться напряжение 5 В, а если подается 0 В, то контроллер сбрасывается. Сброс контроллера вернет его к первой строке программы, записанной в микросхему.

Контакт сброса микроконтроллера PIC16F877A

  • К выводу подключены кнопка и резистор. На вывод уже подается постоянное напряжение 5 В. Для сброса микросхемы достаточно нажать кнопку, которая установит потенциал вывода MCLR на 0, тем самым сбросив контроллер.
  • PIN 2: RA0/AN0: порт A состоит из 6 контактов, с 2-го по 7-й, все они являются двунаправленными входными/выходными контактами. Контакт 2 — первый контакт этого порта. Этот контакт также может использоваться как аналоговый контакт AN0. В него встроен аналого-цифровой преобразователь.
  • PIN 3: RA1/AN1: это может быть аналоговый вход 1.
  • PIN 4: RA2/AN2/Vref- : он также может выступать в качестве аналогового входа². Или на него можно подавать отрицательное аналоговое опорное напряжение.
  • PIN 5: RA3/AN3/Vref+: он может выступать в качестве аналогового входа 3. Или в качестве аналогового положительного опорного напряжения.
  • PIN 6: RA0/TOCKI: для таймера 0 этот вывод может выступать в качестве входного контакта тактового сигнала, тип выхода — с открытым стоком.
  • PIN 7: RA5/SS/AN4: это может быть аналоговый вход 4. В контроллере также есть синхронный последовательный порт, и этот вывод можно использовать в качестве вывода выбора ведомого устройства для этого порта.
  • PIN 8: RE0/RD/AN5: PORTE начинается с контакта 8 и заканчивается контактом 10, и это также двунаправленный вход-выходной порт. Он может быть аналоговым входом 5, или, для параллельного ведомого порта, может выступать в качестве контакта «управления чтением», который будет активен в низком состоянии.
  • PIN 9: RE1/WR/AN6: он может быть аналоговым входом 6. А для параллельного ведомого порта он может выступать в качестве «управляющего сигнала записи», который будет активен в низком состоянии.
  • PIN 10: RE2/CS/A7: он может быть аналоговым входом 7, или, для параллельного ведомого порта, может выступать в качестве «выбора управления», который также будет активен в низком состоянии, как и контакты управления чтением и записью.
  • PIN 11 и 32: VDD: эти два контакта являются положительным источником питания для входных/выходных и логических выводов. Оба должны быть подключены к напряжению 5 В.
  • PIN 12 и 31: VSS: эти контакты являются опорным заземлением для входных/выходных и логических контактов. Их следует подключать к нулевому потенциалу.
  • PIN 13: OSC1/CLKIN: это вход генератора или вход внешнего тактового сигнала.
  • PIN 14: OSC2/CLKOUT: это выходной вывод генератора. Между выводами 13 и 14 подключен кварцевый резонатор для подачи внешнего тактового сигнала на микроконтроллер. В режиме RC OSC2 выдает ¼ частоты OSC1. Это указывает на частоту цикла выполнения команд.

Схема подключения к микроконтроллеру PIC16F877A кварцевого генератора

  • PIN 15: RC0/T1OCO/T1CKI: PORTC состоит из 8 контактов. Это также двунаправленный порт ввода-вывода. Из них контакт 15 является первым. Он может быть тактовым входом таймера 1 или выходом генератора таймера 2.
  • PIN 16: RC1/T1OSI/CCP2: может быть входом генератора таймера 1 или входом захвата 2/выходом сравнения 2/выходом ШИМ 2.
  • PIN 17: RC2/CCP1: может использоваться как вход захвата 1, выход сравнения 1 или выход ШИМ 1.
  • PIN 18: RC3/SCK/SCL: может использоваться в качестве выхода для режимов SPI или I2C, а также в качестве входа/выхода для синхронного последовательного тактового сигнала.
  • PIN 23: RC4/SDI/SDA: это может быть вывод данных SPI. Или, в режиме I2C, это может быть вывод ввода/вывода данных.
  • PIN 24: RC5/SDO: это может быть вывод данных через SPI в режиме SPI.
  • PIN 25: RC6/TX/CK: это может быть контакт синхронного тактового генератора или асинхронного передающего интерфейса USART.
  • PIN 26: RC7/RX/DT: это может быть контакт синхронной передачи данных или контакт приема USART.
  • PIN 19, 20, 21, 22, 27, 28, 29, 30: все эти контакты относятся к порту PORTD, который также является двунаправленным портом ввода-вывода. При подключении к шине микропроцессора он может выступать в качестве параллельного ведомого порта.
  • PIN 33-40: PORT B: все эти контакты относятся к порту B. Из них RB0 может использоваться как контакт внешнего прерывания, а RB6 и RB7 — как контакты отладчика внутри схемы.

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

Как программировать входные и выходные порты PIC16F877A

  • Мы изучили 5 входных и выходных портов, а именно PORTA, PORTB, PORTC, PORTD и PORTE, которые могут быть как цифровыми, так и аналоговыми.
  • Мы настроим их в соответствии с нашими требованиями. Но в аналоговом режиме контакты или порты могут работать только как входы. В таких случаях используется встроенный аналого-цифровой преобразователь. Также применяются мультиплексорные схемы.
  • Но в цифровом режиме ограничений нет. Мы можем настроить порты как на выход, так и на вход. Это делается посредством программирования. Для PIC предпочтительным компилятором является mikro C pro, который можно скачать с их веб-сайта.
  • Существует регистр под названием «TRIS», который управляет направлением портов. Для разных портов существуют разные регистры, такие как TRISA, TRISB и т. д.
  • Если мы установим бит регистра TRIS в 0, то соответствующий бит порта будет выступать в качестве цифрового выхода.
  • Если установить бит регистра TRIS в 1, соответствующий бит порта будет выступать в качестве цифрового входа.
  • Например, чтобы настроить весь порт B на вывод сигнала, мы можем написать программу следующим образом:

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

  • FF обозначает все единицы в двоичном коде, то есть FF=11111111, теперь все выводы порта b находятся в высоком состоянии. Если подключить светодиоды ко всем выводам, то в этом состоянии они все начнут светиться.
  • Если мы хотим инвертировать значения порта b, мы можем использовать следующее выражение:

  • Теперь все контакты порта b будут находиться в низком состоянии.

Компилятор для микроконтроллера PIC16F877A

  • Для программирования микроконтроллеров PIC используются три популярных компилятора: MPLAB XC8, Mikro C for pic, PIC CCS compiler и Hi-Tech compiler.
  • Официальным компилятором является MPLAB XC8, разработанный производителями микроконтроллера PIC16F877A.
  • В целом, для начинающих мы рекомендуем компилятор Mikro C для микроконтроллеров PIC, а для тех, кто хочет изучить программирование микроконтроллеров PIC, начиная с регистрового уровня и заканчивая концепциями работы с аппаратным обеспечением.
  • Для получения более подробной информации вы можете ознакомиться с нашей статьей про начало работы с микроконтроллерами PIC .

Основные характеристики микроконтроллера PIC16F877A

Как и все другие микроконтроллеры, PIC16F877A также обладает встроенными полезными функциями, перечисленными в этом списке:

  • Модуль аналого-цифрового преобразователя (АЦП): он имеет 8-битный модуль АЦП, состоящий из 8 каналов. С этим микроконтроллером можно использовать 8 аналоговых датчиков.
  • Таймеры: в модуле предусмотрены три таймера: timer0, timer1 и timer2. Все эти таймеры могут использоваться как в режиме таймера, так и в режиме счетчика. Они используются для генерации задержек, широтно-импульсной модуляции, подсчета внешних событий и прерываний таймера. Таймер TIMER0 — 8-битный таймер, работающий как с внутренней, так и с внешней тактовой частотой. В режиме таймера TIMER0 обычно используется внутренняя частота, а в режиме счетчика — внешний источник тактового сигнала. Аналогично, TIMER1 — 16-битный таймер, работающий в обоих режимах. Таймер TIMER2 также 8-битный. Он используется с ШИМ в качестве временной базы для модуля CCP. Более подробно все эти вопросы вы можете изучить в статье по таймерам в микроконтроллерах PIC для начинающих.
  • EEPROM: также имеет встроенную электрически стираемую постоянную память объемом 256 x 8 байт, которая может использоваться для постоянного хранения данных, даже если микроконтроллер выключен; данные останутся там. Обычно используется в проектах, связанных с электронными замками.
  • Модули ШИМ:  он также предоставляет 2 модуля CCP. CCP - это модули захвата-сравнения ШИМ. С помощью этого микроконтроллера можно легко генерировать два ШИМ-сигнала. Максимальное поддерживаемое разрешение составляет 10 бит. Для получения дополнительной информации и программирования вы можете ознакомиться со статьей про использование широтно-импульсной модуляции (ШИМ) в микроконтроллерах PIC.
  • Контакты последовательной связи или UART: поддерживается один канал UART. Контакты UART используются для последовательной связи между цифровыми устройствами. Контакт RC7 — это контакт передатчика или RX, номер контакта 26. RC6 — это контакт приемника или Tx, номер контакта 25. Для получения дополнительной информации ознакомьтесь с этим полным руководством по последовательной связи с использованием микроконтроллеров PIC.
  • Связь по I2C: PIC16F877A также поддерживает связь по I2C и имеет отдельный модуль для этой связи. Выводы № 18/RC3 и 23/RC4 — это выводы SCL и SDA соответственно. SCL — это линия тактового сигнала, а SDA — линия передачи данных по последовательному интерфейсу. Учебное пособие по использованию интерфейса I2C в микроконтроллерах PIC поможет вам лучше понять эти вопросы.
  • Прерывания: прерывания находят широкое применение в области встроенных систем. Если вы ничего не знаете о прерываниях, я рекомендую вам полностью разобраться в них, иначе вы не сможете освоить их в программировании встроенных систем. Микроконтроллер PIC16F877A предоставляет 8 типов прерываний, а именно: внешние прерывания, прерывания таймера, прерывания изменения состояния порта, прерывания UART, I2C, ШИМ-прерывания. Вы можете прочитать это руководство по прерываниям микроконтроллера PIC для получения дополнительной информации.
  • Модуль компаратора: он включает в себя модуль компаратора, состоящий из двух компараторов. Они используются для сравнения аналоговых сигналов аналогично компараторам в электронных схемах. Входные контакты для этих компараторов — RA0, RA1, RA2 и RA3, а выходной сигнал может измеряться через контакты RA4 и RA5.
  • Сторожевой таймер (WDT) — это отдельный генератор на кристалле, работающий автономно. Он не связан с OSC1/CLKI. WDT будет работать даже в спящем режиме устройства. Он используется для пробуждения устройства из спящего режима, а также для сброса сторожевого таймера.
  • Режим сна: PIC16F877A также поддерживает режим сна. В этом режиме устройство работает с очень низким энергопотреблением. Все периферийные устройства потребляют минимальное количество тока. Пробуждение из режима сна происходит по прерываниям, таким как прерывание таймера 1, прерывание UART, завершение записи в EEPROM и многие другие.
  • Обнаружение просадки напряжения: также имеется схема обнаружения просадки напряжения, которая определяет значительное падение напряжения питания. Если напряжение питания падает ниже определенного предела, генерируются сигналы прерывания. Этот бит конфигурации (BODEN) используется для включения или выключения этой схемы.
  • Сброс при понижении напряжения: эта опция сбрасывает устройство при обнаружении сигнала прерывания, связанного с понижением напряжения, от сигнала BODEN.
  • Защита от программируемого кода: при просадке напряжения произойдет сброс, и устройство останется в этом состоянии до тех пор, пока напряжение не поднимется до номинального значения. Устройство проверяет напряжение каждые 72 мс.

Ниже перечислены некоторые другие важные особенности:

  • Включение/выключение/перезагрузка;
  • Группа множественных осцилляторов;
  • Внутрисхемный отладчик;
  • Внутрисхемное последовательное программирование;
  • Программирование ICSP при низком напряжении.

Код для включения/мигания светодиода

Это простой урок по миганию светодиода с помощью микроконтроллера PIC16F877A. Для написания кода мы используем компилятор Mikro C для PIC. Если вы только начинаете программировать микроконтроллеры PIC, вы можете ознакомиться со следующими статьями на нашем сайте:

Этот код используется для переключения нулевого вывода PORTC с задержкой в ​​пятьсот миллисекунд. Внутри основной функции эта строка инициализирует вывод RB0 как цифровой выходной вывод.

После этого используется цикл do while, поскольку нам нужно постоянно переключать состояние светодиода. Внутри цикла do while эти строки устанавливают высокий уровень на цифровом сигнале RB0 на 500 мс.

Аналогично, в этих строках светодиод выключается на 500 мс.

Схема с миганием светодиода на микроконтроллере PIC16F877A

Схема с миганием светодиода на микроконтроллере PIC16F877A

  • Разработайте эту схему в Proteus. Соедините выводы с источником, землей и генератором, как описано в разделе описания выводов.
  • Подключите генератор 8 МГц к OSCI и OSC2 через два конденсатора по 22 пикофарад.
  • На вывод Reset подайте напряжение 5 вольт через резистор 10 кОм. Резистор не показан в симуляции, но его следует подключить при практической сборке схемы.
  • К выводу 33 RB0 подключен светодиод, резистор используется для ограничения тока и предотвращения перегорания светодиода. Напишите и скомпилируйте программу в Mikro C Pro.
  • Прошейте микроконтроллер с помощью hex-файла, дважды щелкнув по контроллеру в Proteus, и успешно запустите схему. Лучший способ изучить любой микроконтроллер — это изучить его техническое описание.
  • Pic Kit3 — это известный программатор, используемый для загрузки кода в микросхемы Microchip.
(Проголосуй первым!)
Загрузка...
140 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *