Мигаем светодиодом с помощью микроконтроллера PIC16F873A.

В данном уроке мы с Вами познакомимся с основами программирования микроконтроллеров фирмы PIC. Для начала мы с Вами поморгаем светодиодами.
Прежде чем писать программу необходимо настроить Fuse, без данных настроек микроконтроллер не сможет нормально работать. Рассмотрим данные Fuse:

FOSC — Биты выбора генератора
WDTE — Бит включения сторожевого таймера 
PWRTE — Бит включения сброса микроконтроллера, будет активный сброс до тех пор, пока питание микроконтроллер не поднимется до нужного уровня.
BOREN  — Бит сброса микроконтроллера при падении питания ниже нормы.
 LVP —  Бит разрешения низковольтного  внутрисхемного последовательного программирования.
CPD —  Бит защиты кода памяти EEPROM данных.
 WRT — Биты разрешения записи во флэш-память программ.
 CP — Бит защиты кода флэш-памяти программ.

Теперь можно перейти к написанию программы. За направление работы портов отвечает регистр TRISх :  0 — ножка настроена на выход, 1 — ножка настроена на вход. Регистр PORTx — отвечает за режим работы: если ножка настроена на выход, 0 — устанавливает на выходе логический ноль, 1 — устанавливает на выходе логическую единицу; если ножка настроена на вход, 1 — включает подтяжку ножки через внутренний резистор к питанию (не на всех ножках можно в данном микроконтроллере можно включить подтяжку).

Если нужно обратится к отдельному биту того или иного регистра достаточно указать имя регистра, слово bits и сам бит: PORTBbits.RB6 — в данной записи мы обращаемся к 6 биту регистра PORTB.


Теперь мы можем написать первую программу, в котором у нас будут мигать светодиоды. Светодиоды мы подключим к ножкам RB6 (27 — ножка) и RB7 (28 — ножка):

#define _XTAL_FREQ 8000000

#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = ON // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
#include <xc.h>

void main(void) {
TRISB = 0x00;
PORTB = 0x00;
while (1)
{
PORTBbits.RB6 = 0;
PORTBbits.RB7 = 1;
__delay_ms(500);
PORTBbits.RB7 = 0;
PORTBbits.RB6 = 1;
__delay_ms(500);
}
return;
}