В предыдущем уроке мы освоили работу с 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, который лежит по адресу диск:\<имя проекта>\dist\default\production.
Работоспособность программы проверяется вольтметром, подключённым к линии PB7 порта PORTB. Наблюдают изменение потенциала линии PB7 раз в две секунды.
Кто хочет идти "в ногу" с автором курса - создавайте свои дневники на форуме и выкладывайте что у вас получается и какие вопросы возникают при этом.
Комментарии (1) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация