Машинка на ДУ управлении своими руками — МК это просто (PIC)!

В предыдущем уроке мы освоили работу с AVR-микроконтроллером ATmega8. Этот урок посвящен любителям PIC-микроконтроллеров, если вы работаете с AVR, то можете пропустить этот урок.

На этом уроке мы начнём осваивать работу с МК PIC16F876A. Номера выводов определим согласно даташиту. Номера выводов определим согласно даташиту. Будем подключать МК к программатору согласно этому рисунку

Для прошивки к микроконтроллеру подключают 5 линий:

  • Vpp – напряжения программирования;
  • Vdd – напряжение питания +5 вольт;
  • Vss – общая линия (минус питания);
  • PGD – линия данных;
  • PGC – линия тактирования.

Подпаиваем провода к панельке для проверки. Получается как-то так…

Ну а теперь эти страшные фьюзы… В нашем МК их нет! А вместо них директива __CONFIG.

  • FOSC – тактовый генератор;
  • WDTE – сторожевой таймер;
  • PWRTE – таймер включения питания;
  • CP – защита кода программы;
  • BOREN – сброс по снижению напряжения питания;
  • LVP – низкоуровневое программирование;
  • CPD – защита данных EEPROM;
  • WRT – защита от записи памяти программ.

Первая программа

Программу для нашего МК мы будем писать в MPLAB X IDE v1.95. Запускаем MPLAB X IDE. Создаём новый проект File->New Project…

Выбираем тип процессора, язык программирования, жмём далее. В результате мастер создания проектов, выдаёт шаблон кода:

#include < stdio.h >
#include < stdlib.h >

int main(int argc, char** argv)
{
return (EXIT_SUCCESS);
}

Для проверки работоспособности МК напишем программу, которая будет изменять состояние седьмой линии порта PORTB каждые две секунды.

Указываем программе, с какой частотой работает тактовый генератор…

#define F_CPU 20000000UL  // Указываем тактовую частоту процессора

Выбираем порт PORTB, используем линию PB7 которая соединена с 28-ым выводом микросхемы.

Первым делом настроим эту линию на вывод. Для настройки направления данных используется регистр TRISx, где х – это имя порта. В нашем случае регистр будет называться TRISB.

PORTBbits.RB7 = 1; // Устанавливаем линию порта в высокое состояние

Собираем всё вместе.

#define _XTAL_FREQ 20000000 //Указываем тактовую частоту процессора

#include < htc.h > //Содержит в себе макроопределения, в частности __CONFIG
//#include < stdio.h >
//#include < stdlib.h >

#include < pic16f876a.h > //Файл определения имён регистров, портов…

__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & CP_OFF & BOREN_OFF & LVP_OFF & CPD_OFF & WRT_OFF);
int main(void) //Основная процедура программы…
{
TRISBbits.TRISB7 = 0; //Настраиваем линию порта PORTB7 на вывод!

while(1) //Бесконечный цикл
{
PORTBbits.RB7 = 1; //Устанавливаем линию порта в высокое состояние
__delay_ms(2000); //Ждём 2-е секунды

PORTBbits.RB7 = 0; //Устанавливаем линию порта в низкое состояние
__delay_ms(2000); //Ждём 2-е секунды
}

//return (EXIT_SUCCESS);
}

Чтобы установить вывод порта PB7 в низкое состояние, нам необходимо в бит PB7 порта PORTB записать ноль. Для этого применяют следующую конструкцию:

PORTBbits.RB7 = 0; //Устанавливаем линию порта в низкое состояние

Остаётся скомпилировать проект и прошить контроллер файлом с расширением .hex, который лежит по адресу диск:<имя проекта>distdefaultproduction.

Работоспособность программы проверяется вольтметром, подключённым к линии PB7 порта PORTB. Наблюдают изменение потенциала линии PB7 раз в две секунды.

Тема поддержки на форуме

Кто хочет идти «в ногу» с автором курса — создавайте свои дневники на форуме и выкладывайте что у вас получается и какие вопросы возникают при этом. 

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

Ваш адрес email не будет опубликован.